diff --git a/.claude/settings.local.json b/.claude/settings.local.json new file mode 100644 index 0000000..305e678 --- /dev/null +++ b/.claude/settings.local.json @@ -0,0 +1,267 @@ +{ + "permissions": { + "allow": [ + "Bash(grep -i \"\\\\.nix$\")", + "Bash(xargs ls *)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --raw .#homeConfigurations.nomarchy.activationPackage.outPath)", + "Bash(git *)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --raw .#nixosConfigurations.default.config.system.activationScripts.home-manager-activate.text)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --raw .#nixosConfigurations.installerIsoGraphical.config.system.activationScripts.home-manager-activate.text)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#nixosConfigurations.default.config.system.build.toplevel.drvPath)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#nixosConfigurations.installerIsoGraphical.config.system.build.toplevel.drvPath)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#homeConfigurations.nomarchy.activationPackage.drvPath)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --raw .#nixosConfigurations.default.config.systemd.services.\"home-manager-nomarchy\".serviceConfig.ExecStart)", + "Bash(nix --extra-experimental-features 'nix-command flakes' build .#nixosConfigurations.default.config.system.build.vm --no-link --print-out-paths)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#homeConfigurations.nomarchy.config.xdg.configFile.\"nomarchy/current/background\".source)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --raw .#homeConfigurations.nomarchy.config.home-files.outPath)", + "Bash(nix --extra-experimental-features 'nix-command flakes' build .#homeConfigurations.nomarchy.config.home-files --no-link --print-out-paths)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#homeConfigurations.nomarchy.config.systemd.user.startServices)", + "Bash(xxd)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --raw .#packages.x86_64-linux.allThemeVariants.drvPath)", + "Bash(chmod +x /home/bernardo/Projects/Coding/Nomarchy/themes/engine/scripts/nomarchy-themes-prebuild)", + "Bash(nix --extra-experimental-features 'nix-command flakes' build .#homeConfigurations.nomarchy.activationPackage --no-link --print-out-paths)", + "Bash(nix --extra-experimental-features 'nix-command flakes' build .#homeConfigurations.nomarchy.config.home.packages.outPath)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --raw .#homeConfigurations.nomarchy.config.home-path.outPath)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --impure --expr '\\(builtins.readDir ./themes/engine/scripts\\)' --json)", + "Bash(nix-build -I nixpkgs=/nix/var/nix/profiles/per-user/root/channels/nixos /home/bernardo/Projects/Coding/Nomarchy/flake.nix --argstr attr nixosConfigurations.installerIsoGraphical)", + "Bash(awk '{print $NF}')", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#nixosConfigurations.installerIsoGraphical.config.hardware.pulseaudio.enable .#nixosConfigurations.installerIsoGraphical.config.services.pipewire.enable .#nixosConfigurations.installerIsoGraphical.config.services.pipewire.pulse.enable)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#nixosConfigurations.installerIsoGraphical.config.services.displayManager.sddm.enable .#nixosConfigurations.installerIsoGraphical.config.services.displayManager.defaultSession .#nixosConfigurations.installerIsoGraphical.config.programs.hyprland.enable)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --json .#nixosConfigurations.installerIsoGraphical.config.users.users.nixos.extraGroups)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#nixosConfigurations.installerIsoGraphical.config.hardware.pulseaudio.enable)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#nixosConfigurations.installerIsoGraphical.config.services.pipewire.enable)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#nixosConfigurations.installerIsoGraphical.config.services.pipewire.pulse.enable)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#nixosConfigurations.installerIsoGraphical.config.programs.hyprland.enable)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval '.#nixosConfigurations.installerIsoGraphical.config.__TRACKED_VAR__')", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#nixosConfigurations.installerIsoGraphical.config.home-manager.users.nixos.home.packages --apply 'builtins.length')", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#nixosConfigurations.default.config.home-manager.users.nomarchy.home.packages --apply 'builtins.length')", + "Bash(chmod +x /home/bernardo/Projects/Coding/Nomarchy/features/scripts/utils/nomarchy-test-live-iso)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --json .#nixosConfigurations.installerIsoGraphical.config.boot.initrd.kernelModules)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#homeConfigurations.nomarchy.config.programs.waybar.systemd.enable)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --raw .#homeConfigurations.nomarchy.config.systemd.user.services --apply 'svcs: builtins.concatStringsSep \"\\\\n\" \\(builtins.attrNames svcs\\)')", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --raw .#homeConfigurations.nomarchy.config.gtk.iconTheme.package.pname)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --raw nixpkgs#everforest-gtk-variant.pname)", + "Bash(nix --extra-experimental-features 'nix-command flakes' search nixpkgs everforest)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#nixosConfigurations.default.pkgs.everforest-gtk-variant.pname)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#nixosConfigurations.default.pkgs.everforest-gtk-theme.pname)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#nixosConfigurations.default.pkgs.everforest-gtk-variant)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --impure --expr 'let pkgs = import \\(builtins.getFlake \"/home/bernardo/Projects/Coding/Nomarchy\"\\).inputs.nixpkgs { system = \"x86_64-linux\"; config.allowUnfree = true; }; in builtins.attrNames \\(pkgs // {} \\)')", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --impure --expr 'let pkgs = import \\(builtins.getFlake \"/home/bernardo/Projects/Coding/Nomarchy\"\\).inputs.nixpkgs { system = \"x86_64-linux\"; config.allowUnfree = true; }; in builtins.concatStringsSep \"\\\\n\" \\(builtins.filter \\(n: builtins.match \".*[Ee]verforest.*\" n != null\\) \\(builtins.attrNames pkgs\\)\\)' --raw)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --raw .#homeConfigurations.nomarchy.config.gtk.iconTheme.name)", + "Bash(bash -n /home/bernardo/Projects/Coding/Nomarchy/installer/install.sh)", + "Bash(bash -n /home/bernardo/Projects/Coding/Nomarchy/installer/hardware-db.sh)", + "Read(//tmp/**)", + "Bash(bash -c ' *)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --raw .#overlays.default --apply 'o: toString \\(builtins.typeOf o\\)')", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#overlays.default --apply 'o: \"overlay present: \" + builtins.typeOf o')", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --raw .#nixosConfigurations.default.config.system.nixos.distroName)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --raw .#nixosConfigurations.default.config.system.nixos.distroId)", + "Bash(nix-instantiate --parse /home/bernardo/Projects/Coding/Nomarchy/installer/disko-golden.nix)", + "Bash(nix --extra-experimental-features 'nix-command flakes' build .#nixosConfigurations.installerIsoGraphical.config.system.build.toplevel --no-link --print-out-paths)", + "Bash(bash /home/bernardo/Projects/Coding/Nomarchy/installer/install.sh --help)", + "Bash(bash -c 'echo \"HOSTNAME=$HOSTNAME\"')", + "Bash(bash -c 'echo \"HOSTNAME default=$HOSTNAME\"')", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --raw .#nixosConfigurations.installerIsoGraphical.config.services.getty.helpLine)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#nixosConfigurations.default.pkgs.voxtype.pname)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval .#nixosConfigurations.default.pkgs.opencode.pname)", + "Bash(nix --extra-experimental-features 'nix-command flakes' build .#nixosConfigurations.default.config.system.build.vm --no-link)", + "Bash(nix log *)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --json --impure --expr ' *)", + "Bash(cat)", + "Bash(chmod +x /tmp/theme_comparison.sh)", + "Bash(/tmp/theme_comparison.sh)", + "Bash(xargs -I {} dirname {})", + "Bash(xargs -I {} basename {})", + "Bash(chmod +x /tmp/color_compare.sh)", + "Bash(bash /tmp/color_compare.sh)", + "Bash(nix --extra-experimental-features \"nix-command flakes\" eval --raw 'github:nix-community/disko/latest#packages.x86_64-linux.disko.outPath')", + "Bash(find /nix/store/*disko*/lib/disko -name \"luks*\")", + "Bash(nix flake *)", + "Bash(nix-instantiate --parse /home/bernardo/Projects/Coding/Nomarchy/flake.nix)", + "Bash(nix eval *)", + "Bash(bash installer/install.sh --dry-run)", + "Bash(sudo bash *)", + "Bash(chmod +x /home/bernardo/Projects/Coding/Nomarchy/core/system/scripts/nomarchy-env-update)", + "Bash(bash -n /home/bernardo/Projects/Coding/Nomarchy/core/system/scripts/nomarchy-env-update)", + "Bash(sed -n '1450,1500p' /home/bernardo/Projects/Coding/Nomarchy/installer/install.sh)", + "Bash(grep -A 5 'nixosConfigurations.$HOSTNAME' /home/bernardo/Projects/Coding/Nomarchy/installer/install.sh)", + "Bash(mkdir -p /tmp/globtest)", + "Bash(touch nvme0n1 *)", + "Bash(shopt -s nullglob)", + "Bash(bash -n installer/install.sh)", + "Bash(nix --extra-experimental-features \"nix-command flakes\" eval .#nixosConfigurations.nomarchy-live.config.system.build.toplevel.outPath)", + "Bash(nix --extra-experimental-features \"nix-command flakes\" eval --impure --expr 'let f = import ./core/system/impermanence.nix; in \\(f { config = { nomarchy.system.impermanence = { enable = true; mainLuksName = \"crypted_main\"; }; }; lib = \\(import {}\\).lib; pkgs = null; inputs = { impermanence.nixosModules.impermanence = {}; }; }\\).config.boot.initrd.postDeviceCommands')", + "Bash(nix --extra-experimental-features \"nix-command flakes\" eval .#nixosConfigurations.nomarchy-installer.config.system.build.toplevel.outPath)", + "Bash(nix --extra-experimental-features \"nix-command flakes\" eval .#nixosConfigurations.nomarchy-live.config.nomarchy.system.theme)", + "Bash(chmod +x *)", + "Bash(./bin/utils/nomarchy-docs-scripts --out docs/SCRIPTS.md)", + "Bash(awk '/^## Missing references/,/^## Menu items/' docs/SCRIPTS.md)", + "Bash(bash -n bin/utils/nomarchy-docs-scripts)", + "Bash(bash -n features/scripts/utils/nomarchy-docs-scripts)", + "Bash(bash -n themes/engine/scripts/nomarchy-theme-next)", + "Bash(grep '`unused?`' docs/SCRIPTS.md)", + "Bash(awk -F'|' '{print $2}')", + "Bash(awk *)", + "Bash(grep -c '`unused?`' docs/SCRIPTS.md)", + "Bash(grep -n '`unused?`' docs/SCRIPTS.md)", + "Bash(grep '^| `__TRACKED_VAR__` ' docs/SCRIPTS.md)", + "Bash(nix --extra-experimental-features 'nix-command flakes' flake check --no-build)", + "Bash(grep -c '`kept`' docs/SCRIPTS.md)", + "Bash(nix shell *)", + "Bash(nix shell 'nixpkgs#shellcheck' --command bash -c ' *)", + "Bash(./bin/utils/nomarchy-docs-scripts --out /tmp/SCRIPTS.regen.md)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --impure --expr ' *)", + "Bash(sed -n '100,108p' core/home/options.nix)", + "Bash(sed -n '185,195p' core/system/options.nix)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --impure --json --expr ' *)", + "Bash(bash -n *)", + "Bash(nix --extra-experimental-features 'nix-command flakes' eval --impure --raw --expr ' *)", + "Bash(grep '^| `nomarchy-manual`' docs/SCRIPTS.md)", + "Bash(nix *)", + "Bash(sudo -n cat /etc/environment)", + "Bash(systemctl --user show-environment)", + "Bash(./bin/utils/nomarchy-docs-keybindings --out /tmp/keybindings-fresh.md)", + "Bash(bash bin/utils/nomarchy-docs-keybindings --out /tmp/keybindings-fresh.md)", + "Bash(nix-shell -p shellcheck --run \"shellcheck --severity=error features/scripts/utils/nomarchy-menu features/scripts/utils/nomarchy-launch-screensaver\")", + "Bash(./bin/utils/nomarchy-docs-keybindings --out docs/KEYBINDINGS.md)", + "Bash(grep -rEho 'jq[^\"]*--arg [a-zA-Z]+|\\\\.[a-zA-Z][a-zA-Z_0-9]+ = \\\\$|jq -r .\\\\.[a-zA-Z]+' features/scripts core/system/scripts themes/engine/scripts)", + "Read(//home/bernardo/.config/mako/**)", + "Read(//home/bernardo/.config/nomarchy/default/hypr/**)", + "Read(//home/bernardo/.config/nomarchy/current/theme/**)", + "Read(//etc/nixos/**)", + "Bash(sudo git -C /etc/nixos log --oneline -3)", + "Bash(PATH=/home/bernardo/Projects/Coding/Nomarchy/features/scripts/utils:/home/bernardo/Projects/Coding/Nomarchy/themes/engine/scripts:__TRACKED_VAR__ bash /home/bernardo/Projects/Coding/Nomarchy/features/scripts/utils/nomarchy-installed-summary)", + "Bash(grep *)", + "Bash(python3 -c \"import json,sys; d=json.load\\(sys.stdin\\); r=d['results'][0]['extensions'][0]; print\\('version:', r['versions'][0]['version']\\); print\\('displayName:', r['displayName']\\); print\\('publisher:', r['publisher']['publisherName']\\); print\\('extName:', r['extensionName']\\)\")", + "Bash(python3 -c \"import sys,json; d=json.load\\(sys.stdin\\); [print\\(x['file'],'=',x['value']\\) for x in d]\")", + "Bash([ -f \"core/home/config/nomarchy/default/hypr/apps/$f.conf\" ])", + "Bash([ -f \"core/home/config/nomarchy/default/hypr/bindings/$f.conf\" ])", + "Bash([ -f \"core/home/config/nomarchy/default/hypr/$f.conf\" ])", + "Bash([ -f \"features/desktop/hyprland/config/$f.conf\" ])", + "Bash(timeout 580 ./bin/utils/nomarchy-eval-matrix)", + "Bash(break)", + "Bash(sed -n 1,45p __TRACKED_VAR__/nix/package.nix)", + "Bash(sed -n 1,50p __TRACKED_VAR__/nix/modules/home-manager.nix)", + "Bash(python3 -c 'import json,sys; d=json.load\\(sys.stdin\\); print\\('\\\\''top path:'\\\\'', d.get\\('\\\\''path'\\\\'','\\\\''?'\\\\''\\)\\); inp=d.get\\('\\\\''inputs'\\\\'',{}\\); print\\('\\\\''inputs:'\\\\'', list\\(inp.keys\\(\\)\\)\\); print\\('\\\\''walker present:'\\\\'', '\\\\''walker'\\\\'' in inp\\); *)", + "Bash(echo \"exit: $?\")", + "Bash(echo 'output: [__TRACKED_VAR__]')", + "Bash(time ./bin/utils/nomarchy-eval-matrix)", + "Bash(python3 -c \"import json,sys; [print\\(x\\) for x in sorted\\(json.load\\(sys.stdin\\)\\)]\")", + "Read(//dev/**)", + "Bash(command -v qemu-system-x86_64 qemu-kvm)", + "Bash(echo \"BUILD_EXIT=$?\")", + "Bash(rm -f /tmp/nomarchy-mon.sock)", + "Bash(mkdir -p /tmp/nomarchy-vmrun)", + "Bash(QEMU_OPTS='-display none -monitor unix:/tmp/nomarchy-mon.sock,server,nowait -vga none' /tmp/nomarchy-vm/bin/run-nomarchy-vm)", + "Bash(echo \"VM_EXIT=$?\")", + "Bash(magick /tmp/shot.png -crop 5120x130+0+0 +repage /tmp/shot-top.png)", + "Bash(magick /tmp/shot.png -crop 1400x420+0+440 +repage /tmp/shot-term.png)", + "Bash(/nix/store/wv8bpzriikv65xnd1vciqpq7rnr8h2q2-bash-5.3p3/bin/bash -c 'compgen -G \"/etc/*\" >/dev/null 2>&1 && echo \"compgen WORKS\" || echo \"compgen MISSING \\(progcomp disabled\\)\"')", + "Bash(compgen -G \"/etc/*\")", + "Bash(/nix/store/wv8bpzriikv65xnd1vciqpq7rnr8h2q2-bash-5.3p3/bin/bash -c 'shopt -s nullglob; a=\\(/etc/hos*\\); echo \"nullglob ok: ${#a[@]} match\\(es\\)\"')", + "Bash(mkdir -p /tmp/nomarchy-vmrun2)", + "Bash(pgrep -f qemu-system)", + "Bash(rm -rf /tmp/nomarchy-vmrun3)", + "Bash(mkdir -p /tmp/nomarchy-vmrun3)", + "Bash(echo \"exit=$?\")", + "Bash(socat - unix-connect:/tmp/nomarchy-mon.sock)", + "Bash(magick /tmp/shot3.ppm /tmp/shot3.png)", + "Bash(magick identify *)", + "Bash(echo \"captured -> $\\(magick identify -format '%wx%h' /tmp/shot3.png\\)\")", + "Bash(magick /tmp/shot3.png -crop 5120x150+0+0 +repage /tmp/shot3-top.png)", + "Bash(pkill -x qemu-system-x86)", + "Bash(pkill -f \"qemu-system-x86_64 -machine\")", + "Bash(rm -rf /tmp/nomarchy-vmrun4)", + "Bash(mkdir -p /tmp/nomarchy-vmrun4)", + "Bash(echo \"boot-exit=$?\")", + "Bash(magick /tmp/shot4.ppm /tmp/shot4.png)", + "Bash(echo \"captured -> $\\(magick identify -format '%wx%h' /tmp/shot4.png\\)\")", + "Bash(magick /tmp/shot4.png -crop 5120x160+0+0 +repage /tmp/shot4-top.png)", + "Bash(rm -rf /tmp/vmrun_final)", + "Bash(mkdir -p /tmp/vmrun_final)", + "Bash(magick /tmp/shot5.ppm /tmp/shot5.png)", + "Bash(echo \"captured -> $\\(magick identify -format '%wx%h' /tmp/shot5.png\\)\")", + "Bash(magick /tmp/shot5.png -crop 5120x170+0+0 +repage /tmp/shot5-top.png)", + "Bash(rm -rf /tmp/vmssh)", + "Bash(mkdir -p /tmp/vmssh)", + "Bash(QEMU_OPTS='-display none -monitor unix:/tmp/nomarchy-mon.sock,server,nowait -vga none' QEMU_NET_OPTS=hostfwd=tcp::2222-:22 /tmp/nomarchy-vm-ssh/bin/run-nixos-vm)", + "Bash(command -v expect)", + "Read(//home/bernardo/.ssh/**)", + "Bash(QEMU_OPTS='-display none -monitor unix:/tmp/nomarchy-mon.sock,server,nowait -vga none' QEMU_NET_OPTS=hostfwd=tcp::2222-:22 /tmp/nomarchy-vm-ssh/bin/run-nomarchy-vm)", + "Bash(echo \"vm-exited rc=$?\")", + "Bash(pkill -f \"run-nomarchy-vm\")", + "Bash(rm -rf /tmp/vmtheme)", + "Bash(mkdir -p /tmp/vmtheme)", + "Bash(echo \"vm exited rc=$?\")", + "Bash(magick /tmp/latte.ppm -resize 1700 /tmp/latte.png)", + "Bash(echo \"saved $\\(magick identify -format '%wx%h' /tmp/latte.png\\)\")", + "Bash(./bin/utils/nomarchy-eval-matrix)", + "Bash(rm -f /tmp/nomarchy.qcow2 /tmp/vm-boot.log)", + "Bash(NIX_DISK_IMAGE=/tmp/nomarchy.qcow2 QEMU_OPTS='-display none -m 4096' /tmp/vm-verify-result/bin/run-nomarchy-vm)", + "Bash(echo \"VM PID $!\")", + "Bash(pkill -f 'qemu-system-x86_64 -machine accel=kvm.*nomarchy')", + "Bash(rm -f /tmp/vm-verify.nix /tmp/nomarchy.qcow2 /tmp/vm-boot.log /tmp/vm-verify-result)", + "Bash(pkill -9 -f 'qemu-system')", + "Bash(rm -f /tmp/nomarchy.qcow2)", + "Bash(python3 -)", + "Bash(sed -n '206,228p' features/scripts/utils/nomarchy-menu)", + "Bash(pkill -9 -f 'run-nixos-vm\\\\|qemu-system-x86_64.*nomarchy')", + "Bash(rm -f /tmp/nomarchy.qcow2 /tmp/vm-verify.nix /tmp/vm-boot.log /tmp/menu-*.sh /tmp/layout-check.sh /tmp/validate-fixes.sh /tmp/menu-cmds.txt /tmp/shipped.txt)", + "Bash(rm -f /tmp/vm-verify-result)", + "Bash(kill -9 1285354)", + "Bash(sed -n '1,30p' features/scripts/battery-monitor.nix)", + "Bash(sed -n '40,75p' features/desktop/waybar/default.nix)", + "Bash(sed -n '140,160p' features/desktop/waybar/themes/summer-night/config.jsonc)", + "Bash(sed -n '10,20p' features/desktop/waybar/config/config.jsonc)", + "Bash(python3 -m json.tool)", + "Bash(/tmp/nomarchy-multidisk-test/run-vm.sh)", + "Bash(socat - UNIX-CONNECT:mon.sock)", + "Bash(/tmp/nomarchy-multidisk-test/boot-from-disk.sh)", + "Bash(socat - UNIX-CONNECT:bootmon.sock)", + "Bash(convert /tmp/nomarchy-multidisk-test/screen.ppm /tmp/nomarchy-multidisk-test/screen.png)", + "Bash(magick /tmp/nomarchy-multidisk-test/screen.ppm /tmp/nomarchy-multidisk-test/screen.png)", + "Bash(shellcheck --severity=error installer/install.sh)", + "Bash(curl -s \"https://api.github.com/repos/nix-community/home-manager/contents/modules/programs/vscode?ref=0d02ec1d0a05f88ef9e74b516842900c41f0f2fe\")", + "Bash(python3 -c \"import json,sys;[print\\(x['name']\\) for x in json.load\\(sys.stdin\\)]\")", + "Bash(curl -s \"https://api.github.com/repos/nix-community/home-manager/contents/modules/programs/vscode?ref=release-25.11\")", + "Bash(curl -s \"https://api.github.com/repos/nix-community/home-manager/contents/modules/programs/vscode?ref=49ca96b2714c5931e17401eff87f3edd42d2b0f2\")", + "Bash(python3 -c \"import json,sys;d=json.load\\(sys.stdin\\);[print\\(x['name']\\) for x in d]\")", + "Bash(curl -s -o /dev/null -w \"%{http_code}\\\\n\" \"https://raw.githubusercontent.com/nix-community/home-manager/49ca96b2714c5931e17401eff87f3edd42d2b0f2/modules/programs/vscode/each-config.nix\")", + "Read(//nix/store/**)", + "Bash(mkdir -p __TRACKED_VAR__/nomarchy-install-test)", + "Bash(qemu-img create *)", + "Read(//home/bernardo/.config/nomarchy/**)", + "Read(//home/bernardo/.local/share/nomarchy/**)", + "Read(//home/bernardo/.config/elephant/**)", + "Read(//home/bernardo/.local/share/elephant/**)", + "Read(//home/bernardo/.config/walker/**)", + "WebFetch(domain:raw.githubusercontent.com)", + "Bash(python3 -c ' *)", + "Bash(nix-store -r /nix/store/hydnry53i2qbmqq0b0872wlbzdkpq1bd-source)", + "Bash(echo \"EXIT=$?\")", + "Bash(sed -n '44,50p' features/default.nix)", + "Bash(sed -n '14,20p' features/scripts/default.nix)", + "Bash(sed -n '11,17p' themes/engine/scripts.nix)", + "WebSearch", + "WebFetch(domain:github.com)", + "Bash(curl -sL \"https://api.github.com/repos/hyprwm/Hyprland/commits?sha=v0.55.3&per_page=100\")", + "Bash(curl -sL -o /tmp/hypr-fence-fix.patch \"https://github.com/hyprwm/Hyprland/commit/bdf0aaa5409fe2e4715e2796d669e16776de0233.patch\")", + "Bash(rm -f /tmp/nomarchy-2605.qcow2 /tmp/nomarchy-mon.sock /tmp/nomarchy-serial.sock)", + "Bash(NIX_DISK_IMAGE=/tmp/nomarchy-2605.qcow2 QEMU_OPTS=\"-display none -monitor unix:/tmp/nomarchy-mon.sock,server,nowait -serial unix:/tmp/nomarchy-serial.sock,server,nowait\" /tmp/nomarchy-vm-2605/bin/run-nomarchy-vm)", + "Bash(python3 *)", + "Bash(curl -sL https://raw.githubusercontent.com/hyprwm/Hyprland/v0.55.3/CMakeLists.txt)", + "Bash(curl -sL https://raw.githubusercontent.com/hyprwm/Hyprland/v0.55.2/CMakeLists.txt)", + "Bash(NIX_DISK_IMAGE=/tmp/nomarchy-2605.qcow2 QEMU_OPTS=\"-display none -monitor unix:/tmp/nomarchy-mon.sock,server,nowait -serial unix:/tmp/nomarchy-serial.sock,server,nowait\" /tmp/nomarchy-vm-2605-fixed/bin/run-nomarchy-vm)", + "Bash(xargs du -sh)", + "Bash(xargs du -csh)", + "Bash(curl -s https://raw.githubusercontent.com/nix-community/stylix/release-26.05/flake.nix)", + "Bash(nix build *)", + "Bash(echo \"exit $?\")", + "Bash(pkill -f \"test-install.sh\")", + "Bash(pkill -f \"qemu-system-x86_64.*NOMARCHY\\\\|qemu-system-x86_64.*nomarchy\")", + "Bash(NOMARCHY_PATH=__TRACKED_VAR__ python3 pkgs/nomarchy-theme-sync/nomarchy-theme-sync.py --quiet apply summer-night --no-switch)", + "Bash(NOMARCHY_PATH=__TRACKED_VAR__ python3 pkgs/nomarchy-theme-sync/nomarchy-theme-sync.py --quiet apply summer-day --no-switch)", + "Bash(xargs cat)" + ] + } +} diff --git a/README.md b/README.md index 33dd0a1..7673393 100644 --- a/README.md +++ b/README.md @@ -57,7 +57,7 @@ Flat on purpose. Two module trees, one options file each, no hidden layers. │ ├── waybar.nix │ ├── ghostty.nix │ ├── btop.nix -│ ├── fuzzel.nix # launcher + nomarchy-menu (power, clip) +│ ├── rofi.nix # launcher + nomarchy-menu (power, clip) │ ├── swaync.nix # notifications, same JSON │ ├── idle.nix # hyprlock + hypridle, same JSON │ └── yazi.nix # flagship TUI file manager + plugins @@ -172,7 +172,7 @@ examples: **[docs/OVERRIDES.md](docs/OVERRIDES.md)**. | `nomarchy.keyboard.variant` | `""` | XKB variant for the session | | `nomarchy.hyprland.enable` | `true` | Nomarchy's Hyprland config | | `nomarchy.waybar.enable` | `true` | Nomarchy's Waybar | -| `nomarchy.fuzzel.enable` | `true` | Themed fuzzel + `nomarchy-menu` (power menu) | +| `nomarchy.rofi.enable` | `true` | Themed rofi launcher + `nomarchy-menu` dispatcher | | `nomarchy.swaync.enable` | `true` | swaync notifications, themed | | `nomarchy.idle.enable` | `true` | hyprlock + hypridle (idle lock 5 min, display off 10, suspend 30) | | `nomarchy.yazi.enable` | `true` | yazi TUI file manager, themed + curated plugins | @@ -224,7 +224,7 @@ per theme — a single place to look, unlike the old distro's split: | `btop.theme` | baked into the generation (generated from the palette when absent) | | `waybar.css` | **whole-swap**: replaces the generated bar style entirely (probed at eval time, self-contained) | | `waybar.jsonc` | whole-swap for the bar *layout* (must be plain JSON) | -| `fuzzel.ini` | **whole-swap**: replaces the generated launcher/menu config entirely | +| `rofi.rasi` | **whole-swap**: replaces the generated launcher/menu theme entirely | Six ported themes ship a `waybar.css` identity (catppuccin, lumon, nord, retro-82, summer-day, summer-night). Custom user themes can live in @@ -261,37 +261,37 @@ close · `SUPER+1..9` workspaces · `Print` region screenshot. ## Roadmap - **Menu system** (apps launcher + theme switching + system actions), built - on fuzzel — already shipped for SUPER+D/SUPER+T, dmenu mode does nested - menus and per-entry icons, and its INI theme can be baked from - theme-state.json like every other app: - - ✓ shipped: `modules/home/fuzzel.nix` (palette/fonts/border from the - theme JSON, `themes//fuzzel.ini` whole-swap) and the + on rofi 2.0 (native Wayland on 26.05) — its `.rasi` theme is baked from + theme-state.json like every other app, with rich per-element styling: + - ✓ shipped: `modules/home/rofi.nix` (per-element theme generated from + the palette, `themes//rofi.rasi` whole-swap) and the `nomarchy-menu` dispatcher: root picker (no args) · `power` (lock/logout/suspend/hibernate/reboot/shutdown, SUPER+X) · `theme` (SUPER+T) · `clipboard` (cliphist, SUPER+CTRL+V) · `calc` - (qalc, copy/chain) · `files` (fd → xdg-open) · `web` (DuckDuckGo) + (qalc, copy/chain) · `files` (fd → xdg-open) · `web` (DuckDuckGo). + SUPER+D is `rofi -show drun`. - next modules: Network ▸ nmtui · Bluetooth ▸ blueman · Capture ▸ - screenshot · **ask Claude**: `--prompt-only` → - `$TERMINAL -e claude ""` — the claude CLI auths via OAuth - against a Pro/Max subscription (no API key); REPL stays open for - follow-ups (claude-code in nixpkgs is unfree — allowUnfree is on) - - known limits accepted for now: no live-as-you-type results (dmenu - input is static per invocation) and no image previews - - decision record: this resolves the old Walker/Lua question in favor of - simplicity — no GTK4 launcher, no second theming pipeline, no image - previews (instant `bg next` covers wallpaper browsing); the dispatcher - owns the menu structure, so the renderer stays swappable + screenshot · **ask Claude**: free-text → `$TERMINAL -e claude + ""` — the claude CLI auths via OAuth against a Pro/Max + subscription (no API key); REPL stays open for follow-ups (claude-code + in nixpkgs is unfree — allowUnfree is on) + - launcher icons: `show-icons` is off (no icon theme shipped yet); + enabling it well means shipping an icon theme (Papirus/Adwaita) + - decision record: resolves the old Walker/Lua question — no GTK4 + launcher, no second theming pipeline; the dispatcher owns the menu + structure, so the renderer stays swappable (we moved fuzzel → rofi 2.0 + once mainline gained native Wayland, for its richer theming) - **Theme parity with legacy:** summer-day/night now carry their legacy bar layouts as `waybar.jsonc` whole-swaps (adapted: dead legacy script modules dropped, Nerd-Fonts-v2 codepoints remapped to FontAwesome/v3, logo button opens nomarchy-menu); the other four identity themes are palette recolors and already match. Remaining: a visual pass over all six on the live ISO -- **Per-theme fuzzel identity:** the `themes//fuzzel.ini` whole-swap - mechanism ships; what remains is authoring the inis for the six identity - themes from their legacy rofi.rasi files (per-element colors like - summer-night's green inputbar aren't expressible in fuzzel's flat - scheme — approximate, note the rest as a renderer limitation) +- **Per-theme rofi identity:** the `themes//rofi.rasi` whole-swap + mechanism ships; what remains is porting the legacy `rofi.rasi` designs + (summer-day/night already have them in the legacy branch) for the + identity themes — rofi's `.rasi` expresses their per-element looks + (green inputbar, inverted window) directly, unlike the old flat scheme - **Faster switches:** move `backgrounds/` out of the flake source (the 86 MB re-copy on every state write is the main eval tax), then pre-built theme variants if still needed diff --git a/modules/home/default.nix b/modules/home/default.nix index 93419af..4cefbfa 100644 --- a/modules/home/default.nix +++ b/modules/home/default.nix @@ -12,7 +12,7 @@ ./waybar.nix ./ghostty.nix ./btop.nix - ./fuzzel.nix # launcher theming + the nomarchy-menu dispatcher + ./rofi.nix # launcher theming + the nomarchy-menu dispatcher ./swaync.nix # notification daemon, themed from the same JSON ./idle.nix # hyprlock + hypridle, themed from the same JSON ./yazi.nix # flagship TUI file manager, themed + plugins @@ -31,7 +31,6 @@ home.packages = with pkgs; [ awww # wallpaper daemon with animated transitions (the swww fork) - fuzzel # launcher / dmenu (used by the theme picker bind) libnotify ]; diff --git a/modules/home/fuzzel.nix b/modules/home/fuzzel.nix deleted file mode 100644 index eee8416..0000000 --- a/modules/home/fuzzel.nix +++ /dev/null @@ -1,171 +0,0 @@ -# Fuzzel — launcher, dmenu renderer for the menu system, themed from -# theme-state.json like every other surface. Also home of nomarchy-menu, -# the dispatcher script all menu modules grow out of. -# -# Per-theme identity: themes//fuzzel.ini is a whole-swap (like -# waybar.css) — it replaces the generated config entirely, probed at -# eval time. -{ config, lib, pkgs, ... }: - -let - cfg = config.nomarchy; - t = cfg.theme; - c = t.colors; - - # Per-theme override probe (same convention as waybar.nix). - iniOverride = cfg.themesDir + "/${t.slug}/fuzzel.ini"; - hasIniOverride = builtins.pathExists iniOverride; - - # fuzzel.ini colors are rrggbbaa, no leading #. - hexa = color: alpha: "${lib.removePrefix "#" color}${alpha}"; - - nomarchy-menu = pkgs.writeShellScriptBin "nomarchy-menu" '' - # Nomarchy menu dispatcher — thin presentation layer over - # `fuzzel --dmenu`; actions delegate to nomarchy-theme-sync, - # systemctl, hyprctl and friends. Icons are nf-md glyphs (any - # shipped Nerd Font carries them). `nomarchy-menu` with no - # argument shows the module picker. - - urlencode() { - local s="$1" out="" ch - for ((i = 0; i < ''${#s}; i++)); do - ch=''${s:i:1} - case "$ch" in - [a-zA-Z0-9.~_-]) out+="$ch" ;; - ' ') out+="+" ;; - *) printf -v ch '%%%02X' "'$ch"; out+="$ch" ;; - esac - done - printf '%s' "$out" - } - - case "''${1:-}" in - power) - choice=$(printf '%s\n' \ - "󰌾 Lock" \ - "󰍃 Logout" \ - "󰤄 Suspend" \ - "󰒲 Hibernate" \ - "󰜉 Reboot" \ - "󰐥 Shutdown" \ - | fuzzel --dmenu --prompt "power " --lines 6 --width 24) || exit 0 - case "$choice" in - *Lock) loginctl lock-session ;; - *Logout) hyprctl dispatch exit ;; - *Suspend) systemctl suspend ;; - *Hibernate) systemctl hibernate ;; - *Reboot) systemctl reboot ;; - *Shutdown) systemctl poweroff ;; - esac ;; - - theme) - choice=$(nomarchy-theme-sync list \ - | fuzzel --dmenu --prompt "theme ") || exit 0 - [ -n "$choice" ] && exec nomarchy-theme-sync apply "$choice" ;; - - clipboard) - sel=$(cliphist list | fuzzel --dmenu --prompt "clip " --width 60) || exit 0 - printf '%s' "$sel" | cliphist decode | wl-copy ;; - - calc) - expr=$(fuzzel --prompt-only "= ") || exit 0 - [ -n "$expr" ] || exit 0 - result=$(qalc -t -- "$expr" 2>&1 | tail -n 1) - choice=$(printf '%s\n' "󰆏 Copy result" "󰃬 New calculation" \ - | fuzzel --dmenu --lines 2 --width 40 \ - --prompt "= " --mesg "$expr = $result") || exit 0 - case "$choice" in - *Copy*) printf '%s' "$result" | wl-copy ;; - *New*) exec "$0" calc ;; - esac ;; - - files) - sel=$(fd . "$HOME" --type f --hidden --exclude .git --exclude .cache 2>/dev/null \ - | head -n 50000 \ - | sed "s|^$HOME/||" \ - | fuzzel --dmenu --prompt "file " --width 60) || exit 0 - [ -n "$sel" ] && exec xdg-open "$HOME/$sel" ;; - - web) - q=$(fuzzel --prompt-only "search ") || exit 0 - [ -n "$q" ] || exit 0 - exec xdg-open "https://duckduckgo.com/?q=$(urlencode "$q")" ;; - - "") - choice=$(printf '%s\n' \ - "󰀻 Apps" \ - "󰏘 Theme" \ - "󰅌 Clipboard" \ - "󰃬 Calculator" \ - "󰈞 Files" \ - "󰖟 Web search" \ - "󰐥 Power" \ - | fuzzel --dmenu --prompt "menu " --lines 7 --width 24) || exit 0 - case "$choice" in - *Apps*) exec fuzzel ;; - *Theme*) exec "$0" theme ;; - *Clipboard*) exec "$0" clipboard ;; - *Calc*) exec "$0" calc ;; - *Files*) exec "$0" files ;; - *Web*) exec "$0" web ;; - *Power*) exec "$0" power ;; - esac ;; - - *) - echo "usage: nomarchy-menu [power|theme|clipboard|calc|files|web]" >&2 - exit 64 ;; - esac - ''; -in -{ - config = lib.mkIf cfg.fuzzel.enable { - home.packages = [ - nomarchy-menu - pkgs.libqalculate # qalc, the calc module's engine - pkgs.fd # files module - pkgs.xdg-utils # xdg-open for files/web - ]; - - programs.fuzzel = { - enable = true; - # Whole-swap themes bring their own fuzzel.ini; otherwise the - # config is generated from the palette. - settings = lib.mkIf (!hasIniOverride) { - main = { - # UI font first; the mono Nerd Font follows so menu icons - # (nf-md glyphs) resolve — fcft falls back per glyph. - font = "${t.fonts.ui}:size=${toString (t.fonts.size + 1)}, ${t.fonts.mono}:size=${toString (t.fonts.size + 1)}"; - terminal = cfg.terminal; - layer = "overlay"; - lines = 12; - width = 40; - horizontal-pad = 24; - vertical-pad = 16; - inner-pad = 8; - }; - - colors = { - background = hexa c.base "f2"; - text = hexa c.text "ff"; - prompt = hexa c.subtext "ff"; - placeholder = hexa c.muted "ff"; - input = hexa c.text "ff"; - match = hexa c.accent "ff"; - selection = hexa c.surface "ff"; - selection-text = hexa c.text "ff"; - selection-match = hexa c.accent "ff"; - border = hexa c.accent "ee"; - }; - - border = { - width = t.ui.borderSize; - radius = t.ui.rounding; - }; - }; - }; - - xdg.configFile."fuzzel/fuzzel.ini" = lib.mkIf hasIniOverride { - source = iniOverride; - }; - }; -} diff --git a/modules/home/hyprland.nix b/modules/home/hyprland.nix index 5b30454..1a57669 100644 --- a/modules/home/hyprland.nix +++ b/modules/home/hyprland.nix @@ -127,7 +127,7 @@ in bind = [ "$mod, Return, exec, $terminal" - "$mod, D, exec, fuzzel" + "$mod, D, exec, rofi -show drun" "$mod, E, exec, $terminal -e yazi" "$mod, Q, killactive" "$mod, F, fullscreen" @@ -140,7 +140,7 @@ in # Cycle the current theme's wallpapers (instant, no rebuild). "$mod SHIFT, T, exec, nomarchy-theme-sync bg next" - # Power menu (fuzzel dmenu via the nomarchy-menu dispatcher). + # Power menu (rofi dmenu via the nomarchy-menu dispatcher). # Not Escape: Super+Escape gets swallowed before reaching the # dispatcher on some setups (input methods / modal handling). "$mod, X, exec, nomarchy-menu power" diff --git a/modules/home/options.nix b/modules/home/options.nix index ea7118d..34c0432 100644 --- a/modules/home/options.nix +++ b/modules/home/options.nix @@ -63,7 +63,7 @@ # ── Component toggles ────────────────────────────────────────── hyprland.enable = lib.mkEnableOption "Nomarchy's Hyprland configuration" // { default = true; }; waybar.enable = lib.mkEnableOption "Nomarchy's Waybar configuration" // { default = true; }; - fuzzel.enable = lib.mkEnableOption "Nomarchy's themed fuzzel + the nomarchy-menu dispatcher (power menu)" // { default = true; }; + rofi.enable = lib.mkEnableOption "Nomarchy's themed rofi launcher + the nomarchy-menu dispatcher" // { default = true; }; swaync.enable = lib.mkEnableOption "swaync notifications, themed from the state file" // { default = true; }; idle.enable = lib.mkEnableOption "hyprlock + hypridle (idle lock, display off, suspend)" // { default = true; }; yazi.enable = lib.mkEnableOption "the yazi TUI file manager, themed with a curated plugin set" // { default = true; }; diff --git a/modules/home/rofi.nix b/modules/home/rofi.nix new file mode 100644 index 0000000..25e598b --- /dev/null +++ b/modules/home/rofi.nix @@ -0,0 +1,222 @@ +# rofi (2.0, native Wayland on 26.05) — launcher + dmenu renderer for +# the menu system, themed from theme-state.json. rofi's .rasi is far more +# expressive than a flat scheme, so the generated theme styles each +# element (accent border, highlighted selection, rounded inputbar); a +# themes//rofi.rasi whole-swap replaces it entirely. +# +# Home of nomarchy-menu, the dispatcher all menu modules hang off. +{ config, lib, pkgs, ... }: + +let + cfg = config.nomarchy; + t = cfg.theme; + c = t.colors; + inherit (config.lib.formats.rasi) mkLiteral; + + px = n: mkLiteral "${toString n}px"; + + # Per-theme override probe (same convention as waybar.css). + rasiOverride = cfg.themesDir + "/${t.slug}/rofi.rasi"; + hasRasiOverride = builtins.pathExists rasiOverride; + + nomarchy-menu = pkgs.writeShellScriptBin "nomarchy-menu" '' + # Nomarchy menu dispatcher — thin presentation layer over + # `rofi -dmenu`; actions delegate to nomarchy-theme-sync, systemctl, + # hyprctl and friends. Icons are nf-md glyphs (Pango falls back to a + # Nerd Font for them). `nomarchy-menu` with no argument shows the + # module picker. + + urlencode() { + local s="$1" out="" ch i + for ((i = 0; i < ''${#s}; i++)); do + ch=''${s:i:1} + case "$ch" in + [a-zA-Z0-9.~_-]) out+="$ch" ;; + ' ') out+="+" ;; + *) printf -v ch '%%%02X' "'$ch"; out+="$ch" ;; + esac + done + printf '%s' "$out" + } + + case "''${1:-}" in + power) + choice=$(printf '%s\n' \ + "󰌾 Lock" \ + "󰍃 Logout" \ + "󰤄 Suspend" \ + "󰒲 Hibernate" \ + "󰜉 Reboot" \ + "󰐥 Shutdown" \ + | rofi -dmenu -p power) || exit 0 + case "$choice" in + *Lock) loginctl lock-session ;; + *Logout) hyprctl dispatch exit ;; + *Suspend) systemctl suspend ;; + *Hibernate) systemctl hibernate ;; + *Reboot) systemctl reboot ;; + *Shutdown) systemctl poweroff ;; + esac ;; + + theme) + choice=$(nomarchy-theme-sync list | rofi -dmenu -p theme) || exit 0 + [ -n "$choice" ] && exec nomarchy-theme-sync apply "$choice" ;; + + clipboard) + sel=$(cliphist list | rofi -dmenu -p clip) || exit 0 + printf '%s' "$sel" | cliphist decode | wl-copy ;; + + calc) + expr=$(rofi -dmenu -p "= " < /dev/null) || exit 0 + [ -n "$expr" ] || exit 0 + result=$(qalc -t -- "$expr" 2>&1 | tail -n 1) + choice=$(printf '%s\n' "󰆏 Copy result" "󰃬 New calculation" \ + | rofi -dmenu -p "= " -mesg "$expr = $result") || exit 0 + case "$choice" in + *Copy*) printf '%s' "$result" | wl-copy ;; + *New*) exec "$0" calc ;; + esac ;; + + files) + sel=$(fd . "$HOME" --type f --hidden --exclude .git --exclude .cache 2>/dev/null \ + | head -n 50000 \ + | sed "s|^$HOME/||" \ + | rofi -dmenu -p file) || exit 0 + [ -n "$sel" ] && exec xdg-open "$HOME/$sel" ;; + + web) + q=$(rofi -dmenu -p search < /dev/null) || exit 0 + [ -n "$q" ] || exit 0 + exec xdg-open "https://duckduckgo.com/?q=$(urlencode "$q")" ;; + + "") + choice=$(printf '%s\n' \ + "󰀻 Apps" \ + "󰏘 Theme" \ + "󰅌 Clipboard" \ + "󰃬 Calculator" \ + "󰈞 Files" \ + "󰖟 Web search" \ + "󰐥 Power" \ + | rofi -dmenu -p menu) || exit 0 + case "$choice" in + *Apps*) exec rofi -show drun ;; + *Theme*) exec "$0" theme ;; + *Clipboard*) exec "$0" clipboard ;; + *Calc*) exec "$0" calc ;; + *Files*) exec "$0" files ;; + *Web*) exec "$0" web ;; + *Power*) exec "$0" power ;; + esac ;; + + *) + echo "usage: nomarchy-menu [power|theme|clipboard|calc|files|web]" >&2 + exit 64 ;; + esac + ''; +in +{ + config = lib.mkIf cfg.rofi.enable { + home.packages = [ + nomarchy-menu + pkgs.libqalculate # qalc, the calc module's engine + pkgs.fd # files module + pkgs.xdg-utils # xdg-open for files/web + ]; + + programs.rofi = { + enable = true; + terminal = cfg.terminal; + font = "${t.fonts.ui} 12"; + + extraConfig = { + modi = "drun,run"; + show-icons = false; # no icon theme shipped yet — clean text list + drun-display-format = "{name}"; + display-drun = "apps"; + display-run = "run"; + }; + + # Whole-swap themes bring their own rofi.rasi; otherwise the theme + # is generated from the palette. + theme = + if hasRasiOverride then rasiOverride + else { + "*" = { + bg = mkLiteral c.base; + fg = mkLiteral c.text; + dim = mkLiteral c.subtext; + surface = mkLiteral c.surface; + accent = mkLiteral c.accent; + + background-color = mkLiteral "transparent"; + text-color = mkLiteral "@fg"; + margin = 0; + padding = 0; + spacing = 0; + }; + + "window" = { + background-color = mkLiteral "@bg"; + border = px t.ui.borderSize; + border-color = mkLiteral "@accent"; + border-radius = px t.ui.rounding; + width = mkLiteral "40%"; + padding = px 8; + }; + + "mainbox" = { + children = map mkLiteral [ "inputbar" "message" "listview" ]; + }; + + "inputbar" = { + background-color = mkLiteral "@surface"; + border-radius = px t.ui.rounding; + padding = mkLiteral "8px 12px"; + spacing = px 8; + children = map mkLiteral [ "prompt" "entry" ]; + }; + "prompt" = { text-color = mkLiteral "@accent"; }; + "entry" = { + placeholder = "Search…"; + placeholder-color = mkLiteral "@dim"; + }; + + "listview" = { + lines = 8; + columns = 1; + dynamic = true; + scrollbar = false; + spacing = px 2; + padding = mkLiteral "8px 0px 0px 0px"; + }; + + "element" = { + padding = mkLiteral "8px 12px"; + border-radius = px t.ui.rounding; + spacing = px 8; + }; + "element selected" = { + background-color = mkLiteral "@accent"; + text-color = mkLiteral "@bg"; + }; + "element-icon" = { + background-color = mkLiteral "transparent"; + size = mkLiteral "1em"; + }; + "element-text" = { + background-color = mkLiteral "transparent"; + text-color = mkLiteral "inherit"; + }; + + "message" = { padding = mkLiteral "8px 0px 0px 0px"; }; + "textbox" = { + background-color = mkLiteral "@surface"; + text-color = mkLiteral "@fg"; + border-radius = px t.ui.rounding; + padding = mkLiteral "8px 12px"; + }; + }; + }; + }; +} diff --git a/modules/home/yazi.nix b/modules/home/yazi.nix index 03749e1..37d54fd 100644 --- a/modules/home/yazi.nix +++ b/modules/home/yazi.nix @@ -1,5 +1,5 @@ # yazi — the flagship file manager: a fast, keyboard-driven TUI that -# fits the distro's identity (Ghostty's Kitty-graphics previews, fuzzel +# fits the distro's identity (Ghostty's Kitty-graphics previews, rofi # menus, everything from one JSON). Themed from theme-state.json and # shipped with a curated plugin set. The GUI half (Thunar, "open folder" # handler) is nomarchy.system.fileManager on the system side. diff --git a/todo.md b/todo.md new file mode 100644 index 0000000..d71ba82 --- /dev/null +++ b/todo.md @@ -0,0 +1,14 @@ +# Items to do + +## one item per commit in the repo + +- Let's add some type of progress bar for when the user switch themes? That way we can have a visual feedback instead of the user thinking the selection failed +- Let's add icon themes and make sure each theme selects an icon theme to use (and that the icon theme is pulled for installation) +- Let's install starship or some other tool to make the terminal look nice. We can configure it nicely by default +- We can also add tools and set aliases, for example change cat for bat, grep for ripgrep, etc... +- We can install by default for the user applications to make it a complete desktop workstation, such as vscode, libreoffice, gimp, inkscape, texlivefull. Maybe we should also add a way for the user to "turn off" any of those apps if the user does not want them installed +- Let's tweak the Nomarchy plymouth theme. The logo is too dark and the constrast does not look good with the dark background +- When the machine hibernates the user already needs to type the luks password to resume it. However, the screen gets locked by hyprlock anyway and the user needs to enter the password twice +- Let's have a rofi menu item that shows all the current assigned keybindings +- We can assign SUPER+Space for rofi dmenu and SUPER+m for the main menu. +