├── .envrc ├── nixos ├── crawler ├── _mixins │ ├── desktop │ │ ├── apps │ │ │ ├── default.nix │ │ │ ├── blender │ │ │ │ └── default.nix │ │ │ └── steam │ │ │ │ └── default.nix │ │ └── backgrounds │ │ │ ├── Cat-1920px.png │ │ │ ├── Cat-2560px.png │ │ │ ├── Cat-3440px.png │ │ │ ├── Cat-3840px.png │ │ │ ├── Colorway-1920x1080.png │ │ │ ├── Colorway-1920x1200.png │ │ │ ├── Colorway-2560x1440.png │ │ │ ├── Colorway-2560x1600.png │ │ │ ├── Colorway-2560x2880.png │ │ │ ├── Colorway-3440x1440.png │ │ │ ├── Colorway-3840x2160.png │ │ │ ├── Catppuccin-1920x1080.png │ │ │ ├── Catppuccin-1920x1200.png │ │ │ ├── Catppuccin-2560x1440.png │ │ │ ├── Catppuccin-2560x1600.png │ │ │ ├── Catppuccin-2560x2880.png │ │ │ ├── Catppuccin-3440x1440.png │ │ │ ├── Catppuccin-3840x2160.png │ │ │ └── default.nix │ ├── network │ │ ├── phasma.nix │ │ ├── vader.nix │ │ ├── revan.nix │ │ ├── ssh │ │ │ └── default.nix │ │ ├── nullmailer │ │ │ └── default.nix │ │ ├── tailscale │ │ │ └── default.nix │ │ └── malak.nix │ ├── hardware │ │ ├── input-remapper │ │ │ └── default.nix │ │ ├── v4l2loopback │ │ │ └── default.nix │ │ ├── bluetooth │ │ │ └── default.nix │ │ ├── yubikey │ │ │ └── default.nix │ │ ├── default.nix │ │ ├── print │ │ │ └── default.nix │ │ ├── scan │ │ │ └── default.nix │ │ ├── via │ │ │ └── default.nix │ │ └── zram │ │ │ └── default.nix │ ├── server │ │ ├── plex │ │ │ └── default.nix │ │ ├── default.nix │ │ ├── rustdesk │ │ │ └── default.nix │ │ ├── scrutiny │ │ │ └── default.nix │ │ ├── maestral │ │ │ └── default.nix │ │ ├── netdata │ │ │ └── default.nix │ │ ├── kolide │ │ │ └── default.nix │ │ └── backup-sync │ │ │ └── default.nix │ ├── users │ │ ├── martin │ │ │ └── default.nix │ │ ├── root │ │ │ └── default.nix │ │ ├── default.nix │ │ └── nixos │ │ │ └── default.nix │ ├── scripts │ │ ├── default.nix │ │ ├── install-anywhere │ │ │ └── default.nix │ │ └── install-system │ │ │ └── default.nix │ └── virtualisation │ │ └── default.nix ├── iso-console │ └── default.nix ├── dagger │ ├── default.nix │ └── disks.nix ├── bane │ └── default.nix ├── tanis │ ├── default.nix │ └── disks.nix ├── revan │ ├── disks-home.nix │ └── disks.nix ├── maul │ └── default.nix ├── atrius │ └── default.nix ├── malak │ └── disks.nix └── shaa │ └── disks.nix ├── darwin ├── krall │ └── default.nix └── _mixins │ ├── desktop │ ├── apps │ │ ├── zoom │ │ ├── blender │ │ │ └── default.nix │ │ ├── keybase │ │ │ └── default.nix │ │ ├── obs-studio │ │ │ └── default.nix │ │ ├── internet-chat │ │ │ └── default.nix │ │ ├── grammarly │ │ │ └── default.nix │ │ ├── web-browsers │ │ │ └── default.nix │ │ ├── maestral │ │ │ └── default.nix │ │ ├── security │ │ │ └── default.nix │ │ ├── default.nix │ │ ├── notes │ │ │ └── default.nix │ │ ├── graphics-production │ │ │ └── default.nix │ │ └── utilities │ │ │ └── default.nix │ ├── features │ │ ├── default.nix │ │ └── fonts │ │ │ └── default.nix │ └── default.nix │ ├── features │ ├── default.nix │ ├── podman │ │ └── default.nix │ └── network │ │ └── default.nix │ └── scripts │ ├── install-homebrew │ ├── install-homebrew.sh │ └── default.nix │ ├── install-docker │ ├── default.nix │ └── install-docker.sh │ └── default.nix ├── home-manager └── _mixins │ ├── users │ ├── martin.wimpress │ ├── deck │ │ └── default.nix │ ├── nixos │ │ ├── default.nix │ │ └── face.png │ ├── martin │ │ └── face.png │ └── default.nix │ ├── scripts │ ├── lights-teardown │ │ ├── lights-teardown.sh │ │ └── default.nix │ ├── captive-portal │ │ ├── captive-portal.sh │ │ └── default.nix │ ├── _template │ │ ├── template.sh │ │ └── default.nix │ ├── get-volume │ │ ├── get-volume.sh │ │ └── default.nix │ ├── unroll-url │ │ ├── unroll-url.sh │ │ └── default.nix │ ├── purge-gpu-caches │ │ ├── purge-gpu-caches.sh │ │ └── default.nix │ ├── lights-setup │ │ ├── lights-setup.sh │ │ └── default.nix │ ├── restart-pipewire │ │ ├── restart-pipewire.sh │ │ └── default.nix │ ├── nixfmt-plus │ │ ├── nixfmt-plus.sh │ │ └── default.nix │ ├── restart-portals │ │ ├── default.nix │ │ └── restart-portals.sh │ ├── get-rhythmbox-volume │ │ ├── get-rhythmbox-volume.sh │ │ └── default.nix │ ├── all-lights │ │ ├── default.nix │ │ └── all-lights.sh │ ├── make-luks-key │ │ ├── default.nix │ │ └── make-luks-key.sh │ ├── pw-quantum │ │ ├── default.nix │ │ └── pw-quantum.sh │ ├── simple-password │ │ └── default.nix │ ├── dl │ │ └── default.nix │ ├── nope │ │ ├── default.nix │ │ └── nope.sh │ ├── backup-obs │ │ ├── default.nix │ │ └── backup-obs.sh │ ├── halp │ │ └── default.nix │ ├── audio-teardown │ │ ├── audio-teardown.sh │ │ └── default.nix │ ├── make-host-keys │ │ └── default.nix │ ├── make-user-keys │ │ └── default.nix │ ├── send-required │ │ ├── default.nix │ │ └── send-required.sh │ ├── mwprocapture-hunter │ │ └── default.nix │ ├── key-lights │ │ └── default.nix │ ├── nosh │ │ └── default.nix │ ├── resolve-ready │ │ ├── default.nix │ │ └── resolve-ready.sh │ ├── nook │ │ └── default.nix │ ├── nout │ │ └── default.nix │ ├── gpg-restore │ │ ├── default.nix │ │ └── gpg-restore.sh │ ├── ipad-volume │ │ ├── default.nix │ │ └── ipad-volume.sh │ ├── cg-clone │ │ └── default.nix │ ├── default.nix │ ├── hue-lights │ │ └── default.nix │ ├── default-input │ │ ├── default.nix │ │ └── default-input.sh │ ├── default-output │ │ └── default.nix │ ├── norm │ │ └── default.nix │ ├── mic-mute │ │ ├── default.nix │ │ └── mic-mute.sh │ ├── toggle-meet │ │ ├── default.nix │ │ └── toggle-meet.sh │ ├── bt-codec │ │ └── default.nix │ ├── benchmark-codecs │ │ └── default.nix │ ├── youtube-ready │ │ └── default.nix │ ├── flatpak-theme │ │ ├── default.nix │ │ └── flatpak-theme.sh │ ├── lanscan │ │ └── default.nix │ ├── reset-ssl2 │ │ ├── default.nix │ │ └── reset-ssl2.sh │ ├── hypr-activity-menu │ │ └── default.nix │ ├── virtualcam │ │ └── default.nix │ ├── music-volume │ │ └── default.nix │ ├── ciderctl │ │ └── default.nix │ ├── hypr-activity │ │ └── default.nix │ ├── hypr-session │ │ └── default.nix │ ├── audio-setup │ │ ├── default.nix │ │ └── audio-setup.sh │ ├── mic-loopback │ │ └── default.nix │ ├── mcp-connector │ │ └── default.nix │ └── lima-create │ │ ├── default.nix │ │ └── blackace.yaml │ ├── terminal │ ├── rclone.nix │ ├── fd.nix │ ├── cava.nix │ ├── ripgrep.nix │ ├── jq.nix │ ├── tldr.nix │ ├── dircolors.nix │ ├── fzf.nix │ ├── gpg.nix │ ├── zoxide.nix │ ├── yt-dlp.nix │ ├── direnv.nix │ ├── btop.nix │ ├── atuin.nix │ ├── pueue.nix │ ├── eza.nix │ ├── micro.nix │ ├── bat.nix │ └── bottom.nix │ ├── desktop │ ├── hyprland │ │ ├── wlogout │ │ │ ├── clear.png │ │ │ ├── lock.png │ │ │ ├── logout.png │ │ │ ├── reboot.png │ │ │ ├── suspend.png │ │ │ ├── lock-hover.png │ │ │ ├── shutdown.png │ │ │ ├── clear-hover.png │ │ │ ├── logout-hover.png │ │ │ ├── reboot-hover.png │ │ │ ├── shutdown-hover.png │ │ │ └── suspend-hover.png │ │ ├── hyprpicker │ │ │ └── default.nix │ │ └── waybar │ │ │ ├── virtualcam-check.sh │ │ │ ├── virtualcam-toggle.sh │ │ │ ├── eyecandy-check.sh │ │ │ ├── bluetooth-toggle.sh │ │ │ ├── eyecandy-toggle.sh │ │ │ ├── tailscale-check.sh │ │ │ └── tailscale-toggle.sh │ ├── apps │ │ ├── libreoffice │ │ │ └── default.nix │ │ ├── development │ │ │ ├── create-readme.prompt.md │ │ │ ├── review-code.prompt.md │ │ │ ├── review-naming.prompt.md │ │ │ ├── review-tests.prompt.md │ │ │ ├── create-code.prompt.md │ │ │ ├── review-performance.prompt.md │ │ │ ├── plan-docs.prompt.md │ │ │ ├── onboard.prompt.md │ │ │ ├── agent-create.prompt.md │ │ │ ├── update-docs.prompt.md │ │ │ ├── agent-optimise.prompt.md │ │ │ ├── create-conventional-commit.prompt.md │ │ │ ├── plan-code.prompt.md │ │ │ └── orientate.prompt.md │ │ ├── music │ │ │ └── default.nix │ │ ├── game-development │ │ │ └── default.nix │ │ ├── utilities │ │ │ └── default.nix │ │ ├── communications │ │ │ └── default.nix │ │ ├── notes │ │ │ └── default.nix │ │ └── zed-editor │ │ │ └── default.nix │ └── aqua │ │ └── default.nix │ └── development │ └── pre-commit-setup.sh ├── .github ├── apple.png ├── logo.png ├── nixos.png ├── screenshots │ ├── hyprland.png │ ├── pantheon.png │ ├── fastfetch.png │ └── linuxmatters.png ├── dependabot.yml ├── workflows │ ├── fh.yml │ ├── flake-checker.yml │ ├── lock-updater.yml │ ├── build-experiments.yml │ ├── build-macbook.yml │ └── build-vms.yml └── FUNDING.yml ├── .gitignore ├── modules └── nixos │ └── default.nix ├── pkgs ├── nerd-font-patcher │ ├── 3.1.1 │ │ ├── src │ │ │ └── glyphs │ │ │ │ ├── Pomicons.otf │ │ │ │ ├── devicons.ttf │ │ │ │ ├── extraglyphs.sfd │ │ │ │ ├── font-logos.ttf │ │ │ │ ├── codicons │ │ │ │ └── codicon.ttf │ │ │ │ ├── original-source.otf │ │ │ │ ├── octicons │ │ │ │ ├── octicons.ttf │ │ │ │ ├── file-symlink-directory-16.svg │ │ │ │ ├── analyze_octicons │ │ │ │ ├── file-symlink-directory-24.svg │ │ │ │ └── LICENSE │ │ │ │ ├── PowerlineExtraSymbols.otf │ │ │ │ ├── Unicode_IEC_symbol_font.otf │ │ │ │ ├── font-awesome-extension.ttf │ │ │ │ ├── font-awesome │ │ │ │ └── FontAwesome.otf │ │ │ │ ├── materialdesignicons-webfont.ttf │ │ │ │ ├── braille-cc0-font │ │ │ │ └── BrailleCc0-DOeDd.ttf │ │ │ │ ├── powerline-symbols │ │ │ │ ├── PowerlineSymbols.otf │ │ │ │ └── LICENSE.txt │ │ │ │ ├── materialdesign │ │ │ │ ├── MaterialDesignIconsDesktop.ttf │ │ │ │ ├── MaterialDesignIconsDesktop_orig.ttf │ │ │ │ ├── LICENSE │ │ │ │ └── README.md │ │ │ │ ├── weather-icons │ │ │ │ └── weathericons-regular-webfont.ttf │ │ │ │ └── README.md │ │ └── readme.md │ └── default.nix ├── fonts │ ├── fixedsys-core-font │ │ ├── fonts │ │ │ ├── FixedsysCoreNerdFont-Regular.ttf │ │ │ └── FixedsysCoreNerdFontMono-Regular.ttf │ │ └── default.nix │ ├── fixedsys-excelsior-font │ │ ├── fonts │ │ │ ├── FixedsysExcelsiorNerdFont-Regular.ttf │ │ │ └── FixedsysExcelsiorNerdFontMono-Regular.ttf │ │ └── default.nix │ ├── zx-spectrum-7-font │ │ └── default.nix │ ├── digital-7-font │ │ └── default.nix │ ├── commodore-64-pixelized-font │ │ └── default.nix │ ├── impact-label-font │ │ └── default.nix │ ├── poppins-font │ │ └── default.nix │ ├── boycott-font │ │ └── default.nix │ ├── spaceport-2006-font │ │ └── default.nix │ ├── dirty-ego-font │ │ └── default.nix │ ├── bebas-neue-pro-font │ │ └── default.nix │ ├── bw-fusiona-font │ │ └── default.nix │ ├── bebas-neue-rounded-font │ │ └── default.nix │ ├── mocha-mattari-font │ │ └── default.nix │ └── bebas-neue-semi-rounded-font │ │ └── default.nix ├── libtsm │ └── default.nix ├── obs-plugins │ ├── obs-rgb-levels.nix │ ├── obs-dvd-screensaver.nix │ ├── pixel-art.nix │ ├── obs-aitum-multistream.diff │ ├── obs-markdown.nix │ ├── obs-browser-transition.nix │ ├── obs-scene-as-transition.nix │ ├── obs-stroke-glow-shadow.nix │ ├── obs-vertical-canvas.diff │ ├── obs-vnc.nix │ └── obs-vertical-canvas.nix └── kmscon │ ├── auto-kbd-layout.patch │ └── sandbox.patch ├── lib └── default.nix ├── LICENSE └── .sops.yaml /.envrc: -------------------------------------------------------------------------------- 1 | use flake -------------------------------------------------------------------------------- /nixos/crawler: -------------------------------------------------------------------------------- 1 | dagger -------------------------------------------------------------------------------- /darwin/krall/default.nix: -------------------------------------------------------------------------------- 1 | _: { } 2 | -------------------------------------------------------------------------------- /home-manager/_mixins/users/martin.wimpress: -------------------------------------------------------------------------------- 1 | martin -------------------------------------------------------------------------------- /home-manager/_mixins/users/deck/default.nix: -------------------------------------------------------------------------------- 1 | _: { } 2 | -------------------------------------------------------------------------------- /darwin/_mixins/desktop/apps/zoom: -------------------------------------------------------------------------------- 1 | ../../../../nixos/_mixins/desktop/apps/zoom -------------------------------------------------------------------------------- /darwin/_mixins/desktop/features/default.nix: -------------------------------------------------------------------------------- 1 | _: { imports = [ ./fonts ]; } 2 | -------------------------------------------------------------------------------- /.github/apple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/.github/apple.png -------------------------------------------------------------------------------- /.github/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/.github/logo.png -------------------------------------------------------------------------------- /.github/nixos.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/.github/nixos.png -------------------------------------------------------------------------------- /home-manager/_mixins/users/nixos/default.nix: -------------------------------------------------------------------------------- 1 | _: { home.file.".face".source = ./face.png; } 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .direnv* 2 | result/ 3 | pkgs/cider/cider-linux-x64.AppImage 4 | pkgs/pico8/pico-8_0.2.6b_amd64.zip 5 | -------------------------------------------------------------------------------- /.github/screenshots/hyprland.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/.github/screenshots/hyprland.png -------------------------------------------------------------------------------- /.github/screenshots/pantheon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/.github/screenshots/pantheon.png -------------------------------------------------------------------------------- /darwin/_mixins/desktop/apps/blender/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | homebrew = { 3 | casks = [ "blender" ]; 4 | }; 5 | } 6 | -------------------------------------------------------------------------------- /darwin/_mixins/desktop/apps/keybase/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | homebrew = { 3 | casks = [ "keybase" ]; 4 | }; 5 | } 6 | -------------------------------------------------------------------------------- /darwin/_mixins/desktop/apps/obs-studio/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | homebrew = { 3 | casks = [ "obs" ]; 4 | }; 5 | } 6 | -------------------------------------------------------------------------------- /.github/screenshots/fastfetch.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/.github/screenshots/fastfetch.png -------------------------------------------------------------------------------- /darwin/_mixins/desktop/apps/internet-chat/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | homebrew = { 3 | casks = [ "halloy" ]; 4 | }; 5 | } 6 | -------------------------------------------------------------------------------- /.github/screenshots/linuxmatters.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/.github/screenshots/linuxmatters.png -------------------------------------------------------------------------------- /darwin/_mixins/desktop/apps/grammarly/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | homebrew = { 3 | casks = [ "grammarly-desktop" ]; 4 | }; 5 | } 6 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/lights-teardown/lights-teardown.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | key-lights off 4 | hue-lights default 5 | -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/rclone.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | programs = { 3 | rclone = { 4 | enable = true; 5 | }; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /home-manager/_mixins/users/martin/face.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/home-manager/_mixins/users/martin/face.png -------------------------------------------------------------------------------- /home-manager/_mixins/users/nixos/face.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/home-manager/_mixins/users/nixos/face.png -------------------------------------------------------------------------------- /nixos/_mixins/desktop/apps/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | imports = [ 3 | ./blender 4 | ./evolution 5 | ./steam 6 | ./web-browsers 7 | ]; 8 | } 9 | -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/Cat-1920px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/nixos/_mixins/desktop/backgrounds/Cat-1920px.png -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/Cat-2560px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/nixos/_mixins/desktop/backgrounds/Cat-2560px.png -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/Cat-3440px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/nixos/_mixins/desktop/backgrounds/Cat-3440px.png -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/Cat-3840px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/nixos/_mixins/desktop/backgrounds/Cat-3840px.png -------------------------------------------------------------------------------- /darwin/_mixins/features/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | { 3 | imports = [ 4 | ./network 5 | ]; 6 | environment.systemPackages = with pkgs; [ ]; 7 | } 8 | -------------------------------------------------------------------------------- /modules/nixos/default.nix: -------------------------------------------------------------------------------- 1 | # Reusable NixOS modules 2 | # - https://wiki.nixos.org/wiki/NixOS_modules 3 | { 4 | # my-module = import ./my-module.nix; 5 | } 6 | -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/Pomicons.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/nerd-font-patcher/3.1.1/src/glyphs/Pomicons.otf -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/devicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/nerd-font-patcher/3.1.1/src/glyphs/devicons.ttf -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/wlogout/clear.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/home-manager/_mixins/desktop/hyprland/wlogout/clear.png -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/wlogout/lock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/home-manager/_mixins/desktop/hyprland/wlogout/lock.png -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/captive-portal/captive-portal.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | xdg-open http://"$(ip --oneline route get 1.1.1.1 | awk '{print $3}')" 4 | -------------------------------------------------------------------------------- /home-manager/_mixins/users/default.nix: -------------------------------------------------------------------------------- 1 | { lib, username, ... }: 2 | { 3 | imports = lib.optional (builtins.pathExists (./. + "/${username}")) ./${username}; 4 | } 5 | -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/extraglyphs.sfd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/nerd-font-patcher/3.1.1/src/glyphs/extraglyphs.sfd -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/font-logos.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/nerd-font-patcher/3.1.1/src/glyphs/font-logos.ttf -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/wlogout/logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/home-manager/_mixins/desktop/hyprland/wlogout/logout.png -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/wlogout/reboot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/home-manager/_mixins/desktop/hyprland/wlogout/reboot.png -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/wlogout/suspend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/home-manager/_mixins/desktop/hyprland/wlogout/suspend.png -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/Colorway-1920x1080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/nixos/_mixins/desktop/backgrounds/Colorway-1920x1080.png -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/Colorway-1920x1200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/nixos/_mixins/desktop/backgrounds/Colorway-1920x1200.png -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/Colorway-2560x1440.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/nixos/_mixins/desktop/backgrounds/Colorway-2560x1440.png -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/Colorway-2560x1600.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/nixos/_mixins/desktop/backgrounds/Colorway-2560x1600.png -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/Colorway-2560x2880.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/nixos/_mixins/desktop/backgrounds/Colorway-2560x2880.png -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/Colorway-3440x1440.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/nixos/_mixins/desktop/backgrounds/Colorway-3440x1440.png -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/Colorway-3840x2160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/nixos/_mixins/desktop/backgrounds/Colorway-3840x2160.png -------------------------------------------------------------------------------- /darwin/_mixins/desktop/apps/web-browsers/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | homebrew = { 3 | casks = [ 4 | "brave-browser" 5 | "google-chrome" 6 | ]; 7 | }; 8 | } 9 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/wlogout/lock-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/home-manager/_mixins/desktop/hyprland/wlogout/lock-hover.png -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/wlogout/shutdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/home-manager/_mixins/desktop/hyprland/wlogout/shutdown.png -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/Catppuccin-1920x1080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/nixos/_mixins/desktop/backgrounds/Catppuccin-1920x1080.png -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/Catppuccin-1920x1200.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/nixos/_mixins/desktop/backgrounds/Catppuccin-1920x1200.png -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/Catppuccin-2560x1440.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/nixos/_mixins/desktop/backgrounds/Catppuccin-2560x1440.png -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/Catppuccin-2560x1600.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/nixos/_mixins/desktop/backgrounds/Catppuccin-2560x1600.png -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/Catppuccin-2560x2880.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/nixos/_mixins/desktop/backgrounds/Catppuccin-2560x2880.png -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/Catppuccin-3440x1440.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/nixos/_mixins/desktop/backgrounds/Catppuccin-3440x1440.png -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/Catppuccin-3840x2160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/nixos/_mixins/desktop/backgrounds/Catppuccin-3840x2160.png -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/codicons/codicon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/nerd-font-patcher/3.1.1/src/glyphs/codicons/codicon.ttf -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/original-source.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/nerd-font-patcher/3.1.1/src/glyphs/original-source.otf -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/wlogout/clear-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/home-manager/_mixins/desktop/hyprland/wlogout/clear-hover.png -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/wlogout/logout-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/home-manager/_mixins/desktop/hyprland/wlogout/logout-hover.png -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/wlogout/reboot-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/home-manager/_mixins/desktop/hyprland/wlogout/reboot-hover.png -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/octicons/octicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/nerd-font-patcher/3.1.1/src/glyphs/octicons/octicons.ttf -------------------------------------------------------------------------------- /darwin/_mixins/scripts/install-homebrew/install-homebrew.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 4 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/wlogout/shutdown-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/home-manager/_mixins/desktop/hyprland/wlogout/shutdown-hover.png -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/wlogout/suspend-hover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/home-manager/_mixins/desktop/hyprland/wlogout/suspend-hover.png -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/PowerlineExtraSymbols.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/nerd-font-patcher/3.1.1/src/glyphs/PowerlineExtraSymbols.otf -------------------------------------------------------------------------------- /darwin/_mixins/desktop/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | { 3 | imports = [ 4 | ./apps 5 | ./features 6 | ]; 7 | 8 | environment.systemPackages = with pkgs; [ ]; 9 | } 10 | -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/Unicode_IEC_symbol_font.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/nerd-font-patcher/3.1.1/src/glyphs/Unicode_IEC_symbol_font.otf -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/font-awesome-extension.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/nerd-font-patcher/3.1.1/src/glyphs/font-awesome-extension.ttf -------------------------------------------------------------------------------- /pkgs/fonts/fixedsys-core-font/fonts/FixedsysCoreNerdFont-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/fonts/fixedsys-core-font/fonts/FixedsysCoreNerdFont-Regular.ttf -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/font-awesome/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/nerd-font-patcher/3.1.1/src/glyphs/font-awesome/FontAwesome.otf -------------------------------------------------------------------------------- /pkgs/fonts/fixedsys-core-font/fonts/FixedsysCoreNerdFontMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/fonts/fixedsys-core-font/fonts/FixedsysCoreNerdFontMono-Regular.ttf -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/materialdesignicons-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/nerd-font-patcher/3.1.1/src/glyphs/materialdesignicons-webfont.ttf -------------------------------------------------------------------------------- /darwin/_mixins/desktop/apps/maestral/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | { 3 | environment.systemPackages = with pkgs; [ maestral ]; 4 | 5 | homebrew = { 6 | casks = [ "maestral" ]; 7 | }; 8 | } 9 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/_template/template.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set +e # Disable errexit 4 | set +u # Disable nounset 5 | set +o pipefail # Disable pipefail 6 | 7 | basename "${0}" 8 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/get-volume/get-volume.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set +e # Disable errexit 4 | set +o pipefail # Disable pipefail 5 | 6 | echo "$(pulsemixer --get-volume | cut -d' ' -f1)"% 7 | -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/braille-cc0-font/BrailleCc0-DOeDd.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/nerd-font-patcher/3.1.1/src/glyphs/braille-cc0-font/BrailleCc0-DOeDd.ttf -------------------------------------------------------------------------------- /pkgs/fonts/fixedsys-excelsior-font/fonts/FixedsysExcelsiorNerdFont-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/fonts/fixedsys-excelsior-font/fonts/FixedsysExcelsiorNerdFont-Regular.ttf -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/powerline-symbols/PowerlineSymbols.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/nerd-font-patcher/3.1.1/src/glyphs/powerline-symbols/PowerlineSymbols.otf -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | # Check for updates to GitHub Actions every week 7 | interval: "weekly" 8 | -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/fd.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | programs = { 3 | fd = { 4 | enable = true; 5 | ignores = [ 6 | ".git" 7 | "__pycache__" 8 | ]; 9 | }; 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /pkgs/fonts/fixedsys-excelsior-font/fonts/FixedsysExcelsiorNerdFontMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/fonts/fixedsys-excelsior-font/fonts/FixedsysExcelsiorNerdFontMono-Regular.ttf -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/materialdesign/MaterialDesignIconsDesktop.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/nerd-font-patcher/3.1.1/src/glyphs/materialdesign/MaterialDesignIconsDesktop.ttf -------------------------------------------------------------------------------- /nixos/_mixins/network/phasma.nix: -------------------------------------------------------------------------------- 1 | { config, lib, ... }: 2 | { 3 | # Disable WiFi power saving 4 | networking.networkmanager = lib.mkIf config.networking.networkmanager.enable { 5 | wifi.powersave = true; 6 | }; 7 | } 8 | -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/weather-icons/weathericons-regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/nerd-font-patcher/3.1.1/src/glyphs/weather-icons/weathericons-regular-webfont.ttf -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/materialdesign/MaterialDesignIconsDesktop_orig.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wimpysworld/nix-config/HEAD/pkgs/nerd-font-patcher/3.1.1/src/glyphs/materialdesign/MaterialDesignIconsDesktop_orig.ttf -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/cava.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | ... 4 | }: 5 | { 6 | catppuccin.cava.enable = config.programs.cava.enable; 7 | 8 | programs = { 9 | cava = { 10 | enable = true; 11 | }; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /darwin/_mixins/desktop/apps/security/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | homebrew = { 3 | casks = [ 4 | "1password" 5 | "yubico-authenticator" 6 | ]; 7 | masApps = { 8 | LastPass = 926036361; 9 | }; 10 | }; 11 | } 12 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/unroll-url/unroll-url.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [ -n "${1}" ]; then 4 | curl -w "%{url_effective}\n" -I -L -s -S "${1}" -o /dev/null 5 | else 6 | echo "ERROR! Please provide a URL" 7 | exit 1 8 | fi 9 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/hyprpicker/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | ... 4 | }: 5 | { 6 | # hyprpicker is a color picker for Hyprland 7 | home = { 8 | packages = with pkgs; [ 9 | hyprpicker 10 | ]; 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /nixos/iso-console/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | nixpkgs.overlays = [ 3 | (_final: super: { 4 | # Prevent mbrola-voices (~650MB) from being on the live media 5 | espeak = super.espeak.override { mbrolaSupport = false; }; 6 | }) 7 | ]; 8 | } 9 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/waybar/virtualcam-check.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [ -e /tmp/virtualcam.pid ]; then 4 | echo -en "󰄀\n󰄀 VirtualCam enabled\nconnected" 5 | else 6 | echo -en "󰗟\n󰗟 VirtualCam is disabled\ndisconnected" 7 | fi 8 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/libreoffice/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | pkgs, 4 | username, 5 | ... 6 | }: 7 | let 8 | installFor = [ "martin" ]; 9 | in 10 | lib.mkIf (lib.elem username installFor) { home.packages = with pkgs; [ libreoffice ]; } 11 | -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/ripgrep.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | programs = { 3 | ripgrep = { 4 | arguments = [ 5 | "--colors=line:style:bold" 6 | "--max-columns-preview" 7 | "--smart-case" 8 | ]; 9 | enable = true; 10 | }; 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /nixos/_mixins/hardware/input-remapper/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | hostname, 3 | isInstall, 4 | lib, 5 | ... 6 | }: 7 | lib.mkIf isInstall { 8 | services = { 9 | input-remapper = { 10 | enable = hostname == "phasma" || hostname == "vader"; 11 | }; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/development/create-readme.prompt.md: -------------------------------------------------------------------------------- 1 | --- 2 | agent: 'velma' 3 | description: 'Create README 📄' 4 | --- 5 | ## Create README 6 | 7 | Write a README.md for ${input:codebase:#codebase}. 8 | 9 | Lead with value. Keep it tight—every section must earn its place. 10 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/development/review-code.prompt.md: -------------------------------------------------------------------------------- 1 | --- 2 | agent: 'penry' 3 | description: 'Review Code 🔍' 4 | --- 5 | ## Code Review 6 | 7 | Review ${input:codebase:#codebase} for maintainability improvements. 8 | 9 | Prioritise by impact. Output as specified in your agent format. 10 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/purge-gpu-caches/purge-gpu-caches.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | CACHES=$(fd GPUCache "${HOME}/.config") 3 | 4 | # Set IFS to split on newline instead of space 5 | IFS=$'\n' 6 | 7 | for CACHE in ${CACHES}; do 8 | echo "Purging ${CACHE}" 9 | rm -v "${CACHE}"* 10 | done 11 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/development/review-naming.prompt.md: -------------------------------------------------------------------------------- 1 | --- 2 | agent: 'luthor' 3 | description: 'Review Naming 🏷️' 4 | --- 5 | ## Naming Review 6 | 7 | Review ${input:codebase:#codebase} for naming clarity improvements. 8 | 9 | Prioritise by impact. Output as specified in your agent format. 10 | -------------------------------------------------------------------------------- /darwin/_mixins/desktop/apps/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | imports = [ 3 | ./blender 4 | ./grammarly 5 | ./graphics-production 6 | ./internet-chat 7 | ./keybase 8 | ./notes 9 | ./maestral 10 | ./obs-studio 11 | ./security 12 | ./utilities 13 | ./web-browsers 14 | ]; 15 | } 16 | -------------------------------------------------------------------------------- /darwin/_mixins/desktop/apps/notes/default.nix: -------------------------------------------------------------------------------- 1 | { lib, username, ... }: 2 | let 3 | installFor = [ 4 | "martin" 5 | "martin.wimpress" 6 | ]; 7 | in 8 | lib.mkIf (lib.elem username installFor) { 9 | homebrew = { 10 | casks = [ 11 | "heynote" 12 | "joplin" 13 | ]; 14 | }; 15 | } 16 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/lights-setup/lights-setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | PROFILE=$(obs-cli profile get) 4 | 5 | case "${PROFILE}" in 6 | Dev) 7 | hue-lights default 8 | key-lights default 9 | ;; 10 | Play) 11 | hue-lights default 12 | key-lights gaming 13 | ;; 14 | esac 15 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/restart-pipewire/restart-pipewire.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set +e # Disable errexit 4 | set +u # Disable nounset 5 | set +o pipefail # Disable pipefail 6 | 7 | for UNIT in pipewire pipewire-pulse wireplumber mpris-proxy; do 8 | systemctl --user restart "$UNIT" 9 | done 10 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/development/review-tests.prompt.md: -------------------------------------------------------------------------------- 1 | --- 2 | agent: 'otto' 3 | description: 'Review Tests 🧪' 4 | --- 5 | ## Test Review 6 | 7 | Analyse ${input:codebase:#codebase} for high-value test additions. 8 | 9 | Focus on bug prevention, not coverage metrics. Output as specified in your agent format. 10 | -------------------------------------------------------------------------------- /nixos/_mixins/server/plex/default.nix: -------------------------------------------------------------------------------- 1 | { config, lib, ... }: 2 | let 3 | installOn = [ "revan" ]; 4 | in 5 | lib.mkIf (lib.elem config.networking.hostName installOn) { 6 | services = { 7 | plex = { 8 | enable = true; 9 | dataDir = "/srv/state/plex"; 10 | openFirewall = true; 11 | }; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/development/create-code.prompt.md: -------------------------------------------------------------------------------- 1 | --- 2 | agent: 'dilbert' 3 | description: 'Implement Code 🔨' 4 | --- 5 | ## Implement Code 6 | 7 | Implement the changes defined in the attached plan for ${input:codebase:#codebase}. 8 | 9 | Work step-by-step. Seek clarification on obstacles rather than assuming. 10 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/development/review-performance.prompt.md: -------------------------------------------------------------------------------- 1 | --- 2 | agent: 'gonzales' 3 | description: 'Review Performance ⚡' 4 | --- 5 | ## Performance Review 6 | 7 | Analyse ${input:codebase:#codebase} for optimisation opportunities. 8 | 9 | Focus on user-perceivable impact. Output as specified in your agent format. 10 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/nixfmt-plus/nixfmt-plus.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -eou pipefail 3 | 4 | if [ $# -eq 0 ]; then 5 | deadnix --edit 6 | statix fix 7 | nixfmt --verify . 8 | else 9 | deadnix --edit "$@" 10 | for target in "$@"; do 11 | statix fix -- "$target" 12 | done 13 | nixfmt --verify "$@" 14 | fi 15 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/restart-pipewire/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | text = builtins.readFile ./${name}.sh; 7 | }; 8 | in 9 | { 10 | home.packages = with pkgs; [ shellApplication ]; 11 | } 12 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/restart-portals/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | text = builtins.readFile ./${name}.sh; 7 | }; 8 | in 9 | { 10 | home.packages = with pkgs; [ shellApplication ]; 11 | } 12 | -------------------------------------------------------------------------------- /darwin/_mixins/desktop/apps/graphics-production/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | pkgs, 4 | username, 5 | ... 6 | }: 7 | let 8 | installFor = [ 9 | "martin" 10 | "martin.wimpress" 11 | ]; 12 | in 13 | lib.mkIf (lib.elem username installFor) { 14 | environment.systemPackages = with pkgs; [ 15 | inkscape 16 | pika 17 | ]; 18 | } 19 | -------------------------------------------------------------------------------- /lib/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs, 3 | outputs, 4 | stateVersion, 5 | ... 6 | }: 7 | let 8 | helpers = import ./helpers.nix { inherit inputs outputs stateVersion; }; 9 | in 10 | { 11 | inherit (helpers) 12 | mkDarwin 13 | mkHome 14 | mkNixos 15 | forAllSystems 16 | mkSystemConfig 17 | generateConfigs 18 | ; 19 | } 20 | -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/jq.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | ... 4 | }: 5 | { 6 | programs = { 7 | jq = { 8 | enable = true; 9 | }; 10 | jqp = { 11 | enable = true; 12 | settings = { 13 | theme = { 14 | name = "catppuccin-${config.catppuccin.flavor}"; 15 | }; 16 | }; 17 | }; 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/tldr.nix: -------------------------------------------------------------------------------- 1 | # Modern Unix `man` 2 | # Use the Rust client for tldr 3 | # https://github.com/tldr-pages/tlrc 4 | { 5 | pkgs, 6 | ... 7 | }: 8 | { 9 | home.packages = [ 10 | pkgs.tlrc 11 | ]; 12 | services = { 13 | tldr-update = { 14 | enable = true; 15 | package = pkgs.tlrc; 16 | }; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/dircolors.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | ... 4 | }: 5 | { 6 | programs = { 7 | dircolors = { 8 | enable = true; 9 | enableBashIntegration = config.programs.bash.enable; 10 | enableFishIntegration = config.programs.fish.enable; 11 | enableZshIntegration = config.programs.zsh.enable; 12 | }; 13 | }; 14 | } 15 | -------------------------------------------------------------------------------- /nixos/_mixins/network/vader.nix: -------------------------------------------------------------------------------- 1 | { config, lib, ... }: 2 | { 3 | networking.networkmanager = lib.mkIf config.networking.networkmanager.enable { 4 | # Adjust MTU for Virgin Fibre 5 | connectionConfig = { 6 | "ethernet.mtu" = 1462; 7 | "wifi.mtu" = 1462; 8 | }; 9 | # Disable WiFi power saving 10 | wifi.powersave = true; 11 | }; 12 | } 13 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/get-rhythmbox-volume/get-rhythmbox-volume.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set +e # Disable errexit 4 | set +o pipefail # Disable pipefail 5 | 6 | VOL=$(rhythmbox-client --no-start --print-volume | cut -d' ' -f4 | cut -c1-4) 7 | if [ -z "${VOL}" ]; then 8 | echo "--" 9 | else 10 | echo "$(echo "100 * ${VOL}" | bc -l | cut -d'.' -f1)%" 11 | fi 12 | -------------------------------------------------------------------------------- /darwin/_mixins/scripts/install-homebrew/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ ]; 7 | text = builtins.readFile ./${name}.sh; 8 | }; 9 | in 10 | { 11 | environment.systemPackages = with pkgs; [ shellApplication ]; 12 | } 13 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/_template/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ coreutils ]; 7 | text = builtins.readFile ./${name}.sh; 8 | }; 9 | in 10 | { 11 | home.packages = with pkgs; [ shellApplication ]; 12 | } 13 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/all-lights/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ coreutils ]; 7 | text = builtins.readFile ./${name}.sh; 8 | }; 9 | in 10 | { 11 | home.packages = with pkgs; [ shellApplication ]; 12 | } 13 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/make-luks-key/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ coreutils ]; 7 | text = builtins.readFile ./${name}.sh; 8 | }; 9 | in 10 | { 11 | home.packages = with pkgs; [ shellApplication ]; 12 | } 13 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/pw-quantum/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ coreutils ]; 7 | text = builtins.readFile ./${name}.sh; 8 | }; 9 | in 10 | { 11 | home.packages = with pkgs; [ shellApplication ]; 12 | } 13 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/lights-teardown/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ coreutils ]; 7 | text = builtins.readFile ./${name}.sh; 8 | }; 9 | in 10 | { 11 | home.packages = with pkgs; [ shellApplication ]; 12 | } 13 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/simple-password/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ coreutils ]; 7 | text = builtins.readFile ./${name}.sh; 8 | }; 9 | in 10 | { 11 | home.packages = with pkgs; [ shellApplication ]; 12 | } 13 | -------------------------------------------------------------------------------- /nixos/_mixins/users/martin/default.nix: -------------------------------------------------------------------------------- 1 | { username, ... }: 2 | { 3 | users.users.martin = { 4 | description = "Martin Wimpress"; 5 | # mkpasswd -m sha-512 6 | hashedPassword = "$6$UXNQ20Feu82wCFK9$dnJTeSqoECw1CGMSUdxKREtraO.Nllv3/fW9N3m7lPHYxFKA/Cf8YqYGDmiWNfaKeyx2DKdURo0rPYBrSZRL./"; 7 | }; 8 | systemd.tmpfiles.rules = [ "d /mnt/snapshot/${username} 0755 ${username} users" ]; 9 | } 10 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/music/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | pkgs, 4 | username, 5 | ... 6 | }: 7 | let 8 | installFor = [ "martin" ]; 9 | inherit (pkgs.stdenv) isLinux; 10 | in 11 | lib.mkIf (builtins.elem username installFor) { 12 | home.packages = 13 | with pkgs; 14 | [ 15 | youtube-music 16 | ] 17 | ++ lib.optionals isLinux [ 18 | cider 19 | ]; 20 | } 21 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/dl/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | curl 9 | ]; 10 | text = builtins.readFile ./${name}.sh; 11 | }; 12 | in 13 | { 14 | home.packages = [ shellApplication ]; 15 | } 16 | -------------------------------------------------------------------------------- /nixos/dagger/default.nix: -------------------------------------------------------------------------------- 1 | { modulesPath, ... }: 2 | { 3 | imports = [ 4 | (modulesPath + "/profiles/qemu-guest.nix") 5 | ./disks.nix 6 | ]; 7 | 8 | boot = { 9 | initrd.availableKernelModules = [ 10 | "xhci_pci" 11 | "ohci_pci" 12 | "ehci_pci" 13 | "virtio_pci" 14 | "ahci" 15 | "usbhid" 16 | "sr_mod" 17 | "virtio_blk" 18 | ]; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /darwin/_mixins/scripts/install-docker/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | curl 8 | ]; 9 | text = builtins.readFile ./${name}.sh; 10 | }; 11 | in 12 | { 13 | environment.systemPackages = with pkgs; [ shellApplication ]; 14 | } 15 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/nope/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | util-linux 9 | ]; 10 | text = builtins.readFile ./${name}.sh; 11 | }; 12 | in 13 | { 14 | home.packages = [ shellApplication ]; 15 | } 16 | -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/fzf.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | ... 4 | }: 5 | { 6 | catppuccin.fzf.enable = config.programs.fzf.enable; 7 | 8 | programs = { 9 | fzf = { 10 | enable = true; 11 | enableBashIntegration = config.programs.bash.enable; 12 | enableFishIntegration = config.programs.fish.enable; 13 | enableZshIntegration = config.programs.zsh.enable; 14 | }; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/backup-obs/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | rsync 9 | ]; 10 | text = builtins.readFile ./${name}.sh; 11 | }; 12 | in 13 | { 14 | home.packages = with pkgs; [ shellApplication ]; 15 | } 16 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/halp/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | bat 9 | tlrc 10 | ]; 11 | text = builtins.readFile ./${name}.sh; 12 | }; 13 | in 14 | { 15 | home.packages = [ shellApplication ]; 16 | } 17 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/game-development/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | hostname, 3 | lib, 4 | pkgs, 5 | ... 6 | }: 7 | let 8 | installOn = [ 9 | "phasma" 10 | "vader" 11 | ]; 12 | in 13 | lib.mkIf (lib.elem hostname installOn) { 14 | home = { 15 | packages = with pkgs; [ 16 | (defold.override { 17 | uiScale = "1.25"; 18 | }) 19 | love 20 | #pico8 21 | ]; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/audio-teardown/audio-teardown.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | rhythmbox-client --no-start --pause 4 | rhythmbox-client --no-start --no-repeat 5 | rhythmbox-client --no-start --no-shuffle 6 | rhythmbox-client --no-start --set-volume 0 7 | 8 | # Restore PipeWire Quantum 9 | pw-metadata --name settings 0 clock.force-quantum 0 10 | 11 | # Disable sidetone 12 | mic-loopback set 100 13 | mic-loopback off 14 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/get-volume/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | pulsemixer 9 | ]; 10 | text = builtins.readFile ./${name}.sh; 11 | }; 12 | in 13 | { 14 | home.packages = with pkgs; [ shellApplication ]; 15 | } 16 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/lights-setup/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | obs-cli 9 | ]; 10 | text = builtins.readFile ./${name}.sh; 11 | }; 12 | in 13 | { 14 | home.packages = with pkgs; [ shellApplication ]; 15 | } 16 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/make-host-keys/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | openssh 9 | ]; 10 | text = builtins.readFile ./${name}.sh; 11 | }; 12 | in 13 | { 14 | home.packages = with pkgs; [ shellApplication ]; 15 | } 16 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/make-user-keys/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | openssh 9 | ]; 10 | text = builtins.readFile ./${name}.sh; 11 | }; 12 | in 13 | { 14 | home.packages = with pkgs; [ shellApplication ]; 15 | } 16 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/purge-gpu-caches/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | fd 9 | ]; 10 | text = builtins.readFile ./${name}.sh; 11 | }; 12 | in 13 | { 14 | home.packages = with pkgs; [ shellApplication ]; 15 | } 16 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/send-required/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | rsync 9 | ]; 10 | text = builtins.readFile ./${name}.sh; 11 | }; 12 | in 13 | { 14 | home.packages = with pkgs; [ shellApplication ]; 15 | } 16 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/unroll-url/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | curlMinimal 9 | ]; 10 | text = builtins.readFile ./${name}.sh; 11 | }; 12 | in 13 | { 14 | home.packages = with pkgs; [ shellApplication ]; 15 | } 16 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/mwprocapture-hunter/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | curl 9 | ]; 10 | text = builtins.readFile ./${name}.sh; 11 | }; 12 | in 13 | { 14 | home.packages = with pkgs; [ shellApplication ]; 15 | } 16 | -------------------------------------------------------------------------------- /nixos/_mixins/server/default.nix: -------------------------------------------------------------------------------- 1 | { lib, ... }: 2 | let 3 | currentDir = ./.; # Represents the current directory 4 | isDirectoryAndNotTemplate = _name: type: type == "directory"; 5 | directories = lib.filterAttrs isDirectoryAndNotTemplate (builtins.readDir currentDir); 6 | importDirectory = name: import (currentDir + "/${name}"); 7 | in 8 | { 9 | imports = lib.mapAttrsToList (name: _: importDirectory name) directories; 10 | } 11 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/key-lights/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | curl 9 | jq 10 | ]; 11 | text = builtins.readFile ./${name}.sh; 12 | }; 13 | in 14 | { 15 | home.packages = with pkgs; [ shellApplication ]; 16 | } 17 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/nosh/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | ... 4 | }: 5 | let 6 | name = builtins.baseNameOf (builtins.toString ./.); 7 | shellApplication = pkgs.writeShellApplication { 8 | inherit name; 9 | runtimeInputs = with pkgs; [ 10 | coreutils 11 | nix-output-monitor 12 | ]; 13 | text = builtins.readFile ./${name}.sh; 14 | }; 15 | in 16 | { 17 | home.packages = [ shellApplication ]; 18 | } 19 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/resolve-ready/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | ffmpeg-headless 9 | ]; 10 | text = builtins.readFile ./${name}.sh; 11 | }; 12 | in 13 | { 14 | home.packages = with pkgs; [ shellApplication ]; 15 | } 16 | -------------------------------------------------------------------------------- /nixos/_mixins/hardware/v4l2loopback/default.nix: -------------------------------------------------------------------------------- 1 | { config, ... }: 2 | { 3 | boot = { 4 | extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ]; 5 | extraModprobeConfig = '' 6 | options v4l2loopback devices=1 video_nr=13 card_label="OBS Virtual Camera" exclusive_caps=1 7 | ''; 8 | # Register a v4l2loopback device at boot 9 | kernelModules = [ 10 | "v4l2loopback" 11 | ]; 12 | }; 13 | } 14 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/waybar/virtualcam-toggle.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [ -e /tmp/virtualcam.pid ]; then 4 | virtualcam stop 5 | notify-desktop "󰄀 VirtualCam disabled" "The v4l2loopback virtual camera has been disabled." --urgency=low --app-name="VirtualCam" 6 | else 7 | virtualcam start 8 | notify-desktop "󰗟 VirtualCam enabled" "The v4l2loopback virtual camera has been enabled." --urgency=low --app-name="VirtualCam" 9 | fi -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/nook/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | gnugrep 9 | gnused 10 | which 11 | ]; 12 | text = builtins.readFile ./${name}.sh; 13 | }; 14 | in 15 | { 16 | home.packages = [ shellApplication ]; 17 | } 18 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/nout/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | ... 4 | }: 5 | let 6 | name = builtins.baseNameOf (builtins.toString ./.); 7 | 8 | shellApplication = pkgs.writeShellApplication { 9 | inherit name; 10 | runtimeInputs = with pkgs; [ 11 | coreutils 12 | nix-output-monitor 13 | ]; 14 | text = builtins.readFile ./${name}.sh; 15 | }; 16 | in 17 | { 18 | home.packages = [ shellApplication ]; 19 | } 20 | -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/README.md: -------------------------------------------------------------------------------- 1 | ### Contents 2 | 3 | This directory contains all the glyphs (glyph sets) that the `font-patcher` puts into the fonts. 4 | 5 | If a icon font here is updated, do not forget to update the database file in `bin/script/libs`. 6 | 7 | The 'Seti and Original' icons (in `original-source.otf`) is automatically generated from the glyphs in `src/svgs`. 8 | Do not edit and commit changes to that font directly. 9 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/gpg-restore/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | gnupg 8 | coreutils 9 | findutils 10 | ]; 11 | text = builtins.readFile ./${name}.sh; 12 | }; 13 | in 14 | { 15 | home.packages = with pkgs; [ shellApplication ]; 16 | } 17 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/ipad-volume/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | gnugrep 9 | pulsemixer 10 | ]; 11 | text = builtins.readFile ./${name}.sh; 12 | }; 13 | in 14 | { 15 | home.packages = with pkgs; [ shellApplication ]; 16 | } 17 | -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/gpg.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | pkgs, 4 | ... 5 | }: 6 | { 7 | programs = { 8 | gpg = { 9 | enable = true; 10 | }; 11 | }; 12 | 13 | services = { 14 | gpg-agent = { 15 | enable = true; 16 | enableSshSupport = true; 17 | pinentry.package = 18 | if config.wayland.windowManager.hyprland.enable then pkgs.pinentry-gnome3 else pkgs.pinentry-curses; 19 | }; 20 | }; 21 | } 22 | -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/zoxide.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | ... 4 | }: 5 | { 6 | programs = { 7 | zoxide = { 8 | enable = true; 9 | enableBashIntegration = config.programs.bash.enable; 10 | enableFishIntegration = config.programs.fish.enable; 11 | enableZshIntegration = config.programs.zsh.enable; 12 | # Replace cd with z and add cdi to access zi 13 | options = [ "--cmd cd" ]; 14 | }; 15 | }; 16 | } 17 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/cg-clone/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | gh 9 | git 10 | openssh 11 | ]; 12 | text = builtins.readFile ./${name}.sh; 13 | }; 14 | in 15 | { 16 | home.packages = with pkgs; [ shellApplication ]; 17 | } 18 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/nixfmt-plus/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | deadnix 8 | nixfmt-rfc-style 9 | statix 10 | ]; 11 | text = builtins.readFile ./${name}.sh; 12 | }; 13 | in 14 | { 15 | home.packages = with pkgs; [ shellApplication ]; 16 | } 17 | -------------------------------------------------------------------------------- /darwin/_mixins/scripts/default.nix: -------------------------------------------------------------------------------- 1 | { lib, ... }: 2 | let 3 | currentDir = ./.; # Represents the current directory 4 | isDirectoryAndNotTemplate = name: type: type == "directory" && name != "_template"; 5 | directories = lib.filterAttrs isDirectoryAndNotTemplate (builtins.readDir currentDir); 6 | importDirectory = name: import (currentDir + "/${name}"); 7 | in 8 | { 9 | imports = lib.mapAttrsToList (name: _: importDirectory name) directories; 10 | } 11 | -------------------------------------------------------------------------------- /nixos/_mixins/scripts/default.nix: -------------------------------------------------------------------------------- 1 | { lib, ... }: 2 | let 3 | currentDir = ./.; # Represents the current directory 4 | isDirectoryAndNotTemplate = name: type: type == "directory" && name != "_template"; 5 | directories = lib.filterAttrs isDirectoryAndNotTemplate (builtins.readDir currentDir); 6 | importDirectory = name: import (currentDir + "/${name}"); 7 | in 8 | { 9 | imports = lib.mapAttrsToList (name: _: importDirectory name) directories; 10 | } 11 | -------------------------------------------------------------------------------- /nixos/_mixins/scripts/install-anywhere/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | ... 4 | }: 5 | let 6 | install-anywhere = pkgs.writeShellApplication { 7 | name = "install-anywhere"; 8 | runtimeInputs = with pkgs; [ 9 | coreutils-full 10 | git 11 | openssh 12 | tree 13 | ]; 14 | text = builtins.readFile ./install-anywhere.sh; 15 | }; 16 | in 17 | { 18 | environment.systemPackages = with pkgs; [ install-anywhere ]; 19 | } 20 | -------------------------------------------------------------------------------- /nixos/_mixins/server/rustdesk/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | hostname, 3 | lib, 4 | ... 5 | }: 6 | let 7 | installOn = [ 8 | "vader" 9 | "phasma" 10 | ]; 11 | in 12 | lib.mkIf (lib.elem hostname installOn) { 13 | services.rustdesk-server = { 14 | enable = true; 15 | openFirewall = true; 16 | relay.enable = true; 17 | signal.enable = true; 18 | signal.relayHosts = [ 19 | "vader" 20 | "phasma" 21 | ]; 22 | }; 23 | } 24 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/default.nix: -------------------------------------------------------------------------------- 1 | { lib, ... }: 2 | let 3 | currentDir = ./.; # Represents the current directory 4 | isDirectoryAndNotTemplate = name: type: type == "directory" && name != "_template"; 5 | directories = lib.filterAttrs isDirectoryAndNotTemplate (builtins.readDir currentDir); 6 | importDirectory = name: import (currentDir + "/${name}"); 7 | in 8 | { 9 | imports = lib.mapAttrsToList (name: _: importDirectory name) directories; 10 | } 11 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/hue-lights/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | hueadm 9 | obs-cli 10 | procps 11 | ]; 12 | text = builtins.readFile ./${name}.sh; 13 | }; 14 | in 15 | { 16 | home.packages = with pkgs; [ shellApplication ]; 17 | } 18 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/default-input/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | gnugrep 9 | gnused 10 | pulseaudio 11 | ]; 12 | text = builtins.readFile ./${name}.sh; 13 | }; 14 | in 15 | { 16 | home.packages = with pkgs; [ shellApplication ]; 17 | } 18 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/default-output/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | gnugrep 9 | gnused 10 | pulseaudio 11 | ]; 12 | text = builtins.readFile ./${name}.sh; 13 | }; 14 | in 15 | { 16 | home.packages = with pkgs; [ shellApplication ]; 17 | } 18 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/norm/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | ... 4 | }: 5 | let 6 | name = builtins.baseNameOf (builtins.toString ./.); 7 | 8 | shellApplication = pkgs.writeShellApplication { 9 | inherit name; 10 | runtimeInputs = with pkgs; [ 11 | coreutils 12 | git 13 | gnugrep 14 | gnused 15 | ]; 16 | text = builtins.readFile ./${name}.sh; 17 | }; 18 | in 19 | { 20 | home.packages = [ shellApplication ]; 21 | } 22 | -------------------------------------------------------------------------------- /nixos/_mixins/network/revan.nix: -------------------------------------------------------------------------------- 1 | { lib, ... }: 2 | { 3 | networking = { 4 | defaultGateway = "10.10.10.1"; 5 | firewall = { 6 | trustedInterfaces = [ "eth0" ]; 7 | }; 8 | interfaces.eth0.mtu = 1462; 9 | interfaces.eth0.ipv4.addresses = [ 10 | { 11 | address = "10.10.10.10"; 12 | prefixLength = 24; 13 | } 14 | ]; 15 | useDHCP = lib.mkForce false; 16 | usePredictableInterfaceNames = false; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/mic-mute/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | gnused 9 | notify-desktop 10 | pulseaudio 11 | ]; 12 | text = builtins.readFile ./${name}.sh; 13 | }; 14 | in 15 | { 16 | home.packages = with pkgs; [ shellApplication ]; 17 | } 18 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/toggle-meet/default.nix: -------------------------------------------------------------------------------- 1 | { lib, pkgs, ... }: 2 | let 3 | inherit (pkgs.stdenv) isLinux; 4 | name = builtins.baseNameOf (builtins.toString ./.); 5 | shellApplication = pkgs.writeShellApplication { 6 | inherit name; 7 | runtimeInputs = with pkgs; [ 8 | coreutils 9 | xdotool 10 | ]; 11 | text = builtins.readFile ./${name}.sh; 12 | }; 13 | in 14 | lib.mkIf isLinux { home.packages = with pkgs; [ shellApplication ]; } 15 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/bt-codec/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | coreutils 8 | gnugrep 9 | gnused 10 | jq 11 | pulseaudio 12 | ]; 13 | text = builtins.readFile ./${name}.sh; 14 | }; 15 | in 16 | { 17 | home.packages = with pkgs; [ shellApplication ]; 18 | } 19 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/benchmark-codecs/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | bc 8 | coreutils 9 | ffmpeg-full 10 | gawk 11 | gnugrep 12 | ]; 13 | text = builtins.readFile ./${name}.sh; 14 | }; 15 | in 16 | { 17 | home.packages = with pkgs; [ shellApplication ]; 18 | } 19 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/youtube-ready/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | bc 8 | coreutils 9 | ffmpeg-full 10 | gawk 11 | gnugrep 12 | ]; 13 | text = builtins.readFile ./${name}.sh; 14 | }; 15 | in 16 | { 17 | home.packages = with pkgs; [ shellApplication ]; 18 | } 19 | -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/yt-dlp.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | programs = { 3 | yt-dlp = { 4 | enable = true; 5 | settings = { 6 | audio-format = "best"; 7 | audio-quality = 0; 8 | embed-chapters = true; 9 | embed-metadata = true; 10 | embed-subs = true; 11 | embed-thumbnail = true; 12 | remux-video = "aac>m4a/mov>mp4/mkv"; 13 | sponsorblock-mark = "sponsor"; 14 | sub-langs = "all"; 15 | }; 16 | }; 17 | }; 18 | } 19 | -------------------------------------------------------------------------------- /nixos/bane/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs, 3 | ... 4 | }: 5 | { 6 | imports = [ 7 | inputs.nixos-hardware.nixosModules.framework-16-7040-amd 8 | ./disks.nix 9 | ]; 10 | 11 | boot = { 12 | initrd.availableKernelModules = [ 13 | "nvme" 14 | "sd_mod" 15 | "thunderbolt" 16 | "uas" 17 | "usbhid" 18 | "xhci_pci" 19 | ]; 20 | initrd.systemd.enable = true; 21 | kernelModules = [ 22 | "amdgpu" 23 | "kvm-amd" 24 | ]; 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/flatpak-theme/default.nix: -------------------------------------------------------------------------------- 1 | { lib, pkgs, ... }: 2 | let 3 | inherit (pkgs.stdenv) isLinux; 4 | name = builtins.baseNameOf (builtins.toString ./.); 5 | shellApplication = pkgs.writeShellApplication { 6 | inherit name; 7 | runtimeInputs = with pkgs; [ 8 | coreutils 9 | dconf 10 | flatpak 11 | gnused 12 | ]; 13 | text = builtins.readFile ./${name}.sh; 14 | }; 15 | in 16 | lib.mkIf isLinux { home.packages = with pkgs; [ shellApplication ]; } 17 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/lanscan/default.nix: -------------------------------------------------------------------------------- 1 | { lib, pkgs, ... }: 2 | let 3 | inherit (pkgs.stdenv) isLinux; 4 | name = builtins.baseNameOf (builtins.toString ./.); 5 | shellApplication = pkgs.writeShellApplication { 6 | inherit name; 7 | runtimeInputs = with pkgs; [ 8 | coreutils 9 | gnugrep 10 | iproute2 11 | nmap 12 | ]; 13 | text = builtins.readFile ./${name}.sh; 14 | }; 15 | in 16 | lib.mkIf isLinux { 17 | home.packages = with pkgs; [ shellApplication ]; 18 | } 19 | -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/readme.md: -------------------------------------------------------------------------------- 1 | 2 | # Nerd Fonts 3 | 4 | This is font-patcher python script (and required source files) from a Nerd Fonts release. 5 | 6 | ## Running 7 | 8 | * To execute run: `fontforge --script ./font-patcher --complete ` 9 | * For more CLI options and help: `fontforge --script ./font-patcher --help` 10 | 11 | ## Further info 12 | 13 | For more information see: 14 | * https://github.com/ryanoasis/nerd-fonts/ 15 | * https://github.com/ryanoasis/nerd-fonts/releases/latest/ 16 | -------------------------------------------------------------------------------- /darwin/_mixins/desktop/apps/utilities/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | pkgs, 4 | username, 5 | ... 6 | }: 7 | let 8 | installFor = [ 9 | "martin" 10 | "martin.wimpress" 11 | ]; 12 | in 13 | lib.mkIf (lib.elem username installFor) { 14 | environment.systemPackages = with pkgs; [ 15 | grandperspective 16 | keka 17 | stats 18 | utm 19 | ]; 20 | 21 | homebrew = { 22 | casks = [ 23 | "balenaetcher" 24 | "beyond-compare" 25 | "syncthing-app" 26 | ]; 27 | }; 28 | } 29 | -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/direnv.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | ... 4 | }: 5 | { 6 | home = { 7 | # https://github.com/direnv/direnv/issues/1084 8 | sessionVariables = { 9 | DIRENV_WARN_TIMEOUT = "120s"; 10 | }; 11 | }; 12 | programs = { 13 | direnv = { 14 | enable = true; 15 | enableBashIntegration = config.programs.bash.enable; 16 | enableZshIntegration = config.programs.zsh.enable; 17 | nix-direnv = { 18 | enable = true; 19 | }; 20 | }; 21 | }; 22 | } 23 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/reset-ssl2/default.nix: -------------------------------------------------------------------------------- 1 | { lib, pkgs, ... }: 2 | let 3 | inherit (pkgs.stdenv) isLinux; 4 | name = builtins.baseNameOf (builtins.toString ./.); 5 | shellApplication = pkgs.writeShellApplication { 6 | inherit name; 7 | runtimeInputs = with pkgs; [ 8 | coreutils 9 | gnugrep 10 | usb-reset 11 | usbutils 12 | ]; 13 | text = builtins.readFile ./${name}.sh; 14 | }; 15 | in 16 | lib.mkIf isLinux { 17 | home.packages = with pkgs; [ shellApplication ]; 18 | } 19 | -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/btop.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | pkgs, 4 | ... 5 | }: 6 | { 7 | catppuccin.btop.enable = config.programs.btop.enable; 8 | 9 | programs = { 10 | btop = { 11 | enable = true; 12 | package = pkgs.btop.override { 13 | cudaSupport = true; 14 | rocmSupport = true; 15 | }; 16 | }; 17 | }; 18 | 19 | xdg = { 20 | desktopEntries = { 21 | btop = { 22 | name = "btop++"; 23 | noDisplay = true; 24 | }; 25 | }; 26 | }; 27 | } 28 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/development/plan-docs.prompt.md: -------------------------------------------------------------------------------- 1 | --- 2 | agent: 'velma' 3 | description: 'Plan Docs 📋' 4 | --- 5 | ## Documentation Plan 6 | 7 | Review documentation and information architecture in ${input:codebase:#codebase}. 8 | 9 | **Produce:** 10 | 1. Current state assessment (what exists, what's missing, what's stale) 11 | 2. Prioritised improvement plan with rationale 12 | 3. Proposed structure/reorganisation if needed 13 | 14 | Focus on gaps that actually hurt users. Skip improvements that are nice-to-have. 15 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/hypr-activity-menu/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | pkgs, 5 | ... 6 | }: 7 | let 8 | name = builtins.baseNameOf (builtins.toString ./.); 9 | shellApplication = pkgs.writeShellApplication { 10 | inherit name; 11 | runtimeInputs = with pkgs; [ 12 | fuzzel 13 | notify-desktop 14 | ]; 15 | text = builtins.readFile ./${name}.sh; 16 | }; 17 | in 18 | lib.mkIf config.wayland.windowManager.hyprland.enable { 19 | home.packages = with pkgs; [ shellApplication ]; 20 | } 21 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/virtualcam/default.nix: -------------------------------------------------------------------------------- 1 | { lib, pkgs, ... }: 2 | let 3 | inherit (pkgs.stdenv) isLinux; 4 | name = builtins.baseNameOf (builtins.toString ./.); 5 | shellApplication = pkgs.writeShellApplication { 6 | inherit name; 7 | runtimeInputs = with pkgs; [ 8 | ffmpeg 9 | gnugrep 10 | kmod 11 | procps 12 | coreutils 13 | ]; 14 | text = builtins.readFile ./${name}.sh; 15 | }; 16 | in 17 | lib.mkIf isLinux { 18 | home.packages = with pkgs; [ shellApplication ]; 19 | } 20 | -------------------------------------------------------------------------------- /nixos/_mixins/hardware/bluetooth/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | isInstall, 3 | lib, 4 | pkgs, 5 | ... 6 | }: 7 | { 8 | environment.systemPackages = lib.optionals isInstall [ 9 | pkgs.bluetui 10 | ]; 11 | hardware = { 12 | # https://nixos.wiki/wiki/Bluetooth 13 | bluetooth = { 14 | enable = isInstall; 15 | package = pkgs.bluez; 16 | settings = { 17 | General = { 18 | Enable = "Source,Sink,Media,Socket"; 19 | Experimental = true; 20 | }; 21 | }; 22 | }; 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/utilities/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | pkgs, 4 | username, 5 | ... 6 | }: 7 | let 8 | installFor = [ "martin" ]; 9 | in 10 | lib.mkIf (builtins.elem username installFor) { 11 | home.packages = with pkgs; [ 12 | _1password-gui 13 | cpu-x 14 | dconf-editor 15 | pika-backup 16 | squirreldisk 17 | usbimager 18 | vaults 19 | ]; 20 | 21 | dconf.settings = with lib.hm.gvariant; { 22 | "ca/desrt/dconf-editor" = { 23 | show-warning = false; 24 | }; 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /home-manager/_mixins/development/pre-commit-setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | if [ ! -d .git ]; then 4 | echo "This script must be run in a git repository." 5 | exit 1 6 | fi 7 | 8 | if [ -e .git/hooks/pre-commit ]; then 9 | echo "Pre-commit hook already exists. Skipping installation." 10 | exit 0 11 | fi 12 | 13 | if [ -e .pre-commit-config.yaml ]; then 14 | pre-commit install 15 | pre-commit run --all-files 16 | else 17 | echo "No .pre-commit-config.yaml found. Please create one to use pre-commit hooks." 18 | exit 1 19 | fi 20 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/toggle-meet/toggle-meet.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set +u # Disable nounset 4 | 5 | WINDOW_ID="$(xdotool search '^Meet ' 2>/dev/null)" 6 | if [ -n "${WINDOW_ID}" ]; then 7 | case "${1}" in 8 | camera) 9 | xdotool windowfocus "${WINDOW_ID}" 10 | xdotool getactivewindow key ctrl+e 11 | ;; 12 | mic) 13 | xdotool windowfocus "${WINDOW_ID}" 14 | xdotool getactivewindow key ctrl+d 15 | ;; 16 | *) echo "Usage: ${0} {camera|mic}";; 17 | esac 18 | fi 19 | -------------------------------------------------------------------------------- /nixos/_mixins/users/root/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | users.users.root = { 3 | hashedPassword = null; 4 | openssh.authorizedKeys.keys = [ 5 | "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAywaYwPN4LVbPqkc+kUc7ZVazPBDy4LCAud5iGJdr7g9CwLYoudNjXt/98Oam5lK7ai6QPItK6ECj5+33x/iFpWb3Urr9SqMc/tH5dU1b9N/9yWRhE2WnfcvuI0ms6AXma8QGp1pj/DoLryPVQgXvQlglHaDIL1qdRWFqXUO2u30X5tWtDdOoR02UyAtYBttou4K0rG7LF9rRaoLYP9iCBLxkMJbCIznPD/pIYa6Fl8V8/OVsxYiFy7l5U0RZ7gkzJv8iNz+GG8vw2NX4oIJfAR4oIk3INUvYrKvI2NSMSw5sry+z818fD1hK+soYLQ4VZ4hHRHcf4WV4EeVa5ARxdw== Martin Wimpress" 6 | ]; 7 | }; 8 | } 9 | -------------------------------------------------------------------------------- /nixos/tanis/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs, 3 | lib, 4 | ... 5 | }: 6 | { 7 | imports = [ 8 | inputs.nixos-hardware.nixosModules.lenovo-thinkpad-z13-gen1 9 | ./disks.nix 10 | ]; 11 | 12 | boot = { 13 | initrd.availableKernelModules = [ 14 | "nvme" 15 | "sd_mod" 16 | "thunderbolt" 17 | "uas" 18 | "xhci_pci" 19 | ]; 20 | initrd.systemd.enable = true; 21 | kernelModules = [ 22 | "amdgpu" 23 | "kvm-amd" 24 | ]; 25 | }; 26 | 27 | services.fprintd.enable = lib.mkForce false; 28 | } 29 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/captive-portal/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | isLaptop, 3 | lib, 4 | pkgs, 5 | ... 6 | }: 7 | let 8 | inherit (pkgs.stdenv) isLinux; 9 | name = builtins.baseNameOf (builtins.toString ./.); 10 | shellApplication = pkgs.writeShellApplication { 11 | inherit name; 12 | runtimeInputs = with pkgs; [ 13 | coreutils 14 | gawk 15 | iproute2 16 | xdg-utils 17 | ]; 18 | text = builtins.readFile ./${name}.sh; 19 | }; 20 | in 21 | lib.mkIf (isLaptop && isLinux) { home.packages = with pkgs; [ shellApplication ]; } 22 | -------------------------------------------------------------------------------- /nixos/_mixins/hardware/yubikey/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | isWorkstation, 3 | pkgs, 4 | ... 5 | }: 6 | { 7 | environment.systemPackages = 8 | with pkgs; 9 | lib.optionals isWorkstation [ 10 | yubioath-flutter 11 | ]; 12 | programs.yubikey-touch-detector.enable = isWorkstation; 13 | programs.yubikey-touch-detector.libnotify = isWorkstation; 14 | #security.pam.u2f.enable = true; 15 | #security.pam.yubico.control = "required"; 16 | services = { 17 | udev.packages = [ pkgs.yubikey-personalization ]; 18 | pcscd.enable = true; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/waybar/eyecandy-check.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | HYPR_ANIMATIONS=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}') 4 | if [ "$HYPR_ANIMATIONS" -eq 1 ] ; then 5 | echo -en "󱥰\n󱥰 Hyprland eye-candy is enabled\nactive" 6 | else 7 | echo -en "󱥱\n󱥱 Hyprland eye-candy is disabled\ninactive" 8 | # Disable opacity on all clients every 4 seconds 9 | if [ $(( $(date +%S) % 4 )) -eq 0 ]; then 10 | hyprctl clients -j | jq -r ".[].address" | xargs -I {} hyprctl setprop address:{} forceopaque 1 lock 11 | fi 12 | fi 13 | -------------------------------------------------------------------------------- /darwin/_mixins/features/podman/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | pkgs, 4 | username, 5 | ... 6 | }: 7 | let 8 | installFor = [ "none" ]; 9 | in 10 | lib.mkIf (lib.elem "${username}" installFor) { 11 | environment = { 12 | shellAliases = { 13 | docker = "${pkgs.podman}/bin/podman"; 14 | }; 15 | systemPackages = with pkgs; [ 16 | act 17 | podman 18 | ]; 19 | }; 20 | 21 | homebrew = { 22 | casks = [ "podman-desktop" ]; 23 | }; 24 | 25 | programs.fish.shellAliases = { 26 | docker = "${pkgs.podman}/bin/podman"; 27 | }; 28 | } 29 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/music-volume/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | hostname, 3 | lib, 4 | pkgs, 5 | ... 6 | }: 7 | let 8 | installOn = [ 9 | "phasma" 10 | "vader" 11 | ]; 12 | name = builtins.baseNameOf (builtins.toString ./.); 13 | shellApplication = pkgs.writeShellApplication { 14 | inherit name; 15 | runtimeInputs = with pkgs; [ 16 | bc 17 | coreutils 18 | rhythmbox 19 | ]; 20 | text = builtins.readFile ./${name}.sh; 21 | }; 22 | in 23 | lib.mkIf (builtins.elem hostname installOn) { home.packages = with pkgs; [ shellApplication ]; } 24 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/ciderctl/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | hostname, 3 | lib, 4 | pkgs, 5 | ... 6 | }: 7 | let 8 | installOn = [ 9 | "phasma" 10 | "vader" 11 | ]; 12 | name = builtins.baseNameOf (builtins.toString ./.); 13 | shellApplication = pkgs.writeShellApplication { 14 | inherit name; 15 | runtimeInputs = with pkgs; [ 16 | bc 17 | curl 18 | jq 19 | coreutils 20 | ]; 21 | text = builtins.readFile ./${name}.sh; 22 | }; 23 | in 24 | lib.mkIf (builtins.elem hostname installOn) { home.packages = with pkgs; [ shellApplication ]; } 25 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/gpg-restore/gpg-restore.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # shellcheck disable=SC2174 4 | mkdir -p --mode=700 "${HOME}/.gnupg" 5 | gpgconf --kill gpg-agent 6 | 7 | temp_dir="${HOME}/.config/sops-nix/secrets" 8 | 9 | if [ -e "${temp_dir}/gpg_private" ]; then 10 | gpg --import --batch "${temp_dir}/gpg_private" 11 | gpg --import "${temp_dir}/gpg_public" 12 | gpg --list-secret-keys 13 | gpg --list-keys 14 | gpg --import-ownertrust "${temp_dir}/gpg_ownertrust" 15 | else 16 | echo "GPG keys were not found in: ${temp_dir}" 17 | exit 1 18 | fi 19 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/audio-teardown/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | hostname, 3 | lib, 4 | pkgs, 5 | ... 6 | }: 7 | let 8 | installOn = [ 9 | "phasma" 10 | "vader" 11 | ]; 12 | name = builtins.baseNameOf (builtins.toString ./.); 13 | shellApplication = pkgs.writeShellApplication { 14 | inherit name; 15 | runtimeInputs = with pkgs; [ 16 | coreutils 17 | pipewire 18 | rhythmbox 19 | ]; 20 | text = builtins.readFile ./${name}.sh; 21 | }; 22 | in 23 | lib.mkIf (builtins.elem hostname installOn) { home.packages = with pkgs; [ shellApplication ]; } 24 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/get-rhythmbox-volume/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | hostname, 3 | lib, 4 | pkgs, 5 | ... 6 | }: 7 | let 8 | installOn = [ 9 | "phasma" 10 | "vader" 11 | ]; 12 | name = builtins.baseNameOf (builtins.toString ./.); 13 | shellApplication = pkgs.writeShellApplication { 14 | inherit name; 15 | runtimeInputs = with pkgs; [ 16 | bc 17 | coreutils 18 | rhythmbox 19 | ]; 20 | text = builtins.readFile ./${name}.sh; 21 | }; 22 | in 23 | lib.mkIf (builtins.elem hostname installOn) { home.packages = with pkgs; [ shellApplication ]; } 24 | -------------------------------------------------------------------------------- /nixos/_mixins/desktop/apps/blender/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | hostname, 4 | lib, 5 | pkgs, 6 | ... 7 | }: 8 | let 9 | installOn = [ 10 | "phasma" 11 | "sidious" 12 | "tanis" 13 | "vader" 14 | ]; 15 | hasCUDA = lib.elem "cudaPackages.cudatoolkit" config.environment.systemPackages; 16 | hasOpenCL = config.hardware.amdgpu.opencl.enable; 17 | in 18 | lib.mkIf (lib.elem hostname installOn) { 19 | environment.systemPackages = with pkgs; [ 20 | (blender.override { 21 | #cudaSupport = hasCUDA; 22 | hipSupport = hasOpenCL; 23 | }) 24 | ]; 25 | } 26 | -------------------------------------------------------------------------------- /.github/workflows/fh.yml: -------------------------------------------------------------------------------- 1 | name: Flake ❄️ Publish 📤 2 | on: 3 | workflow_dispatch: 4 | pull_request: 5 | push: 6 | branches: 7 | - main 8 | tags: 9 | - "v?[0-9]+.[0-9]+.[0-9]+*" 10 | 11 | concurrency: 12 | group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} 13 | cancel-in-progress: true 14 | 15 | jobs: 16 | DeterminateCI: 17 | name: Determinate CI 18 | uses: DeterminateSystems/ci/.github/workflows/workflow.yml@main 19 | permissions: 20 | id-token: write 21 | contents: read 22 | with: 23 | visibility: true 24 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/hypr-activity/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | pkgs, 5 | ... 6 | }: 7 | let 8 | name = builtins.baseNameOf (builtins.toString ./.); 9 | shellApplication = pkgs.writeShellApplication { 10 | inherit name; 11 | runtimeInputs = with pkgs; [ 12 | coreutils 13 | gnugrep 14 | gnused 15 | obs-cmd 16 | procps 17 | wlogout 18 | ]; 19 | text = builtins.readFile ./${name}.sh; 20 | }; 21 | in 22 | lib.mkIf config.wayland.windowManager.hyprland.enable { 23 | home.packages = with pkgs; [ shellApplication ]; 24 | } 25 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/hypr-session/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | pkgs, 5 | ... 6 | }: 7 | let 8 | name = builtins.baseNameOf (builtins.toString ./.); 9 | shellApplication = pkgs.writeShellApplication { 10 | inherit name; 11 | runtimeInputs = with pkgs; [ 12 | bluez 13 | coreutils 14 | gnused 15 | hyprlock 16 | playerctl 17 | procps 18 | ]; 19 | text = builtins.readFile ./${name}.sh; 20 | }; 21 | in 22 | lib.mkIf config.wayland.windowManager.hyprland.enable { 23 | home.packages = with pkgs; [ shellApplication ]; 24 | } 25 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/all-lights/all-lights.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set +e # Disable errexit 4 | set +u # Disable nounset 5 | 6 | STATE="${1}" 7 | HOST="$(hostnamectl hostname)" 8 | 9 | if [[ "${HOST}" != *"vader"* ]]; then 10 | exit 11 | fi 12 | 13 | case ${STATE} in 14 | on|ON|1) 15 | hue-lights on 16 | ;; 17 | off|OFF|0) 18 | key-lights off 19 | hue-lights off 20 | ;; 21 | streaming|default|coding) 22 | key-lights on 15 0 23 | hue-lights default 24 | ;; 25 | gaming) 26 | key-lights on 15 0 27 | hue-lights gaming 28 | ;; 29 | esac 30 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/restart-portals/restart-portals.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set +e # Disable errexit 4 | set +u # Disable nounset 5 | set +o pipefail # Disable pipefail 6 | 7 | case "$XDG_CURRENT_DESKTOP" in 8 | Hyprland) PORTALS=(xdg-desktop-portal-hyprland xdg-desktop-portal-gtk xdg-desktop-portal);; 9 | *) PORTALS=(xdg-desktop-portal-gtk xdg-desktop-portal);; 10 | esac; 11 | 12 | # Restart the desktop portal services in the correct order 13 | for ACTION in stop start; do 14 | for PORTAL in "${PORTALS[@]}"; do 15 | systemctl --user "$ACTION" "$PORTAL" 16 | done; 17 | done 18 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/audio-setup/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | hostname, 3 | lib, 4 | pkgs, 5 | ... 6 | }: 7 | let 8 | installOn = [ 9 | "phasma" 10 | "vader" 11 | ]; 12 | name = builtins.baseNameOf (builtins.toString ./.); 13 | shellApplication = pkgs.writeShellApplication { 14 | inherit name; 15 | runtimeInputs = with pkgs; [ 16 | coreutils 17 | pipewire 18 | playerctl 19 | procps 20 | rhythmbox 21 | ]; 22 | text = builtins.readFile ./${name}.sh; 23 | }; 24 | in 25 | lib.mkIf (builtins.elem hostname installOn) { home.packages = with pkgs; [ shellApplication ]; } 26 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/mic-loopback/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | hostname, 3 | lib, 4 | pkgs, 5 | ... 6 | }: 7 | let 8 | installOn = [ 9 | "phasma" 10 | "vader" 11 | ]; 12 | name = builtins.baseNameOf (builtins.toString ./.); 13 | shellApplication = pkgs.writeShellApplication { 14 | inherit name; 15 | runtimeInputs = with pkgs; [ 16 | coreutils 17 | gnugrep 18 | gnused 19 | pipewire 20 | procps 21 | pulsemixer 22 | ]; 23 | text = builtins.readFile ./${name}.sh; 24 | }; 25 | in 26 | lib.mkIf (builtins.elem hostname installOn) { home.packages = with pkgs; [ shellApplication ]; } 27 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/development/onboard.prompt.md: -------------------------------------------------------------------------------- 1 | --- 2 | agent: 'dilbert' 3 | description: 'Onboard 📥' 4 | --- 5 | ## Project Onboarding 6 | 7 | Review the attached handover document for this project. 8 | 9 | **Provide:** 10 | 1. Brief summary of your understanding 11 | 2. Questions about: 12 | - Ambiguous technical decisions 13 | - Missing context or rationale 14 | - Unclear implementation steps 15 | - Unfamiliar dependencies or tools 16 | - Priority or sequencing concerns 17 | 3. Concerns about proposed approaches 18 | 4. Recommended first feature and why 19 | 20 | Clarify now rather than discovering gaps mid-implementation. 21 | -------------------------------------------------------------------------------- /nixos/_mixins/scripts/install-system/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | isISO, 3 | inputs, 4 | pkgs, 5 | ... 6 | }: 7 | let 8 | install-system = pkgs.writeShellApplication { 9 | name = "install-system"; 10 | runtimeInputs = with pkgs; [ 11 | inputs.disko.packages.${pkgs.system}.default 12 | coreutils-full 13 | findutils 14 | gawk 15 | gnugrep 16 | git 17 | home-manager 18 | iproute2 19 | keyutils 20 | rsync 21 | util-linux 22 | ]; 23 | text = builtins.readFile ./install-system.sh; 24 | }; 25 | in 26 | { 27 | environment.systemPackages = with pkgs; lib.optionals isISO [ install-system ]; 28 | } 29 | -------------------------------------------------------------------------------- /nixos/revan/disks-home.nix: -------------------------------------------------------------------------------- 1 | # nvme0n1 512GB: NixOS 2 | # nvme1n1 1TB: Home 3 | _: { 4 | disko.devices = { 5 | disk = { 6 | nvme1 = { 7 | type = "disk"; 8 | device = "/dev/disk/by-id/nvme-Force_MP600_20378229000128554100"; 9 | content = { 10 | type = "gpt"; 11 | partitions = { 12 | home = { 13 | size = "100%"; 14 | content = { 15 | type = "filesystem"; 16 | format = "xfs"; 17 | mountpoint = "/home"; 18 | mountOptions = [ "defaults" ]; 19 | }; 20 | }; 21 | }; 22 | }; 23 | }; 24 | }; 25 | }; 26 | } 27 | -------------------------------------------------------------------------------- /nixos/_mixins/desktop/apps/steam/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | hostname, 4 | lib, 5 | pkgs, 6 | ... 7 | }: 8 | let 9 | installOn = [ 10 | "phasma" 11 | "vader" 12 | ]; 13 | in 14 | lib.mkIf (lib.elem hostname installOn) { 15 | # Only include mangohud if Steam is enabled 16 | environment.systemPackages = with pkgs; lib.mkIf config.programs.steam.enable [ mangohud ]; 17 | # https://nixos.wiki/wiki/Steam 18 | programs = { 19 | steam = { 20 | enable = true; 21 | remotePlay.openFirewall = true; # Open ports in the firewall for Steam Remote Play 22 | dedicatedServer.openFirewall = true; # Open ports in the firewall for Source Dedicated Server 23 | }; 24 | }; 25 | } 26 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/mcp-connector/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | curl 8 | fd 9 | gh 10 | git 11 | unstable.github-mcp-server 12 | gnused 13 | gnugrep 14 | jq 15 | unstable.mcp-nixos 16 | nodejs_24 17 | pm2 18 | pnpm 19 | python3 20 | tailscale 21 | unstable.terraform-mcp-server 22 | coreutils 23 | uv 24 | ]; 25 | text = builtins.readFile ./${name}.sh; 26 | }; 27 | in 28 | { 29 | home.packages = with pkgs; [ shellApplication ]; 30 | } 31 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/resolve-ready/resolve-ready.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set +e # Disable errexit 4 | set +u # Disable nounset 5 | set +o pipefail # Disable pipefail 6 | 7 | if [ -z "$1" ]; then 8 | echo "Usage: $(basename "$0") " 9 | exit 1 10 | fi 11 | 12 | if [ ! -e "$1" ]; then 13 | echo "File not found: $1" 14 | exit 1 15 | fi 16 | 17 | case "$2" in 18 | hq) PROFILE="dnxhr_hq";; # high quality 19 | sq) PROFILE="dnxhr_sq";; # standard quality 20 | *) PROFILE="dnxhr_lb";; # low bandwidth 21 | esac 22 | 23 | VIDEO_IN="$1" 24 | VIDEO_OUT="${VIDEO_IN%.*}.mov" 25 | 26 | # Covert input video to DNxHR LB 8-bit mov 27 | ffmpeg -i "$VIDEO_IN" -c:v dnxhd -profile:v "$PROFILE" -c:a alac -pix_fmt yuv422p "$VIDEO_OUT" 28 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/development/agent-create.prompt.md: -------------------------------------------------------------------------------- 1 | --- 2 | agent: 'rosey' 3 | description: 'Create Agent ✨' 4 | --- 5 | ## New Agent Creation 6 | 7 | Create a new agent prompt with the following details: 8 | 9 | **Agent Name:** ${input:agentName} 10 | **Role/Purpose:** ${input:rolePurpose} 11 | **Key Capabilities:** ${input:keyCapabilities} 12 | **Tool Requirements:** ${input:toolRequirements:None} 13 | **Output Format Needs:** ${input:outputFormat:Standard prose} 14 | **Target Word Count:** ${input:targetWords:400-600 words} 15 | 16 | Follow the standard agent structure. Focus on constraints and output format—these steer behaviour. 17 | 18 | Provide the complete agent prompt followed by the word count and brief rationale for key design decisions. 19 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/development/update-docs.prompt.md: -------------------------------------------------------------------------------- 1 | --- 2 | agent: 'velma' 3 | description: 'Update Docs 🔄' 4 | --- 5 | ## Documentation Update 6 | 7 | Update documentation in ${input:codebase:#codebase} to reflect recent changes. 8 | 9 | **Cover:** 10 | - What changed and why (features, APIs, interfaces) 11 | - Usage examples for new functionality 12 | - Configuration or setup changes 13 | - Breaking changes and migration steps (if any) 14 | - Known limitations or TODOs 15 | 16 | **Update:** 17 | - README if user-facing behaviour changed 18 | - Inline comments where logic changed significantly 19 | - Development guide if setup steps changed 20 | 21 | Concise but complete—future developers should understand what changed and how to work with it. 22 | -------------------------------------------------------------------------------- /.github/workflows/flake-checker.yml: -------------------------------------------------------------------------------- 1 | name: Flake ❄️ Checker ✅ 2 | 3 | on: 4 | schedule: 5 | # l33t o'clock 6 | - cron: '37 13 * * *' 7 | workflow_dispatch: 8 | 9 | jobs: 10 | flake-checker: 11 | name: Flake Checker 12 | runs-on: ubuntu-latest 13 | permissions: 14 | contents: read 15 | id-token: write 16 | steps: 17 | - uses: actions/checkout@v6 18 | - uses: wimpysworld/nothing-but-nix@main 19 | with: 20 | hatchet-protocol: 'holster' 21 | - uses: DeterminateSystems/determinate-nix-action@v3 22 | with: 23 | extra-conf: | 24 | lazy-trees = true 25 | - uses: DeterminateSystems/flakehub-cache-action@v2 26 | - uses: DeterminateSystems/flake-checker-action@v12 27 | -------------------------------------------------------------------------------- /nixos/_mixins/hardware/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | isInstall, 4 | isWorkstation, 5 | lib, 6 | ... 7 | }: 8 | let 9 | currentDir = ./.; # Represents the current directory 10 | isDirectoryAndNotTemplate = _name: type: type == "directory"; 11 | directories = lib.filterAttrs isDirectoryAndNotTemplate (builtins.readDir currentDir); 12 | importDirectory = name: import (currentDir + "/${name}"); 13 | in 14 | { 15 | imports = lib.mapAttrsToList (name: _: importDirectory name) directories; 16 | 17 | services = { 18 | fwupd.enable = lib.mkDefault isWorkstation; 19 | hardware.bolt.enable = isInstall; 20 | irqbalance = lib.mkIf (!config.services.qemuGuest.enable) { 21 | enable = true; 22 | }; 23 | smartd.enable = isInstall; 24 | }; 25 | } 26 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/pw-quantum/pw-quantum.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Obsolete as the pipewire configuration is now tuned in the NixOS configuration 3 | 4 | set +u 5 | 6 | # Use pw-top to monitor 7 | HOST="$(hostnamectl hostname)" 8 | case "${HOST}" in 9 | vader) QUANT=1024;; 10 | phasma) QUANT=1024;; #2048 originally but crackles since NixOS 23.11 11 | *) QUANT=2048;; 12 | esac 13 | 14 | 15 | #pw-metadata -n settings 0 clock.min-quantum $((${QUANT} / 2)) 16 | #pw-metadata -n settings 0 clock.quantum ${QUANT} 17 | #pw-metadata -n settings 0 clock.max-quantum $((${QUANT} * 2)) 18 | 19 | pw-metadata -n settings 0 clock.min-quantum "${QUANT}" 20 | pw-metadata -n settings 0 clock.quantum "${QUANT}" 21 | pw-metadata -n settings 0 clock.max-quantum "${QUANT}" 22 | -------------------------------------------------------------------------------- /darwin/_mixins/scripts/install-docker/install-docker.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | DOCKER_URL="https://desktop.docker.com/mac/stable/arm64/Docker.dmg" 4 | DMG_FILE="Docker.dmg" 5 | VOLUME_PATH="/Volumes/Docker" 6 | APPLICATIONS_DIR="/Applications" 7 | 8 | echo "Downloading Docker Desktop for Apple Silicon" 9 | curl -L "$DOCKER_URL" -o "$DMG_FILE" 10 | 11 | echo "Attaching $DMG_FILE..." 12 | hdiutil attach "$DMG_FILE" -nobrowse 13 | 14 | echo "Copying $DMG_FILE to $APPLICATIONS_DIR folder..." 15 | cp -R "$VOLUME_PATH/Docker.app" "$APPLICATIONS_DIR" 16 | 17 | echo "Ejecting $VOLUME_PATH..." 18 | hdiutil detach "$VOLUME_PATH" 19 | 20 | echo "Cleaning up $DMG_FILE..." 21 | rm "$DMG_FILE" 22 | 23 | echo "Docker has been installed. Please open Docker from the Applications folder to complete setup." 24 | -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/atuin.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | ... 4 | }: 5 | { 6 | # Creates an infinite recursion if you do `catppuccin.atuin.enable = config.programs.atuin;` 7 | catppuccin.atuin.enable = true; 8 | 9 | programs = { 10 | atuin = { 11 | enable = true; 12 | enableBashIntegration = config.programs.bash.enable; 13 | enableFishIntegration = config.programs.fish.enable; 14 | enableZshIntegration = config.programs.zsh.enable; 15 | flags = [ "--disable-up-arrow" ]; 16 | settings = { 17 | key_path = config.sops.secrets.atuin_key.path; 18 | update_check = false; 19 | }; 20 | }; 21 | }; 22 | 23 | sops = { 24 | secrets = { 25 | atuin_key.path = "${config.home.homeDirectory}/.local/share/atuin/key"; 26 | }; 27 | }; 28 | } 29 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/development/agent-optimise.prompt.md: -------------------------------------------------------------------------------- 1 | --- 2 | agent: 'rosey' 3 | description: 'Optimise Agent ⚡' 4 | --- 5 | ## Agent Prompt Optimisation 6 | 7 | Review and optimise this agent prompt for context efficiency while preserving its core purpose: 8 | 9 | ${input:agentPrompt} 10 | 11 | **Behaviours to Preserve:** ${input:preserveBehaviours:All core functionality} 12 | **Target Word Count:** ${input:targetWords:400-600 words (up to 700 if complex output formats)} 13 | 14 | Remove ineffective patterns (checklists, self-review instructions, verbose temporal breakdowns, redundant sections). Preserve output format templates and constraints—these are high-value. 15 | 16 | Provide: 17 | 1. The optimised agent prompt 18 | 2. Changelog table (removed/preserved with rationale) 19 | 3. Final word count 20 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/audio-setup/audio-setup.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set +o pipefail # Disable pipefail 4 | 5 | HOST=$(hostnamectl hostname) 6 | 7 | # Enable sidetone 8 | mic-loopback on 9 | mic-loopback set 120 10 | 11 | # Optimise PipeWire Quantum for OBS Studio; prevent audio crackling 12 | case "${HOST}" in 13 | vader) pw-metadata --name settings 0 clock.force-quantum 64;; 14 | phasma) pw-metadata --name settings 0 clock.force-quantum 64;; 15 | *) pw-metadata --name settings 0 clock.force-quantum 1024;; 16 | esac 17 | 18 | # Pause all audio players 19 | ciderctl pause || true 20 | playerctl -p Lodge_iPad pause || true 21 | 22 | rhythmbox-client --no-start --set-volume 0 23 | rhythmbox-client --no-start --pause 24 | rhythmbox-client --no-start --shuffle 25 | rhythmbox-client --no-start --repeat 26 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/make-luks-key/make-luks-key.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set +e # Disable errexit 4 | set +u # Disable nounset 5 | set +o pipefail # Disable pipefail 6 | 7 | if [ -z "${1}" ]; then 8 | echo "ERROR: No host specified." 9 | exit 1 10 | fi 11 | HOST="${1}" 12 | 13 | if [ -d "$HOME/Vaults/Secrets/luks" ]; then 14 | echo "Creating LUKS keys for $HOST..." 15 | if [ ! -e "$HOME/Vaults/Secrets/luks/$HOST.key" ]; then 16 | dd if=/dev/urandom of="$HOME/Vaults/Secrets/luks/$HOST.key" bs=4096 count=1 iflag=fullblock 17 | chmod 600 "$HOME/Vaults/Secrets/luks/$HOST.key" 18 | echo "LUKS key for $HOST created successfully." 19 | else 20 | echo "LUKS key for $HOST already exists." 21 | fi 22 | else 23 | echo "ERROR: The Secrets vault is not mounted." 24 | exit 1 25 | fi 26 | 27 | -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/pueue.nix: -------------------------------------------------------------------------------- 1 | { 2 | pkgs, 3 | ... 4 | }: 5 | let 6 | shellAliases = { 7 | pq = "${pkgs.pueue}/bin/pueue"; 8 | }; 9 | in 10 | { 11 | programs = { 12 | bash.shellAliases = shellAliases; 13 | fish.shellAliases = shellAliases; 14 | zsh.shellAliases = shellAliases; 15 | }; 16 | 17 | services = { 18 | pueue = { 19 | enable = true; 20 | # https://github.com/Nukesor/pueue/wiki/Configuration 21 | settings = { 22 | daemon = { 23 | default_parallel_tasks = 1; 24 | callback = "${pkgs.notify-desktop}/bin/notify-desktop \"Task {{ id }}\nCommand: {{ command }}\nPath: {{ path }}\nFinished with status '{{ result }}'\nTook: $(bc <<< \"{{end}} - {{start}}\") seconds\" --app-name=pueue"; 25 | }; 26 | }; 27 | }; 28 | }; 29 | } 30 | -------------------------------------------------------------------------------- /pkgs/libtsm/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | stdenv, 4 | fetchFromGitHub, 5 | libxkbcommon, 6 | pkg-config, 7 | cmake, 8 | }: 9 | 10 | stdenv.mkDerivation (finalAttrs: { 11 | pname = "libtsm"; 12 | version = "4.1.0"; 13 | 14 | src = fetchFromGitHub { 15 | owner = "Aetf"; 16 | repo = "libtsm"; 17 | rev = "v${finalAttrs.version}"; 18 | sha256 = "sha256-C/IfFSBrQc6QdUARPAqbtcI3y3Uy0XurUaqLTY0MfuY="; 19 | }; 20 | 21 | buildInputs = [ libxkbcommon ]; 22 | 23 | nativeBuildInputs = [ 24 | cmake 25 | pkg-config 26 | ]; 27 | 28 | meta = with lib; { 29 | description = "Terminal-emulator State Machine"; 30 | homepage = "https://www.freedesktop.org/wiki/Software/kmscon/libtsm/"; 31 | license = licenses.mit; 32 | maintainers = [ ]; 33 | platforms = platforms.linux; 34 | }; 35 | }) 36 | -------------------------------------------------------------------------------- /nixos/_mixins/hardware/print/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | desktop, 4 | isInstall, 5 | lib, 6 | pkgs, 7 | ... 8 | }: 9 | lib.mkIf isInstall { 10 | # Only enables auxilary printing support/packages if 11 | # config.services.printing.enable is true; the master control 12 | # - https://wiki.nixos.org/wiki/Printing 13 | programs.system-config-printer = lib.mkIf config.services.printing.enable { 14 | enable = if (desktop == "hyprland") then true else false; 15 | }; 16 | services = { 17 | printing = { 18 | enable = true; 19 | drivers = 20 | with pkgs; 21 | lib.optionals config.services.printing.enable [ 22 | gutenprint 23 | hplip 24 | ]; 25 | webInterface = false; 26 | }; 27 | system-config-printer.enable = config.services.printing.enable; 28 | }; 29 | } 30 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/nope/nope.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | # Exit on error, undefined variable, and error in pipes 4 | set -euo pipefail 5 | 6 | # Function to display usage 7 | function usage() { 8 | echo "Usage: $(basename "${0}") [args...]" 9 | echo "Launch a program detached from the current session" 10 | exit 1 11 | } 12 | 13 | # Check if the correct number of arguments is provided 14 | if [ $# -lt 1 ]; then 15 | usage 16 | fi 17 | 18 | # Get the program to execute from the first argument 19 | PROGRAM="${1}" 20 | shift 21 | 22 | # Check if the program is in the PATH 23 | if ! command -v "${PROGRAM}" &> /dev/null; then 24 | echo "${PROGRAM}: is not in the PATH." 25 | exit 1 26 | fi 27 | 28 | # Use setsid to run the program in a new session, fully detached 29 | setsid --fork "${PROGRAM}" "$@" &>/dev/null 30 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: flexiondotorg 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry 12 | polar: # Replace with a single Polar username 13 | buy_me_a_coffee: # Replace with a single Buy Me a Coffee username 14 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 15 | -------------------------------------------------------------------------------- /pkgs/obs-plugins/obs-rgb-levels.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | stdenv, 4 | fetchFromGitHub, 5 | cmake, 6 | obs-studio, 7 | }: 8 | 9 | stdenv.mkDerivation rec { 10 | pname = "obs-rgb-levels"; 11 | version = "1.0.2"; 12 | 13 | src = fetchFromGitHub { 14 | owner = "wimpysworld"; 15 | repo = "obs-rgb-levels"; 16 | rev = version; 17 | sha256 = "sha256-W79KUUUodlARlIMg/DaN+fxq/NEkp4k8MuEOHrJTbCk="; 18 | }; 19 | 20 | nativeBuildInputs = [ cmake ]; 21 | buildInputs = [ obs-studio ]; 22 | 23 | meta = with lib; { 24 | description = "A simple OBS Studio filter to adjust RGB levels."; 25 | homepage = "https://github.com/wimpysworld/obs-rgb-levels"; 26 | maintainers = with maintainers; [ flexiondotorg ]; 27 | license = licenses.gpl2Only; 28 | platforms = [ 29 | "x86_64-linux" 30 | "i686-linux" 31 | ]; 32 | }; 33 | } 34 | -------------------------------------------------------------------------------- /pkgs/obs-plugins/obs-dvd-screensaver.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | stdenv, 4 | fetchFromGitHub, 5 | cmake, 6 | obs-studio, 7 | }: 8 | 9 | stdenv.mkDerivation rec { 10 | pname = "obs-dvd-screensaver"; 11 | version = "0.0.2"; 12 | 13 | src = fetchFromGitHub { 14 | owner = "wimpysworld"; 15 | repo = "obs-dvd-screensaver"; 16 | rev = version; 17 | sha256 = "sha256-uZdFP3TULECzYNKtwaxFIcFYeFYdEoJ+ZKAqh9y9MEo="; 18 | }; 19 | 20 | nativeBuildInputs = [ cmake ]; 21 | buildInputs = [ obs-studio ]; 22 | 23 | meta = with lib; { 24 | description = "DVD screen saver for OBS Studio"; 25 | homepage = "https://github.com/wimpysworld/obs-dvd-screensaver"; 26 | maintainers = with maintainers; [ flexiondotorg ]; 27 | license = licenses.gpl2Only; 28 | platforms = [ 29 | "x86_64-linux" 30 | "i686-linux" 31 | ]; 32 | }; 33 | } 34 | -------------------------------------------------------------------------------- /pkgs/obs-plugins/pixel-art.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | stdenv, 4 | fetchFromGitHub, 5 | cmake, 6 | obs-studio, 7 | }: 8 | 9 | stdenv.mkDerivation rec { 10 | pname = "pixel-art"; 11 | version = "0.0.4"; 12 | 13 | src = fetchFromGitHub { 14 | owner = "dspstanky"; 15 | repo = "pixel-art"; 16 | rev = version; 17 | sha256 = "sha256-7o63e7nK/JsK2SQg0AzUYcc4ZsPx0lt8gtAQm8Zy+9w="; 18 | }; 19 | 20 | nativeBuildInputs = [ cmake ]; 21 | buildInputs = [ obs-studio ]; 22 | 23 | meta = with lib; { 24 | description = "An OBS Plugin that can be used to create retro-inspired pixel art visuals."; 25 | homepage = "https://github.com/dspstanky/pixel-art"; 26 | maintainers = with maintainers; [ flexiondotorg ]; 27 | license = licenses.gpl2Only; 28 | platforms = [ 29 | "x86_64-linux" 30 | "i686-linux" 31 | ]; 32 | }; 33 | } 34 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/development/create-conventional-commit.prompt.md: -------------------------------------------------------------------------------- 1 | --- 2 | agent: 'linus' 3 | description: 'Creates a Conventional Commits 1.0.0 compliant commit message from recent implementation changes' 4 | --- 5 | Write a conventional commit message summarising the final outcome of what we've just been working on, focus on the staged changes in the git repository if there are any. 6 | 7 | Please create a commit message that: 8 | - Follows Conventional Commits 1.0.0 specification exactly 9 | - Uses appropriate type (feat, fix, build, chore, ci, docs, perf, refactor, etc.) 10 | - Includes proper scope if applicable 11 | - Has clear, imperative mood description under 72 characters 12 | - Includes body with bullet points if needed 13 | - Adds footers for breaking changes or issue references if relevant 14 | 15 | Output only the commit message, ready for `git commit -m`. 16 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/waybar/bluetooth-toggle.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set +e # Disable errexit 4 | set +u # Disable nounset 5 | set +o pipefail # Disable pipefail 6 | 7 | HOSTNAME=$(hostname -s) 8 | state=$(bluetoothctl show | grep 'Powered:' | awk '{ print $2 }') 9 | if [[ $state == 'yes' ]]; then 10 | bluetoothctl discoverable off 11 | bluetoothctl power off 12 | notify-desktop "Bluetooth disconnected" "Your Bluetooth devices have been disconnected." --urgency=low --app-name="Bluetooth Toggle" --icon=bluetooth-disabled 13 | else 14 | bluetoothctl power on 15 | bluetoothctl discoverable on 16 | if [ "$HOSTNAME" == "phasma" ]; then 17 | bluetoothctl connect E4:50:EB:7D:86:22 18 | fi 19 | notify-desktop "Bluetooth connected" "Your Bluetooth devices have been connected." --urgency=low --app-name="Bluetooth Toggle" --icon=bluetooth-active 20 | fi 21 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/waybar/eyecandy-toggle.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | HYPR_ANIMATIONS=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}') 4 | if [ "$HYPR_ANIMATIONS" -eq 1 ] ; then 5 | hyprctl --batch "\ 6 | keyword animations:enabled 0;\ 7 | keyword decoration:drop_shadow 0;\ 8 | keyword decoration:blur:enabled 0;\ 9 | keyword layerrule:blur:enabled 0" 10 | # Disable opacity on all clients 11 | hyprctl clients -j | jq -r ".[].address" | xargs -I {} hyprctl setprop address:{} forceopaque 1 lock 12 | notify-desktop "🍬🛑 Eye candy disabled" "Hyprland animations, shadows and blur effects have been disabled." --urgency=low --app-name="Hypr Candy" 13 | else 14 | hyprctl reload 15 | notify-desktop "🍬👀 Eye candy enabled" "Hyprland animations, shadows and blur effects have been restored." --urgency=low --app-name="Hypr Candy" 16 | fi 17 | -------------------------------------------------------------------------------- /pkgs/kmscon/auto-kbd-layout.patch: -------------------------------------------------------------------------------- 1 | From fb7ea8fa7ab7bf09c407291f6764b3bbc1bde36f Mon Sep 17 00:00:00 2001 2 | From: Martin Wimpress <304639+flexiondotorg@users.noreply.github.com> 3 | Date: Sun, 5 Oct 2025 11:16:11 +0100 4 | Subject: [PATCH] fix: update systemd dependencies to auto-configure keyboard 5 | layout 6 | 7 | --- 8 | docs/kmsconvt@.service.in | 2 ++ 9 | 1 file changed, 2 insertions(+) 10 | 11 | diff --git a/docs/kmsconvt@.service.in b/docs/kmsconvt@.service.in 12 | index a496e26..70cd64a 100644 13 | --- a/docs/kmsconvt@.service.in 14 | +++ b/docs/kmsconvt@.service.in 15 | @@ -31,6 +31,8 @@ Documentation=man:kmscon(1) 16 | After=systemd-user-sessions.service 17 | After=plymouth-quit-wait.service 18 | After=rc-local.service 19 | +After=dbus.service 20 | +After=systemd-localed.service 21 | Before=getty.target 22 | Conflicts=getty@%i.service 23 | OnFailure=getty@%i.service 24 | -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/octicons/file-symlink-directory-16.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /pkgs/fonts/zx-spectrum-7-font/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | fetchzip, 3 | lib, 4 | stdenvNoCC, 5 | }: 6 | 7 | stdenvNoCC.mkDerivation rec { 8 | pname = "zx_spectrum_7"; 9 | version = "1.2"; 10 | 11 | src = fetchzip { 12 | url = "https://dl.dafont.com/dl/?f=${pname}"; 13 | hash = "sha256-TqFDh/kmlqL9350Gp/VGUrZNfHifh8uOR6qLCRnI4KM="; 14 | extension = "zip"; 15 | stripRoot = false; 16 | }; 17 | 18 | installPhase = '' 19 | install -m444 -Dt $out/share/fonts/truetype/${pname} *.ttf 20 | ''; 21 | 22 | meta = { 23 | description = "ZX Spectrum-7 Font"; 24 | longdescription = "ZX Spectrum font."; 25 | homepage = "https://www.dafont.com/${pname}.font"; 26 | license = lib.licenses.free; 27 | maintainers = with lib.maintainers; [ flexiondotorg ]; 28 | platforms = lib.platforms.all; 29 | sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /pkgs/fonts/digital-7-font/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | fetchzip, 3 | lib, 4 | stdenvNoCC, 5 | }: 6 | 7 | stdenvNoCC.mkDerivation rec { 8 | pname = "digital_7"; 9 | version = "1.020"; 10 | 11 | src = fetchzip { 12 | url = "https://dl.dafont.com/dl/?f=${pname}"; 13 | hash = "sha256-gufM+ofcUvCnc7vjBH3lA7IvcEBCd9xetZwFy3H0SHY="; 14 | extension = "zip"; 15 | stripRoot = false; 16 | }; 17 | 18 | installPhase = '' 19 | install -m444 -Dt $out/share/fonts/truetype/${pname} *.ttf 20 | ''; 21 | 22 | meta = { 23 | description = "Digital 7 Font"; 24 | longdescription = "Digital 7, a seven-segment font."; 25 | homepage = "https://www.dafont.com/${pname}.font"; 26 | license = lib.licenses.free; 27 | maintainers = with lib.maintainers; [ flexiondotorg ]; 28 | platforms = lib.platforms.all; 29 | sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/mic-mute/mic-mute.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set +u # Disable nounset 4 | set +o pipefail # Disable pipefail 5 | 6 | case "${1}" in 7 | status) 8 | #wpctl get-volume @DEFAULT_AUDIO_SOURCE@ | grep -woi "muted" 9 | STATE=$(pactl get-source-mute @DEFAULT_SOURCE@ | cut -d':' -f 2 | sed 's/ //g' | sed 's/yes/muted/' | sed 's/no/on/') 10 | echo "${STATE^^}" 11 | ;; 12 | off|on|toggle) 13 | pactl set-source-mute @DEFAULT_SOURCE@ "${1}" 14 | #wpctl set-mute @DEFAULT_AUDIO_SOURCE@ "${1}" 15 | STATE=$("${0}" status) 16 | ICON="emblem-unreadable" 17 | if [ "${STATE}" == "ON" ]; then 18 | ICON="audio-input-microphone" 19 | fi 20 | notify-desktop "Microphone Status" "Microphone is ${STATE}" --icon="${ICON}" >/dev/null 21 | ;; 22 | *) echo "Usage: $0 {status|toggle}";; 23 | esac 24 | -------------------------------------------------------------------------------- /pkgs/obs-plugins/obs-aitum-multistream.diff: -------------------------------------------------------------------------------- 1 | diff --color -urpN obs-aitum-multistream.bak/file-updater.c obs-aitum-multistream/file-updater.c 2 | --- obs-aitum-multistream.bak/file-updater.c 2025-07-18 17:41:35.605779462 -0400 3 | +++ obs-aitum-multistream/file-updater.c 2025-07-18 17:45:29.485046420 -0400 4 | @@ -83,8 +83,8 @@ static bool do_http_request(struct updat 5 | curl_easy_setopt(info->curl, CURLOPT_ERRORBUFFER, info->error); 6 | curl_easy_setopt(info->curl, CURLOPT_WRITEFUNCTION, http_write); 7 | curl_easy_setopt(info->curl, CURLOPT_WRITEDATA, info); 8 | - curl_easy_setopt(info->curl, CURLOPT_FAILONERROR, true); 9 | - curl_easy_setopt(info->curl, CURLOPT_NOSIGNAL, 1); 10 | + curl_easy_setopt(info->curl, CURLOPT_FAILONERROR, 1L); 11 | + curl_easy_setopt(info->curl, CURLOPT_NOSIGNAL, 1L); 12 | curl_easy_setopt(info->curl, CURLOPT_ACCEPT_ENCODING, ""); 13 | curl_obs_set_revoke_setting(info->curl); 14 | 15 | -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/octicons/analyze_octicons: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # coding=utf8 3 | 4 | # This extracts the names and source and destination codepoints 5 | # of the old octicons font file to keep their codepoints stable 6 | # 7 | # You do not need to redo it, the result is in the repo 8 | # 9 | # Usage: 10 | # fontforge analyze_octicons > mapping 11 | 12 | import fontforge 13 | 14 | octi_orig = "octicons.ttf" 15 | current_cp = 0xF400 16 | 17 | print('# Examining {}'.format(octi_orig)) 18 | 19 | font = fontforge.open(octi_orig) 20 | for glyph in font.glyphs('encoding'): 21 | point = glyph.unicode 22 | if point < 0: 23 | continue 24 | desti = glyph.unicode 25 | if point < 0xF000: 26 | desti = point 27 | else: 28 | desti = current_cp 29 | current_cp += 1 30 | print("{:X} {:X} {}".format(point, desti, glyph.glyphname)) 31 | 32 | font.close() 33 | -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/eza.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | pkgs, 5 | ... 6 | }: 7 | let 8 | shellAliases = { 9 | tree = "${pkgs.eza}/bin/eza --tree"; 10 | }; 11 | in 12 | { 13 | programs = { 14 | bash.shellAliases = lib.mkIf config.programs.eza.enable shellAliases; 15 | eza = { 16 | enable = true; 17 | enableBashIntegration = config.programs.bash.enable; 18 | enableFishIntegration = config.programs.fish.enable; 19 | enableZshIntegration = config.programs.zsh.enable; 20 | extraOptions = [ 21 | "--color=always" 22 | "--group-directories-first" 23 | "--header" 24 | "--time-style=long-iso" 25 | ]; 26 | git = true; 27 | icons = "auto"; 28 | }; 29 | fish.shellAliases = lib.mkIf config.programs.eza.enable shellAliases; 30 | zsh.shellAliases = lib.mkIf config.programs.eza.enable shellAliases; 31 | }; 32 | 33 | } 34 | -------------------------------------------------------------------------------- /nixos/_mixins/network/ssh/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | isInstall, 3 | isLaptop, 4 | lib, 5 | pkgs, 6 | ... 7 | }: 8 | let 9 | # Don't open the firewall for SSH on laptops; Tailscale will handle it. 10 | openSSHFirewall = if (isInstall && isLaptop) then false else true; 11 | in 12 | { 13 | environment = lib.mkIf isInstall { systemPackages = with pkgs; [ ssh-to-age ]; }; 14 | programs = { 15 | ssh.startAgent = true; 16 | }; 17 | services = { 18 | openssh = { 19 | enable = true; 20 | openFirewall = openSSHFirewall; 21 | settings = { 22 | PasswordAuthentication = false; 23 | }; 24 | }; 25 | sshguard = { 26 | enable = isInstall; 27 | whitelist = [ 28 | "10.10.10.0/24" 29 | "10.10.30.0/24" 30 | "10.10.40.0/24" 31 | "10.10.50.0/24" 32 | "62.31.16.153/29" 33 | "80.209.186.64/28" 34 | ]; 35 | }; 36 | }; 37 | } 38 | -------------------------------------------------------------------------------- /nixos/maul/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | inputs, 3 | ... 4 | }: 5 | { 6 | imports = [ 7 | inputs.nixos-hardware.nixosModules.common-cpu-amd 8 | inputs.nixos-hardware.nixosModules.common-gpu-nvidia 9 | inputs.nixos-hardware.nixosModules.common-pc 10 | inputs.nixos-hardware.nixosModules.common-pc-ssd 11 | ./disks.nix 12 | ]; 13 | 14 | boot = { 15 | initrd = { 16 | availableKernelModules = [ 17 | "nvme" 18 | "ahci" 19 | "xhci_pci" 20 | "usbhid" 21 | "uas" 22 | "usb_storage" 23 | "sd_mod" 24 | ]; 25 | kernelModules = [ 26 | "kvm-amd" 27 | "nvidia" 28 | ]; 29 | }; 30 | }; 31 | 32 | hardware = { 33 | nvidia = { 34 | open = false; 35 | prime.offload.enable = false; 36 | }; 37 | }; 38 | 39 | services = { 40 | xserver.videoDrivers = [ 41 | "nvidia" 42 | ]; 43 | }; 44 | } 45 | -------------------------------------------------------------------------------- /pkgs/obs-plugins/obs-markdown.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | stdenv, 4 | fetchFromGitHub, 5 | cmake, 6 | obs-studio, 7 | }: 8 | 9 | stdenv.mkDerivation rec { 10 | pname = "obs-markdown"; 11 | version = "0.2.7"; 12 | 13 | src = fetchFromGitHub { 14 | owner = "exeldro"; 15 | repo = "obs-markdown"; 16 | rev = version; 17 | sha256 = "sha256-5ajX/cEa0n12Putx1k3ctl1v9wRzJRhyJNDlmjSMbeU="; 18 | }; 19 | 20 | nativeBuildInputs = [ cmake ]; 21 | buildInputs = [ obs-studio ]; 22 | 23 | postInstall = '' 24 | rm -rf $out/obs-plugins $out/data 25 | ''; 26 | 27 | meta = with lib; { 28 | description = "Plugin for OBS Studio to add Markdown sources"; 29 | homepage = "https://github.com/exeldro/obs-markdown"; 30 | maintainers = with maintainers; [ flexiondotorg ]; 31 | license = licenses.gpl2Only; 32 | platforms = [ 33 | "x86_64-linux" 34 | "i686-linux" 35 | ]; 36 | }; 37 | } 38 | -------------------------------------------------------------------------------- /pkgs/fonts/commodore-64-pixelized-font/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | fetchzip, 3 | lib, 4 | stdenvNoCC, 5 | }: 6 | 7 | stdenvNoCC.mkDerivation rec { 8 | pname = "commodore_64_pixelized"; 9 | version = "1.2"; 10 | 11 | src = fetchzip { 12 | url = "https://dl.dafont.com/dl/?f=${pname}"; 13 | hash = "sha256-DAnToB/EIzCF45+ebOu7cq3cpsQg5j4xxnVHTOMapBA="; 14 | extension = "zip"; 15 | stripRoot = false; 16 | }; 17 | 18 | installPhase = '' 19 | install -m444 -Dt $out/share/fonts/truetype/${pname} *.ttf 20 | ''; 21 | 22 | meta = { 23 | description = "Commodore 64 Pixelized Font"; 24 | longdescription = "The Commodore 64 font."; 25 | homepage = "https://www.dafont.com/${pname}.font"; 26 | license = lib.licenses.free; 27 | maintainers = with lib.maintainers; [ flexiondotorg ]; 28 | platforms = lib.platforms.all; 29 | sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /pkgs/fonts/impact-label-font/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | fetchzip, 3 | lib, 4 | stdenvNoCC, 5 | }: 6 | 7 | stdenvNoCC.mkDerivation rec { 8 | pname = "impact_label"; 9 | version = "2.000"; 10 | 11 | src = fetchzip { 12 | url = "https://dl.dafont.com/dl/?f=${pname}"; 13 | hash = "sha256-zIUPsEpd+vJZNcgvSbEIF1efO0GCXyVHK0w07DQz7Ug="; 14 | extension = "zip"; 15 | stripRoot = false; 16 | }; 17 | 18 | installPhase = '' 19 | install -m444 -Dt $out/share/fonts/truetype/${pname} *.ttf 20 | ''; 21 | 22 | meta = { 23 | description = "Impact Label Font"; 24 | longdescription = "Label everything. Just like your Dad used to in the 1970's!"; 25 | homepage = "https://www.dafont.com/${pname}.font"; 26 | license = lib.licenses.free; 27 | maintainers = with lib.maintainers; [ flexiondotorg ]; 28 | platforms = lib.platforms.all; 29 | sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; 30 | }; 31 | } 32 | -------------------------------------------------------------------------------- /pkgs/fonts/poppins-font/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | fetchzip, 3 | lib, 4 | stdenvNoCC, 5 | }: 6 | 7 | stdenvNoCC.mkDerivation rec { 8 | pname = "poppins"; 9 | version = "4.003"; 10 | 11 | src = fetchzip { 12 | url = "https://github.com/itfoundry/Poppins/raw/master/products/Poppins-${version}-GoogleFonts-TTF.zip"; 13 | hash = "sha256-7rzn20dUlrOUQCm+nXneWGIU+N+Gfy0FvqZw+b4uoVI="; 14 | stripRoot = false; 15 | }; 16 | 17 | installPhase = '' 18 | install -m444 -Dt $out/share/fonts/truetype/${pname} *.ttf 19 | ''; 20 | 21 | meta = { 22 | description = "Poppins Font"; 23 | longdescription = "Poppins, a Devanagari + Latin family for Google Fonts."; 24 | homepage = "https://github.com/itfoundry/Poppins"; 25 | license = lib.licenses.ofl; 26 | maintainers = with lib.maintainers; [ flexiondotorg ]; 27 | platforms = lib.platforms.all; 28 | sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; 29 | }; 30 | } 31 | -------------------------------------------------------------------------------- /nixos/_mixins/users/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | pkgs, 4 | username, 5 | ... 6 | }: 7 | { 8 | imports = [ ./root ] ++ lib.optional (builtins.pathExists (./. + "/${username}")) ./${username}; 9 | environment.localBinInPath = true; 10 | users.users.${username} = { 11 | extraGroups = [ 12 | "input" 13 | "users" 14 | "wheel" 15 | ]; 16 | homeMode = "0755"; 17 | isNormalUser = true; 18 | openssh.authorizedKeys.keys = [ 19 | "ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAywaYwPN4LVbPqkc+kUc7ZVazPBDy4LCAud5iGJdr7g9CwLYoudNjXt/98Oam5lK7ai6QPItK6ECj5+33x/iFpWb3Urr9SqMc/tH5dU1b9N/9yWRhE2WnfcvuI0ms6AXma8QGp1pj/DoLryPVQgXvQlglHaDIL1qdRWFqXUO2u30X5tWtDdOoR02UyAtYBttou4K0rG7LF9rRaoLYP9iCBLxkMJbCIznPD/pIYa6Fl8V8/OVsxYiFy7l5U0RZ7gkzJv8iNz+GG8vw2NX4oIJfAR4oIk3INUvYrKvI2NSMSw5sry+z818fD1hK+soYLQ4VZ4hHRHcf4WV4EeVa5ARxdw== Martin Wimpress" 20 | ]; 21 | packages = [ pkgs.home-manager ]; 22 | shell = pkgs.fish; 23 | }; 24 | } 25 | -------------------------------------------------------------------------------- /pkgs/fonts/fixedsys-core-font/default.nix: -------------------------------------------------------------------------------- 1 | { lib, stdenvNoCC }: 2 | 3 | stdenvNoCC.mkDerivation rec { 4 | pname = "fixedsys_core"; 5 | version = "0.6"; 6 | 7 | src = lib.cleanSource ./fonts; 8 | 9 | installPhase = '' 10 | install -m444 -Dt $out/share/fonts/truetype/${pname} *ttf 11 | ''; 12 | 13 | meta = { 14 | description = "Fixedsys Core Font"; 15 | longdescription = '' 16 | Fixedsys Core is a love letter to the Fixedsys Excelsior font, an attempt 17 | to reinvent the feel and look of a truly unique font for modern 18 | high-resolution displays. 19 | 20 | This version is patched to include Nerd Font and Braille glyphs. 21 | ''; 22 | homepage = "https://github.com/delinx/Fixedsys-Core"; 23 | license = lib.licenses.free; 24 | maintainers = with lib.maintainers; [ flexiondotorg ]; 25 | platforms = lib.platforms.all; 26 | sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; 27 | }; 28 | } 29 | -------------------------------------------------------------------------------- /pkgs/kmscon/sandbox.patch: -------------------------------------------------------------------------------- 1 | From ebf0f4f003094301491afa7347ff9168c24a8e81 Mon Sep 17 00:00:00 2001 2 | From: Martin Wimpress <304639+flexiondotorg@users.noreply.github.com> 3 | Date: Sun, 5 Oct 2025 11:06:08 +0100 4 | Subject: [PATCH] fix: compatibility patch for NixOS 5 | 6 | Generate system units where they should be (nix store) instead of /etc/systemd/system 7 | --- 8 | meson.build | 2 +- 9 | 1 file changed, 1 insertion(+), 1 deletion(-) 10 | 11 | diff --git a/meson.build b/meson.build 12 | index 63f4944..d830ae7 100644 13 | --- a/meson.build 14 | +++ b/meson.build 15 | @@ -39,7 +39,7 @@ mandir = get_option('mandir') 16 | moduledir = get_option('libdir') / meson.project_name() 17 | 18 | systemd_deps = dependency('systemd', required: false) 19 | -systemdsystemunitdir = systemd_deps.get_variable('systemdsystemunitdir', default_value: 'lib/systemd/system') 20 | +systemdsystemunitdir = get_option('libdir') / 'systemd' 21 | 22 | # 23 | # Required dependencies 24 | -------------------------------------------------------------------------------- /darwin/_mixins/features/network/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | hostname, 3 | ... 4 | }: 5 | { 6 | networking = { 7 | hostName = hostname; 8 | computerName = hostname; 9 | # extraHosts = '' 10 | # 127.0.0.3 k3d-k3d.localhost 11 | # 10.10.10.1 router 12 | # 10.10.10.2 re550 13 | # 10.10.10.3 tv-living-room 14 | # 10.10.10.4 tv-main-bedroom 15 | # 10.10.10.6 echo-kitchen 16 | # 10.10.10.7 echo-office 17 | # 10.10.10.8 echo-agatha 18 | # 10.10.10.12 Vonage-HT801 vonage 19 | # 10.10.10.13 LaMetric-LM2144 lametric 20 | # 10.10.10.15 chimeraos 21 | # 10.10.10.19 Hue-Bridge-Office hue-bridge-office 22 | # 10.10.10.20 Elgato_Key_Light_Air_DAD4 keylight-left key-left 23 | # 10.10.10.21 Elgato_Key_Light_Air_EEE9 keylight-right key-right 24 | # 10.10.10.22 moodlamp 25 | # 10.10.10.23 small-lamp-bulb 26 | # ''; 27 | }; 28 | } 29 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/waybar/tailscale-check.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | TS_JSON="$XDG_RUNTIME_DIR/tailscale-status.json" 4 | if tailscale status --json > "$TS_JSON"; then 5 | version="$(jq -r '.Version' "$TS_JSON")" 6 | if [[ "$(jq -r '.BackendState' "$TS_JSON")" == "Running" ]]; then 7 | dnsname="$(jq -r '.Self.DNSName' "$TS_JSON")" 8 | if [[ "$(jq -r '.ExitNodeStatus.Online' "$TS_JSON")" == "true" ]]; then 9 | exitnode="$(jq -r '.ExitNodeStatus.TailscaleIPs[0]' "$TS_JSON")" 10 | echo -en "󰦝\n󰖂 Tailscale (v$version) connected via $exitnode as $dnsname\nexitnode" 11 | else 12 | tailnet="$(jq -r '.CurrentTailnet.Name' "$TS_JSON")" 13 | echo -en "󰴳\n󰖂 Tailscale (v$version) connected to $tailnet as $dnsname\nconnected" 14 | fi 15 | else 16 | echo -en "󰦞\n󰖂 Tailscale (v$version) is disconnected\ndisconnected" 17 | fi 18 | else 19 | echo -en "󰻌\n󰖂 Tailscale is not available\ndisconnected" 20 | fi 21 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/backup-obs/backup-obs.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set +e # Disable errexit 4 | set +u # Disable nounset 5 | set +o pipefail # Disable pipefail 6 | 7 | HOST="$(hostnamectl hostname)" 8 | STAMP="$(date +%y%m%d-%H%M)" 9 | echo "Backing up OBS Studio" 10 | IFS=$'\n' 11 | 12 | echo -e " - ${OBS}:\tBacking up ${STAMP}-${HOST}" 13 | if [ -d "${HOME}/Studio/OBS/config" ]; then 14 | mkdir -p "${HOME}/Studio/Backups/OBS/${STAMP}-${HOST}/system" 15 | rsync -a "${HOME}/Studio/OBS/config/" "${HOME}/Studio/Backups/OBS/${STAMP}-${HOST}/system/config/" 16 | fi 17 | 18 | # shellcheck disable=2045 19 | for OBS in $(ls -1 "${HOME}/Studio/OBS/"); do 20 | if [ -x "${HOME}/Studio/OBS/${OBS}/bin/64bit/obs" ] && [ -d "${HOME}/Studio/OBS/${OBS}/config/" ]; then 21 | mkdir -p "${HOME}/Studio/Backups/OBS/${STAMP}-${HOST}/${OBS}" 22 | rsync -a "${HOME}/Studio/OBS/${OBS}/config/" "${HOME}/Studio/Backups/OBS/${STAMP}-${HOST}/${OBS}/config/" 23 | fi 24 | done 25 | -------------------------------------------------------------------------------- /nixos/_mixins/network/nullmailer/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | isInstall, 4 | lib, 5 | username, 6 | ... 7 | }: 8 | let 9 | domain = "wimpys.world"; 10 | in 11 | lib.mkIf isInstall { 12 | environment = { 13 | shellAliases = { 14 | mail-log = "journalctl _SYSTEMD_UNIT=nullmailer.service"; 15 | }; 16 | }; 17 | services.nullmailer = { 18 | config = { 19 | me = "${domain}"; 20 | defaultdomain = "${domain}"; 21 | allmailfrom = "${username}@${domain}"; 22 | adminaddr = "${username}@${domain}"; 23 | }; 24 | enable = true; 25 | remotesFile = config.sops.secrets.mailjet.path; 26 | }; 27 | sops = { 28 | secrets = { 29 | mailjet = { 30 | group = config.services.nullmailer.group; 31 | mode = "0600"; 32 | owner = config.services.nullmailer.user; 33 | path = "/etc/nullmailer/mailjet"; 34 | sopsFile = ../../../../secrets/mailjet.yaml; 35 | }; 36 | }; 37 | }; 38 | } 39 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/reset-ssl2/reset-ssl2.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | VENDOR="31e9" 4 | PRODUCT="0001" 5 | HOST=$(hostnamectl hostname) 6 | case "${HOST}" in 7 | phasma|vader) PRODUCT="0002";; 8 | *) echo "This script is only meant to be run on phasma or vader";; 9 | esac 10 | 11 | sudo true 12 | # If usb-reset is installed, use it 13 | if [ -x "$(command -v usb-reset)" ]; then 14 | sudo usb-reset "${VENDOR}":"${PRODUCT}" 15 | elif [ -x "$(command -v usbreset)" ]; then 16 | # Get the bus and device number of the SSL 2 17 | SSL2="$(lsusb -d ${VENDOR}: | grep "SSL 2")" 18 | #Bus 001 Device 007: ID 31e9:0001 Solid State Logic SSL 2 19 | #Bus 001 Device 009: ID 31e9:0002 Solid State Logic SSL 2+ 20 | BUS="$(echo "${SSL2}" | cut -d' ' -f 2)" 21 | DEV="$(echo "${SSL2}" | cut -d' ' -f 4 | cut -d':' -f 1)" 22 | sudo usbreset "${BUS}"/"${DEV}" 23 | else 24 | echo "ERROR! usb-reset or usbreset is not installed. Please install it." 25 | exit 1 26 | fi 27 | -------------------------------------------------------------------------------- /pkgs/obs-plugins/obs-browser-transition.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | stdenv, 4 | fetchFromGitHub, 5 | cmake, 6 | obs-studio, 7 | }: 8 | 9 | stdenv.mkDerivation rec { 10 | pname = "obs-browser-transition"; 11 | version = "0.1.3"; 12 | 13 | src = fetchFromGitHub { 14 | owner = "exeldro"; 15 | repo = "obs-browser-transition"; 16 | rev = version; 17 | sha256 = "sha256-m5UDqnqipkybXAZqS7c2Sj/mJKrDBkXElyc0I+c1BmE="; 18 | }; 19 | 20 | nativeBuildInputs = [ cmake ]; 21 | buildInputs = [ obs-studio ]; 22 | 23 | postInstall = '' 24 | rm -rf $out/obs-plugins $out/data 25 | ''; 26 | 27 | meta = with lib; { 28 | description = "Plugin for OBS Studio to show a browser source during scene transition"; 29 | homepage = "https://github.com/exeldro/obs-browser-transition"; 30 | maintainers = with maintainers; [ flexiondotorg ]; 31 | license = licenses.gpl2Only; 32 | platforms = [ 33 | "x86_64-linux" 34 | "i686-linux" 35 | ]; 36 | }; 37 | } 38 | -------------------------------------------------------------------------------- /.github/workflows/lock-updater.yml: -------------------------------------------------------------------------------- 1 | name: Flake ❄️ Lock 🔒️ Updater ✨ 2 | 3 | on: 4 | schedule: 5 | # Pi o'clock 6 | - cron: '14 3 * * *' 7 | workflow_dispatch: 8 | 9 | jobs: 10 | lock-updater: 11 | name: Flake Lock Updater 12 | runs-on: ubuntu-latest 13 | permissions: 14 | contents: write 15 | id-token: write 16 | pull-requests: write 17 | steps: 18 | - uses: actions/checkout@v6 19 | - uses: wimpysworld/nothing-but-nix@main 20 | with: 21 | hatchet-protocol: 'holster' 22 | - uses: DeterminateSystems/determinate-nix-action@v3 23 | with: 24 | extra-conf: | 25 | lazy-trees = true 26 | - uses: DeterminateSystems/flakehub-cache-action@v2 27 | - uses: DeterminateSystems/update-flake-lock@v27 28 | with: 29 | pr-title: "chore: update flake.lock" 30 | # Labels to be set on the PR 31 | pr-labels: | 32 | dependencies 33 | automated 34 | -------------------------------------------------------------------------------- /nixos/_mixins/hardware/scan/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | desktop, 4 | isWorkstation, 5 | isInstall, 6 | lib, 7 | pkgs, 8 | username, 9 | ... 10 | }: 11 | let 12 | scanningApp = if (desktop == "plasma") then pkgs.kdePackages.skanpage else pkgs.simple-scan; 13 | in 14 | lib.mkIf isInstall { 15 | # Only enables auxilary scanning support/packages if 16 | # config.hardware.sane.enable is true; the master control 17 | # - https://wiki.nixos.org/wiki/Scanners 18 | environment = lib.mkIf (config.hardware.sane.enable && isWorkstation) { 19 | systemPackages = [ scanningApp ]; 20 | }; 21 | 22 | hardware.sane = { 23 | # Hide duplicate backends 24 | #disabledDefaultBackends = [ "escl" ]; 25 | enable = true; 26 | #extraBackends = with pkgs; [ hplipWithPlugin ]; 27 | extraBackends = with pkgs; lib.mkIf config.hardware.sane.enable [ sane-airscan ]; 28 | }; 29 | 30 | users.users.${username}.extraGroups = lib.optionals config.hardware.sane.enable [ "scanner" ]; 31 | } 32 | -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/octicons/file-symlink-directory-24.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /pkgs/obs-plugins/obs-scene-as-transition.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | stdenv, 4 | fetchFromGitHub, 5 | cmake, 6 | obs-studio, 7 | }: 8 | 9 | stdenv.mkDerivation rec { 10 | pname = "obs-scene-as-transition"; 11 | version = "1.1.1"; 12 | 13 | src = fetchFromGitHub { 14 | owner = "andilippi"; 15 | repo = "obs-scene-as-transition"; 16 | rev = "v${version}"; 17 | sha256 = "sha256-qeiJR68MqvhpzvY7yNnR6w77SvavlZTdbnGBWrd7iZM="; 18 | }; 19 | 20 | nativeBuildInputs = [ cmake ]; 21 | buildInputs = [ obs-studio ]; 22 | 23 | postInstall = '' 24 | rm -rf $out/obs-plugins $out/data 25 | ''; 26 | 27 | meta = with lib; { 28 | description = "An OBS Studio plugin that will allow you to use a Scene as a transition"; 29 | homepage = "https://github.com/andilippi/obs-scene-as-transition"; 30 | maintainers = with maintainers; [ flexiondotorg ]; 31 | license = licenses.gpl2Plus; 32 | platforms = [ 33 | "x86_64-linux" 34 | "i686-linux" 35 | ]; 36 | }; 37 | } 38 | -------------------------------------------------------------------------------- /nixos/_mixins/network/tailscale/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | hostname, 4 | isWorkstation, 5 | isServer, 6 | lib, 7 | pkgs, 8 | username, 9 | ... 10 | }: 11 | let 12 | tsExitNodes = [ 13 | "maul" 14 | "revan" 15 | ]; 16 | in 17 | lib.mkIf (isWorkstation || isServer) { 18 | environment.systemPackages = with pkgs; lib.optionals isWorkstation [ trayscale ]; 19 | 20 | services.tailscale = { 21 | enable = true; 22 | extraUpFlags = [ 23 | "--operator=${username}" 24 | ] 25 | ++ lib.optional (lib.elem "${hostname}" tsExitNodes) "--advertise-exit-node"; 26 | extraSetFlags = [ 27 | "--operator=${username}" 28 | ] 29 | ++ lib.optional (lib.elem "${hostname}" tsExitNodes) "--advertise-exit-node"; 30 | # Enable caddy to acquire certificates from the tailscale daemon 31 | # - https://tailscale.com/blog/caddy 32 | permitCertUid = lib.mkIf config.services.caddy.enable "caddy"; 33 | openFirewall = true; 34 | useRoutingFeatures = "both"; 35 | }; 36 | } 37 | -------------------------------------------------------------------------------- /darwin/_mixins/desktop/features/fonts/default.nix: -------------------------------------------------------------------------------- 1 | { pkgs, ... }: 2 | { 3 | fonts = { 4 | packages = with pkgs; [ 5 | bw-fusiona-font 6 | corefonts 7 | fira 8 | font-awesome 9 | lato 10 | liberation_ttf 11 | nerd-fonts.fira-code 12 | nerd-fonts.fira-mono 13 | nerd-fonts.space-mono 14 | nerd-fonts.symbols-only 15 | noto-fonts-emoji 16 | noto-fonts-monochrome-emoji 17 | source-serif 18 | symbola 19 | work-sans 20 | bebas-neue-2014-font 21 | bebas-neue-pro-font 22 | bebas-neue-rounded-font 23 | bebas-neue-semi-rounded-font 24 | boycott-font 25 | commodore-64-pixelized-font 26 | digital-7-font 27 | dirty-ego-font 28 | fixedsys-core-font 29 | fixedsys-excelsior-font 30 | impact-label-font 31 | lato 32 | mocha-mattari-font 33 | poppins-font 34 | spaceport-2006-font 35 | ubuntu_font_family 36 | unscii 37 | zx-spectrum-7-font 38 | ]; 39 | }; 40 | } 41 | -------------------------------------------------------------------------------- /pkgs/obs-plugins/obs-stroke-glow-shadow.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | stdenv, 4 | fetchFromGitHub, 5 | cmake, 6 | obs-studio, 7 | }: 8 | 9 | stdenv.mkDerivation rec { 10 | pname = "obs-stroke-glow-shadow"; 11 | version = "v1.5.2"; 12 | 13 | src = fetchFromGitHub { 14 | owner = "FiniteSingularity"; 15 | repo = "obs-stroke-glow-shadow"; 16 | rev = version; 17 | sha256 = "sha256-+2hb4u+6UG7IV9pAvPjp4wvDYhYnxe98U5QQjUcdD/k="; 18 | }; 19 | 20 | nativeBuildInputs = [ cmake ]; 21 | buildInputs = [ obs-studio ]; 22 | 23 | postFixup = '' 24 | rm -rf $out/obs-plugins 25 | rm -rf $out/data 26 | ''; 27 | 28 | meta = with lib; { 29 | description = "An OBS plugin to provide efficient Stroke, Glow, and Shadow effects on masked sources."; 30 | homepage = "https://github.com/FiniteSingularity/obs-stroke-glow-shadow"; 31 | maintainers = with maintainers; [ flexiondotorg ]; 32 | license = licenses.gpl2Only; 33 | platforms = [ 34 | "x86_64-linux" 35 | "i686-linux" 36 | ]; 37 | }; 38 | } 39 | -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/micro.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | ... 4 | }: 5 | { 6 | catppuccin.micro.enable = config.programs.micro.enable; 7 | 8 | # Force true color detection for micro editor 9 | # Requires COLORTERM=truecolor too, which is set in home-manager/default.nix 10 | # https://github.com/zyedidia/micro/issues/3326#issuecomment-2148918654 11 | home.sessionVariables = { 12 | MICRO_TRUECOLOR = "1"; 13 | }; 14 | 15 | programs = { 16 | micro = { 17 | enable = true; 18 | settings = { 19 | autosu = true; 20 | diffgutter = true; 21 | paste = true; 22 | rmtrailingws = true; 23 | savecursor = true; 24 | saveundo = true; 25 | scrollbar = true; 26 | scrollbarchar = "┇"; 27 | scrollmargin = 4; 28 | scrollspeed = 1; 29 | truecolor = true; 30 | }; 31 | }; 32 | }; 33 | 34 | xdg = { 35 | desktopEntries = { 36 | micro = { 37 | name = "Micro"; 38 | noDisplay = true; 39 | }; 40 | }; 41 | }; 42 | } 43 | -------------------------------------------------------------------------------- /pkgs/fonts/boycott-font/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | fetchzip, 3 | lib, 4 | stdenvNoCC, 5 | }: 6 | 7 | stdenvNoCC.mkDerivation rec { 8 | pname = "boycott"; 9 | version = "1.00"; 10 | 11 | src = fetchzip { 12 | url = " https://dl.dafont.com/dl/?f=${pname}"; 13 | hash = "sha256-2n/FXp31n2LVdHW/75vuipb50pMjeVDSKTbBc10XS94="; 14 | extension = "zip"; 15 | stripRoot = false; 16 | }; 17 | 18 | installPhase = '' 19 | install -m444 -Dt $out/share/fonts/truetype/${pname} *.TTF 20 | ''; 21 | 22 | meta = { 23 | description = "Boycott Font"; 24 | longdescription = '' 25 | This grungy font with a noisy design that it a little rough around the 26 | edges; a perfect design for posters and large headlines. Designed based 27 | on Bebas (2005). 28 | ''; 29 | homepage = "https://www.dafont.com/${pname}.font"; 30 | license = lib.licenses.free; 31 | maintainers = with lib.maintainers; [ flexiondotorg ]; 32 | platforms = lib.platforms.all; 33 | sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/development/plan-code.prompt.md: -------------------------------------------------------------------------------- 1 | --- 2 | agent: 'dilbert' 3 | description: 'Plan Implementation 📝' 4 | --- 5 | ## Implementation Plan 6 | 7 | Create an implementation plan for the outstanding work in ${input:codebase:#codebase}, optimised for AI-assisted development. 8 | 9 | **Per Task:** 10 | - **ID**: TASK-001: Descriptive name 11 | - **Dependencies**: What must be complete first 12 | - **Scope**: Files/functions to modify 13 | - **Success Criteria**: How to verify it works 14 | - **Complexity**: S/M/L 15 | - **Review Points**: What needs human review 16 | 17 | **Structure:** 18 | - Atomic tasks: completable in one session, independently testable, safely revertible 19 | - Group into chunks of 3-5 related tasks 20 | - Each chunk produces working, testable code 21 | - Clear commit points to save progress 22 | 23 | **Flag:** 24 | - High-risk tasks needing extra scrutiny 25 | - Tasks requiring human decisions 26 | - Areas where context window may be challenged 27 | 28 | Each step should be self-contained—assume a fresh AI instance per conversation. 29 | -------------------------------------------------------------------------------- /nixos/atrius/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | inputs, 4 | lib, 5 | ... 6 | }: 7 | { 8 | imports = [ 9 | inputs.nixos-hardware.nixosModules.common-cpu-amd-pstate 10 | inputs.nixos-hardware.nixosModules.common-gpu-amd 11 | inputs.nixos-hardware.nixosModules.common-pc-ssd 12 | ./disks.nix 13 | ]; 14 | 15 | boot = { 16 | initrd.availableKernelModules = [ 17 | "nvme" 18 | "ehci_pci" 19 | "xhci_pci" 20 | "usb_storage" 21 | "rtsx_pci_sdmmc" 22 | ]; 23 | initrd.systemd.enable = true; 24 | kernelModules = [ 25 | "amdgpu" 26 | "kvm-amd" 27 | ]; 28 | # Force use of the thinkpad_acpi driver for backlight control. 29 | # This allows the backlight save/load systemd service to work. 30 | kernelParams = [ 31 | "acpi_backlight=native" 32 | ]; 33 | }; 34 | 35 | hardware = { 36 | trackpoint = { 37 | enable = lib.mkDefault true; 38 | emulateWheel = lib.mkDefault config.hardware.trackpoint.enable; 39 | }; 40 | }; 41 | services.fprintd.enable = lib.mkDefault true; 42 | } 43 | -------------------------------------------------------------------------------- /pkgs/fonts/spaceport-2006-font/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | fetchzip, 3 | lib, 4 | stdenvNoCC, 5 | }: 6 | 7 | stdenvNoCC.mkDerivation rec { 8 | pname = "spaceport_2006"; 9 | version = "1.000"; 10 | 11 | src = fetchzip { 12 | url = "https://dl.dafont.com/dl/?f=${pname}"; 13 | hash = "sha256-TZU5wVPVdg+cvuiOVxmdjJndGyQck/u191uxcawHoS4="; 14 | extension = "zip"; 15 | stripRoot = false; 16 | }; 17 | 18 | installPhase = '' 19 | install -m444 -Dt $out/share/fonts/opentype/${pname} *.otf 20 | ''; 21 | 22 | meta = { 23 | description = "Spaceport 2006 Font"; 24 | longdescription = '' 25 | Spaceport 2006 was a low-budget British sci-fi series shot in 1976, 26 | lasting only a few episodes before being cancelled. This is the font used 27 | in the series. 28 | ''; 29 | homepage = "https://www.dafont.com/${pname}.font"; 30 | license = lib.licenses.ofl; 31 | maintainers = with lib.maintainers; [ flexiondotorg ]; 32 | platforms = lib.platforms.all; 33 | sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /nixos/_mixins/server/scrutiny/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | hostname, 4 | lib, 5 | tailNet, 6 | ... 7 | }: 8 | let 9 | basePath = "/scrutiny"; 10 | installOn = [ 11 | "malak" 12 | "maul" 13 | "revan" 14 | "phasma" 15 | "vader" 16 | ]; 17 | in 18 | lib.mkIf (lib.elem hostname installOn) { 19 | services = { 20 | # Reverse proxy scrutiny if Tailscale is enabled. 21 | # https://github.com/AnalogJ/scrutiny/blob/master/docs/TROUBLESHOOTING_REVERSE_PROXY.md?plain=1#L62 22 | caddy.virtualHosts."${hostname}.${tailNet}".extraConfig = 23 | lib.mkIf (config.services.scrutiny.enable && config.services.tailscale.enable) 24 | '' 25 | redir ${basePath} ${basePath}/ 26 | reverse_proxy ${basePath}/* localhost:8080 27 | ''; 28 | scrutiny = { 29 | enable = true; 30 | collector = { 31 | enable = true; 32 | settings.host.id = "${hostname}"; 33 | settings.api.endpoint = "http://localhost:8080${basePath}"; 34 | }; 35 | settings.web.listen.basepath = basePath; 36 | }; 37 | }; 38 | } 39 | -------------------------------------------------------------------------------- /nixos/revan/disks.nix: -------------------------------------------------------------------------------- 1 | # nvme0n1 512GB: NixOS 2 | # nvme1n1 1TB: Home 3 | _: { 4 | disko.devices = { 5 | disk = { 6 | nvme0 = { 7 | type = "disk"; 8 | device = "/dev/disk/by-id/nvme-Force_MP600_204782310001285413F8"; 9 | content = { 10 | type = "gpt"; 11 | partitions = { 12 | ESP = { 13 | size = "1024M"; 14 | type = "EF00"; 15 | content = { 16 | type = "filesystem"; 17 | format = "vfat"; 18 | mountOptions = [ 19 | "defaults" 20 | "umask=0077" 21 | ]; 22 | mountpoint = "/boot"; 23 | }; 24 | }; 25 | root = { 26 | size = "100%"; 27 | content = { 28 | type = "filesystem"; 29 | format = "xfs"; 30 | mountpoint = "/"; 31 | mountOptions = [ "defaults" ]; 32 | }; 33 | }; 34 | }; 35 | }; 36 | }; 37 | }; 38 | }; 39 | } 40 | -------------------------------------------------------------------------------- /pkgs/obs-plugins/obs-vertical-canvas.diff: -------------------------------------------------------------------------------- 1 | diff --color -urpN obs-vertical-canvas.bak/file-updater.c obs-vertical-canvas/file-updater.c 2 | --- obs-vertical-canvas.bak/file-updater.c 2025-07-18 18:32:13.239718611 -0400 3 | +++ obs-vertical-canvas/file-updater.c 2025-07-18 18:32:30.732020377 -0400 4 | @@ -67,10 +67,10 @@ static bool do_http_request(struct updat 5 | curl_easy_setopt(info->curl, CURLOPT_ERRORBUFFER, info->error); 6 | curl_easy_setopt(info->curl, CURLOPT_WRITEFUNCTION, http_write); 7 | curl_easy_setopt(info->curl, CURLOPT_WRITEDATA, info); 8 | - curl_easy_setopt(info->curl, CURLOPT_FAILONERROR, true); 9 | - curl_easy_setopt(info->curl, CURLOPT_NOSIGNAL, 1); 10 | + curl_easy_setopt(info->curl, CURLOPT_FAILONERROR, 1L); 11 | + curl_easy_setopt(info->curl, CURLOPT_NOSIGNAL, 1L); 12 | curl_easy_setopt(info->curl, CURLOPT_ACCEPT_ENCODING, ""); 13 | - curl_easy_setopt(info->curl, CURLOPT_SSL_OPTIONS, CURLSSLOPT_REVOKE_BEST_EFFORT); 14 | + curl_easy_setopt(info->curl, CURLOPT_SSL_OPTIONS, (long)CURLSSLOPT_REVOKE_BEST_EFFORT); 15 | 16 | code = curl_easy_perform(info->curl); 17 | if (code != CURLE_OK) { 18 | -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/materialdesign/LICENSE: -------------------------------------------------------------------------------- 1 | Pictogrammers Free License 2 | -------------------------- 3 | 4 | This icon collection is released as free, open source, and GPL friendly by 5 | the [Pictogrammers](http://pictogrammers.com/) icon group. You may use it 6 | for commercial projects, open source projects, or anything really. 7 | 8 | # Icons: Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) 9 | Some of the icons are redistributed under the Apache 2.0 license. All other 10 | icons are either redistributed under their respective licenses or are 11 | distributed under the Apache 2.0 license. 12 | 13 | # Fonts: Apache 2.0 (https://www.apache.org/licenses/LICENSE-2.0) 14 | All web and desktop fonts are distributed under the Apache 2.0 license. Web 15 | and desktop fonts contain some icons that are redistributed under the Apache 16 | 2.0 license. All other icons are either redistributed under their respective 17 | licenses or are distributed under the Apache 2.0 license. 18 | 19 | # Code: MIT (https://opensource.org/licenses/MIT) 20 | The MIT license applies to all non-font and non-icon files. 21 | -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/materialdesign/README.md: -------------------------------------------------------------------------------- 1 | ## Contents 2 | 3 | This folder contains the source for the (current) Material Design Icons. 4 | Source is https://github.com/Templarian/MaterialDesign-Font 5 | 6 | Last fetch date is Oct 6, 2022. 7 | 8 | After fetching a new file one needs to correct our cheat-sheet by updating `bin/scripts/lib/i_md.sh`. 9 | Use the tool: 10 | ``` 11 | cd bin/scripts 12 | mv lib/i_md.sh lib/i_md.sh_ 13 | python3 generate-glyph-info-from-set.py --start f0001 -end f1af0 -font ../../src/glyphs/materialdesign/MaterialDesignIconsDesktop.ttf -offset 0 -prefix md > lib/i_md.sh 14 | ``` 15 | 16 | Open old and new definitions shell script and copy the header from the old file to the autogenerated file. Adapt the values in the new file's header. Remove the last line in the new file (it contains the number of glyphs that is needed for the updated header). Yes, that is some manual labor. 17 | 18 | 19 | ## Source bugs fixed 20 | 21 | Glyph 0xF1522 is broken in the original font. We fixed that one glyph manually. 22 | 23 | See https://github.com/Templarian/MaterialDesign-Font/issues/9 24 | -------------------------------------------------------------------------------- /pkgs/fonts/fixedsys-excelsior-font/default.nix: -------------------------------------------------------------------------------- 1 | { lib, stdenvNoCC }: 2 | 3 | stdenvNoCC.mkDerivation rec { 4 | pname = "fixedsys_excelsior"; 5 | version = "3.022"; 6 | 7 | src = lib.cleanSource ./fonts; 8 | 9 | installPhase = '' 10 | install -m444 -Dt $out/share/fonts/truetype/${pname} *ttf 11 | ''; 12 | 13 | meta = { 14 | description = "Fixedsys Excelsior Font"; 15 | longdescription = '' 16 | Fixedsys Excelsior is a modified version of the Fixedsys font; a family of 17 | raster monospaced fonts. The font was originally authored by Darien 18 | Valentine and provided via a now-defunct site at fixedsysexcelsior.com. 19 | This derivative adds programming ligatures and fixes rendering and hinting. 20 | 21 | This version is patched to include Nerd Font and Braille glyphs. 22 | ''; 23 | homepage = "https://github.com/MARTYR-X-LTD/fixedsys-excelsior"; 24 | license = lib.licenses.free; 25 | maintainers = with lib.maintainers; [ flexiondotorg ]; 26 | platforms = lib.platforms.all; 27 | sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; 28 | }; 29 | } 30 | -------------------------------------------------------------------------------- /.github/workflows/build-experiments.yml: -------------------------------------------------------------------------------- 1 | name: Build 🏗️ Experiments ️‍🧑‍🔬 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | concurrency: 7 | group: ${{ github.workflow }} 8 | cancel-in-progress: true 9 | permissions: 10 | contents: read 11 | id-token: write 12 | 13 | jobs: 14 | build-linux-experiments: 15 | name: 🧪 16 | runs-on: ubuntu-latest 17 | strategy: 18 | matrix: 19 | package: 20 | - davinci-resolve 21 | steps: 22 | - uses: actions/checkout@v6 23 | - uses: wimpysworld/nothing-but-nix@main 24 | - uses: DeterminateSystems/determinate-nix-action@v3 25 | with: 26 | extra-conf: | 27 | lazy-trees = true 28 | - uses: DeterminateSystems/flakehub-cache-action@v2 29 | - name: ${{ matrix.package }} 30 | continue-on-error: true 31 | run: | 32 | export NIXPKGS_ALLOW_UNFREE=1 33 | if ! nix eval ".#${{ matrix.package }}.meta.license.spdxId" --raw 2>/dev/null; then 34 | nix build .#${{ matrix.package }} -L --impure 35 | else 36 | nix build .#${{ matrix.package }} -L 37 | fi -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Wimpy's World 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /pkgs/fonts/dirty-ego-font/default.nix: -------------------------------------------------------------------------------- 1 | # https://yildiz.dev/posts/packing-custom-fonts-for-nixos/ 2 | # Bad Voltage brand font 3 | { 4 | fetchzip, 5 | lib, 6 | stdenvNoCC, 7 | }: 8 | 9 | stdenvNoCC.mkDerivation rec { 10 | pname = "dirty_ego"; 11 | version = "2001"; 12 | 13 | src = fetchzip { 14 | url = "https://dl.dafont.com/dl/?f=${pname}"; 15 | hash = "sha256-c56OR5yLXl0HK1wWpxJhHpLOkcj17qaEnANtMdf/hfs="; 16 | extension = "zip"; 17 | stripRoot = false; 18 | }; 19 | 20 | installPhase = '' 21 | install -m444 -Dt $out/share/fonts/truetype/${pname} *.TTF 22 | ''; 23 | 24 | meta = { 25 | description = "Dirty Ego Font"; 26 | longdescription = '' 27 | A fancy, all-caps, distressed font designed by Misprinted Type for headline, 28 | caption, and titling. It's a bit dirty, but it's got a lot of ego. 29 | ''; 30 | homepage = "https://www.misprintedtype.com/freeware"; 31 | license = lib.licenses.free; 32 | maintainers = with lib.maintainers; [ flexiondotorg ]; 33 | platforms = lib.platforms.all; 34 | sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; 35 | }; 36 | } 37 | -------------------------------------------------------------------------------- /pkgs/obs-plugins/obs-vnc.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | stdenv, 4 | fetchFromGitHub, 5 | cmake, 6 | obs-studio, 7 | pkg-config, 8 | libvncserver, 9 | }: 10 | 11 | stdenv.mkDerivation rec { 12 | pname = "obs-vnc"; 13 | version = "0.6.1"; 14 | 15 | src = fetchFromGitHub { 16 | owner = "norihiro"; 17 | repo = "obs-vnc"; 18 | rev = version; 19 | sha256 = "sha256-eTvKACeVFFw6DOFAiWaG/m14jYyzZc61e79S8oVWrCs="; 20 | }; 21 | 22 | nativeBuildInputs = [ 23 | cmake 24 | pkg-config 25 | ]; 26 | buildInputs = [ 27 | libvncserver 28 | obs-studio 29 | ]; 30 | 31 | postInstall = '' 32 | mkdir $out/lib $out/share 33 | mv $out/obs-plugins/64bit $out/lib/obs-plugins 34 | rm -rf $out/obs-plugins 35 | mv $out/data $out/share/obs 36 | ''; 37 | 38 | meta = with lib; { 39 | description = "VNC viewer integrated into OBS Studio as a source plugin"; 40 | homepage = "https://github.com/norihiro/obs-vnc"; 41 | maintainers = with maintainers; [ flexiondotorg ]; 42 | license = licenses.gpl2Only; 43 | platforms = [ 44 | "x86_64-linux" 45 | "i686-linux" 46 | ]; 47 | }; 48 | } 49 | -------------------------------------------------------------------------------- /.sops.yaml: -------------------------------------------------------------------------------- 1 | # Make a user key 2 | # mkdir -p ~/.config/sops/age 3 | # age-keygen -o ~/.config/sops/age/keys.txt 4 | 5 | # Display the user public key: 6 | # age-keygen -y ~/.config/sops/age/keys.txt 7 | 8 | # Make a host key: 9 | # sudo mkdir -p /var/lib/private/sops/age 10 | # sudo age-keygen -o /var/lib/private/sops/age/keys.txt 11 | 12 | # Display the host public key: 13 | # sudo age-keygen -y /var/lib/private/sops/age/keys.txt 14 | 15 | # Add secrets 16 | # sops secrets/secrets.yaml 17 | 18 | # Rekey secrets.yaml after editing recipients in .sops.yaml: 19 | # sops updatekeys secrets/secrets.yaml 20 | keys: 21 | - &user_martin age1xfpzwdsz06243ndj39x4yr2qs4u3ja777r3xautdtm59j54wa3kssualcn 22 | - &user_backup age1v5c455hd0shs745dhd3gl7kzw6zaqflnyl4v96pq56j96xyvvc5sgse0za 23 | - &host_prime age1pyd2u05gah05us62wf3msjktsgu2vgv80c9cag88wwsy64qp6gvqhlj55k 24 | - &host_backup age1ueuse0p74zqh7jcm5n97ajfw4az2cpf7pjl9q6zv475jdcepeujq8xlv23 25 | creation_rules: 26 | - path_regex: secrets/[^/]+\.(yaml|json|env|ini)$ 27 | key_groups: 28 | - age: 29 | - *user_martin 30 | - *user_backup 31 | - *host_prime 32 | - *host_backup 33 | -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | python3Packages, 3 | lib, 4 | }: 5 | 6 | python3Packages.buildPythonApplication rec { 7 | pname = "nerd-font-patcher"; 8 | version = "3.1.1"; 9 | 10 | src = lib.cleanSource ./${version}; 11 | 12 | propagatedBuildInputs = with python3Packages; [ fontforge ]; 13 | 14 | format = "other"; 15 | 16 | postPatch = '' 17 | sed -i font-patcher \ 18 | -e 's,__dir__ + "/src,"'$out'/share/,' 19 | sed -i font-patcher \ 20 | -e 's,/bin/scripts/name_parser,/../lib/name_parser,' 21 | ''; 22 | # Note: we cannot use $out for second substitution 23 | 24 | dontBuild = true; 25 | 26 | installPhase = '' 27 | mkdir -p $out/bin $out/share $out/lib 28 | install -Dm755 font-patcher $out/bin/nerd-font-patcher 29 | cp -ra src/glyphs $out/share/ 30 | cp -ra bin/scripts/name_parser $out/lib/ 31 | ''; 32 | 33 | meta = with lib; { 34 | description = "Font patcher to generate Nerd font"; 35 | mainProgram = "nerd-font-patcher"; 36 | homepage = "https://nerdfonts.com/"; 37 | license = licenses.mit; 38 | maintainers = with maintainers; [ ck3d ]; 39 | }; 40 | } 41 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/development/orientate.prompt.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 'Orientate 🧭' 3 | --- 4 | ## Project Orientation 5 | 6 | Orient yourself with ${input:variableName:#codebase} before we begin. 7 | 8 | ### 1. Review Documentation 9 | In order: README → CONTRIBUTING → ARCHITECTURE → PRD/GDD → CLAUDE.md/AGENTS.md → .cursorrules 10 | 11 | ### 2. Analyse Codebase 12 | - Directory structure and module organisation 13 | - Entry points and core logic 14 | - Dependencies and configuration 15 | - Test structure and recent commits 16 | 17 | ### 3. Recall Context 18 | From previous sessions: 19 | - Decisions made and rationale 20 | - Known issues and limitations 21 | - Work in progress 22 | - Project-specific preferences or instructions 23 | 24 | ### 4. Report 25 | Provide: 26 | - **Summary**: What we're building, current state 27 | - **Context**: Key technologies, conventions, constraints 28 | - **Memory**: Relevant recalled information affecting today's work 29 | - **Gaps**: Missing files, ambiguities, or conflicts between memory and docs 30 | - **Ready**: Confirm orientation complete 31 | 32 | Flag any expected files that are missing or inaccessible. 33 | -------------------------------------------------------------------------------- /nixos/dagger/disks.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | disko.devices = { 3 | disk = { 4 | vda = { 5 | type = "disk"; 6 | device = "/dev/vda"; 7 | content = { 8 | type = "gpt"; 9 | partitions = { 10 | ESP = { 11 | size = "512M"; 12 | type = "EF00"; 13 | content = { 14 | format = "vfat"; 15 | mountOptions = [ 16 | "defaults" 17 | "umask=0077" 18 | ]; 19 | mountpoint = "/boot"; 20 | type = "filesystem"; 21 | }; 22 | }; 23 | root = { 24 | size = "100%"; 25 | content = { 26 | extraArgs = [ "-f" ]; 27 | format = "xfs"; 28 | mountOptions = [ 29 | "defaults" 30 | "relatime" 31 | "nodiratime" 32 | ]; 33 | mountpoint = "/"; 34 | type = "filesystem"; 35 | }; 36 | }; 37 | }; 38 | }; 39 | }; 40 | }; 41 | }; 42 | } 43 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/communications/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | inputs, 4 | lib, 5 | pkgs, 6 | username, 7 | ... 8 | }: 9 | let 10 | installFor = [ "martin" ]; 11 | inherit (pkgs.stdenv) isLinux; 12 | 13 | slackWavebox = ( 14 | inputs.xdg-override.lib.wrapPackage { 15 | nameMatch = [ 16 | { 17 | case = "^https?://"; 18 | command = "wavebox"; 19 | } 20 | ]; 21 | } pkgs.slack 22 | ); 23 | in 24 | { 25 | catppuccin.halloy.enable = true; 26 | home = { 27 | packages = 28 | with pkgs; 29 | [ telegram-desktop ] 30 | ++ lib.optionals (lib.elem username installFor) [ 31 | (discord.override { withOpenASAR = true; }) 32 | ] 33 | # Halloy is installed via homebrew on Darwin 34 | ++ lib.optionals (lib.elem username installFor && isLinux) [ 35 | fractal 36 | unstable.halloy 37 | slackWavebox 38 | zoom-us 39 | ]; 40 | }; 41 | 42 | sops = { 43 | secrets = lib.mkIf (lib.elem username installFor) { 44 | halloy_config.path = "${config.home.homeDirectory}/.config/halloy/config.toml"; 45 | }; 46 | }; 47 | } 48 | -------------------------------------------------------------------------------- /nixos/_mixins/hardware/via/default.nix: -------------------------------------------------------------------------------- 1 | { username, ... }: 2 | { 3 | services = { 4 | # Provides users with access to VIA 5 | # https://get.vial.today/manual/linux-udev.html 6 | udev.extraRules = '' 7 | #0x320f 0x5055 Crush80 8 | KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="320f", ATTRS{idProduct}=="5055", TAG+="uaccess", TAG+="udev-acl", GROUP="input", MODE="0660", SYMLINK+="crush80" 9 | #0x320f 0x5088 Crush80-2.4G 10 | KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="320f", ATTRS{idProduct}=="5088", TAG+="uaccess", TAG+="udev-acl", GROUP="input", MODE="0660", SYMLINK+="crush80-24g" 11 | #0x359b 0x0004 Drop CSTM80 12 | KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="359b", ATTRS{idProduct}=="0004", TAG+="uaccess", TAG+="udev-acl", GROUP="input", MODE="0660", SYMLINK+="CSTM80" 13 | #0x36b0 0x300e Evoworks EVO80 14 | KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="36b0", ATTRS{idProduct}=="300e", TAG+="uaccess", TAG+="udev-acl", GROUP="input", MODE="0660", SYMLINK+="evo80" 15 | ''; 16 | }; 17 | users.users.${username} = { 18 | extraGroups = [ "input" ]; 19 | }; 20 | } 21 | -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/bat.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | pkgs, 5 | ... 6 | }: 7 | let 8 | shellAliases = { 9 | brg = "${pkgs.bat-extras.batgrep}/bin/batgrep"; 10 | cat = "${pkgs.bat}/bin/bat --paging=never"; 11 | less = "${pkgs.bat}/bin/bat"; 12 | more = "${pkgs.bat}/bin/bat"; 13 | }; 14 | in 15 | { 16 | catppuccin.bat.enable = config.programs.bat.enable; 17 | 18 | home = { 19 | sessionVariables = lib.mkIf config.programs.bat.enable { 20 | MANPAGER = "sh -c 'col --no-backspaces --spaces | ${pkgs.bat}/bin/bat --language man'"; 21 | MANROFFOPT = "-c"; 22 | PAGER = "${pkgs.bat}/bin/bat"; 23 | }; 24 | }; 25 | 26 | programs = { 27 | bat = { 28 | enable = true; 29 | extraPackages = with pkgs.bat-extras; [ 30 | batgrep 31 | batwatch 32 | prettybat 33 | ]; 34 | config = { 35 | style = "plain"; 36 | }; 37 | }; 38 | bash.shellAliases = lib.mkIf config.programs.bat.enable shellAliases; 39 | fish.shellAliases = lib.mkIf config.programs.bat.enable shellAliases; 40 | zsh.shellAliases = lib.mkIf config.programs.bat.enable shellAliases; 41 | }; 42 | } 43 | -------------------------------------------------------------------------------- /pkgs/fonts/bebas-neue-pro-font/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | fetchzip, 3 | lib, 4 | stdenvNoCC, 5 | }: 6 | 7 | stdenvNoCC.mkDerivation rec { 8 | pname = "bebas_neue_pro"; 9 | version = "1.100"; 10 | 11 | src = fetchzip { 12 | url = "https://globalfonts.pro/global_files/5dcb09cf6e1d366bf1dd9d85/bebas-neue-pro.zip"; 13 | hash = "sha256-xxQaa4Ck3q2Ly4atybjIeqcoA+mmTlL1DUDIyRPh5sw="; 14 | stripRoot = false; 15 | }; 16 | 17 | installPhase = '' 18 | install -m444 -Dt $out/share/fonts/truetype/${pname} *.ttf 19 | ''; 20 | 21 | meta = { 22 | description = "Bebas Neue Pro"; 23 | longdescription = '' 24 | Finally, Bebas Neue has got lowercases and italics. New lowercases are 25 | designed to carefully match the uppercases. Three widths from Normal to 26 | Expanded are available for more usability. Almost all European languages 27 | are supported. 28 | ''; 29 | homepage = "https://dharmatype.com/bebas-neue-pro"; 30 | license = lib.licenses.unfree; 31 | maintainers = with lib.maintainers; [ flexiondotorg ]; 32 | platforms = lib.platforms.all; 33 | sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/octicons/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 GitHub Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /nixos/_mixins/server/maestral/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | hostname, 3 | isWorkstation, 4 | lib, 5 | pkgs, 6 | ... 7 | }: 8 | let 9 | # Declare which hosts have Maestral (Dropbox) enabled. 10 | installOn = [ 11 | "bane" 12 | "phasma" 13 | "tanis" 14 | "revan" 15 | "sidious" 16 | "vader" 17 | ]; 18 | in 19 | lib.mkIf (lib.elem "${hostname}" installOn) { 20 | environment.systemPackages = with pkgs; [ maestral ]; 21 | 22 | systemd.user.services.maestral = { 23 | description = "Maestral"; 24 | wantedBy = [ "default.target" ]; 25 | serviceConfig = { 26 | ExecStart = "${pkgs.maestral}/bin/maestral start"; 27 | ExecReload = "${pkgs.util-linux}/bin/kill -HUP $MAINPID"; 28 | KillMode = "process"; 29 | Restart = "on-failure"; 30 | }; 31 | }; 32 | 33 | systemd.user.services.maestral-gui = lib.mkIf isWorkstation { 34 | description = "Maestral GUI"; 35 | wantedBy = [ "default.target" ]; 36 | serviceConfig = { 37 | ExecStart = "${pkgs.maestral-gui}/bin/maestral_qt"; 38 | ExecReload = "${pkgs.util-linux}/bin/kill -HUP $MAINPID"; 39 | KillMode = "process"; 40 | Restart = "on-failure"; 41 | }; 42 | }; 43 | } 44 | -------------------------------------------------------------------------------- /pkgs/fonts/bw-fusiona-font/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | fetchzip, 3 | lib, 4 | stdenvNoCC, 5 | }: 6 | 7 | stdenvNoCC.mkDerivation rec { 8 | pname = "bw_fusiona"; 9 | version = "1.000"; 10 | 11 | src = fetchzip { 12 | url = "https://ifonts.xyz/wp-content/ifonts-files/downloads/559747/bw-fusiona-font-family.zip"; 13 | hash = "sha256-8FNKeTJTumpkGqj1aIvuXdkODPhWg2D0rF6k137/IOI="; 14 | stripRoot = false; 15 | }; 16 | 17 | installPhase = '' 18 | install -m444 -Dt $out/share/fonts/opentype/${pname} *.otf 19 | ''; 20 | 21 | meta = { 22 | description = "Bw Fusiona"; 23 | longdescription = '' 24 | Bw Fusiona brings in a distinct approach to contrast to the familiarity 25 | of the grotesque shapes. This creates a subtle yet very distinct feel, 26 | providing brands with a typographic asset for differentiation while 27 | staying relevant and familiar. 28 | ''; 29 | homepage = "https://brandingwithtype.com/typefaces/bw-fusiona-collection"; 30 | license = lib.licenses.unfree; 31 | maintainers = with lib.maintainers; [ flexiondotorg ]; 32 | platforms = lib.platforms.all; 33 | sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /pkgs/fonts/bebas-neue-rounded-font/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | fetchzip, 3 | lib, 4 | stdenvNoCC, 5 | }: 6 | 7 | stdenvNoCC.mkDerivation rec { 8 | pname = "bebas_neue_rounded"; 9 | version = "1.000"; 10 | 11 | src = fetchzip { 12 | url = "https://www.dfonts.org/wp-content/uploads/fonts/Bebas_Neue_Rounded.zip"; 13 | hash = "sha256-9nuAKeSPtqFsatHda/HQFC15rYUmunOeqoMRTYwvSzA="; 14 | stripRoot = false; 15 | }; 16 | 17 | installPhase = '' 18 | install -m444 -Dt $out/share/fonts/opentype/${pname} "Bebas_Neue_Rounded/Bebas Neue Rounded.otf" 19 | ''; 20 | 21 | meta = { 22 | description = "Bebas Neue Rounded Font"; 23 | longdescription = '' 24 | Bebas Neue Semi Rounded is the Bebas Neue with rounded corners. 25 | This semi-rounded version proportion are same as Bebas Neue but rounded 26 | shape gives a warm, soft and natural impression. A bit more rigid than 27 | Bebas Neue Rounded. 28 | ''; 29 | homepage = "https://dharmatype.com/bebas-neue"; 30 | license = lib.licenses.unfree; 31 | maintainers = with lib.maintainers; [ flexiondotorg ]; 32 | platforms = lib.platforms.all; 33 | sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /pkgs/fonts/mocha-mattari-font/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | fetchzip, 3 | lib, 4 | stdenvNoCC, 5 | }: 6 | 7 | stdenvNoCC.mkDerivation rec { 8 | pname = "mocha_mattari"; 9 | version = "1.000"; 10 | 11 | src = fetchzip { 12 | url = "https://www.dfonts.org/wp-content/uploads/fonts/Mocha_Mattari.zip"; 13 | hash = "sha256-wsP0SKbO71Z0kwHBqOc+CQZ0XHoWjHCtKOqQ1Zs0FeU="; 14 | stripRoot = false; 15 | }; 16 | 17 | installPhase = '' 18 | install -m444 -Dt $out/share/fonts/opentype/${pname} "Mocha_Mattari/Mocha_Mattari/Mocha Mattari.otf" 19 | ''; 20 | 21 | meta = { 22 | description = "Mocha Mattari Font"; 23 | longdescription = '' 24 | Mocha Mattari is a distressed font designed based on Bebas Neue released 25 | as a free font in 2010. Mocha Mattari was made by damaging the original 26 | and tweaked by handwork. Basically, Mocha Mattari does not have lowercase 27 | but alternative uppercases. 28 | ''; 29 | homepage = "https://dharmatype.com/mocha-mattari"; 30 | license = lib.licenses.unfree; 31 | maintainers = with lib.maintainers; [ flexiondotorg ]; 32 | platforms = lib.platforms.all; 33 | sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/send-required/send-required.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set +e # Disable errexit 4 | set +u # Disable nounset 5 | set +o pipefail # Disable pipefail 6 | 7 | if [ -z "${1}" ]; then 8 | echo "Usage: $(basename "${0}") " 9 | exit 1 10 | fi 11 | 12 | REMOTE_HOST="${1}" 13 | 14 | if [ -e "$HOME"/Zero/nix-config/pkgs/cider/Cider-linux-appimage-x64.AppImage ] && \ 15 | [ -e "$HOME"/Zero/nix-config/pkgs/pico8/pico-8_0.2.6b_amd64.zip ]; then 16 | echo "Cider and PICO-8 files found" 17 | else 18 | echo "Cider and PICO-8 files not found" 19 | exit 1 20 | fi 21 | 22 | echo "Sending Cider to ${REMOTE_HOST}" 23 | rsync -a --info=progress2 "$HOME/Zero/nix-config/pkgs/cider/Cider-linux-appimage-x64.AppImage" "${USER}@${REMOTE_HOST}:Zero/nix-config/pkgs/cider/" 24 | ssh "${REMOTE_HOST}" nix-store --add-fixed sha256 "$HOME/Zero/nix-config/pkgs/cider/Cider-linux-appimage-x64.AppImage" 25 | echo "Sending PICO-8 to ${REMOTE_HOST}" 26 | rsync -a --info=progress2 "$HOME/Zero/nix-config/pkgs/pico8/pico-8_0.2.6b_amd64.zip" "${USER}@${REMOTE_HOST}:Zero/nix-config/pkgs/pico8/" 27 | ssh "${REMOTE_HOST}" nix-store --add-fixed sha256 "$HOME/Zero/nix-config/pkgs/pico8/pico-8_0.2.6b_amd64.zip" 28 | -------------------------------------------------------------------------------- /pkgs/fonts/bebas-neue-semi-rounded-font/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | fetchzip, 3 | lib, 4 | stdenvNoCC, 5 | }: 6 | 7 | stdenvNoCC.mkDerivation rec { 8 | pname = "bebas_neue_semi_rounded"; 9 | version = "1.000"; 10 | 11 | src = fetchzip { 12 | url = "https://www.dfonts.org/wp-content/uploads/fonts/Bebas_Neue_SemiRounded.zip"; 13 | hash = "sha256-UV6HN8ECfvwnWtvPxdKLmBeV99w/r/DClBBBd4+MmEA="; 14 | stripRoot = false; 15 | }; 16 | 17 | installPhase = '' 18 | install -m444 -Dt $out/share/fonts/opentype/${pname} Bebas_Neue_SemiRounded/bebas-neue-semirounded.otf 19 | ''; 20 | 21 | meta = { 22 | description = "Bebas Neue Semi-Rounded Font"; 23 | longdescription = '' 24 | Bebas Neue Semi Rounded is the Bebas Neue with rounded corners. 25 | This semi-rounded version proportion are same as Bebas Neue but rounded 26 | shape gives a warm, soft and natural impression. A bit more rigid than 27 | Bebas Neue Rounded. 28 | ''; 29 | homepage = "https://dharmatype.com/bebas-neue"; 30 | license = lib.licenses.unfree; 31 | maintainers = with lib.maintainers; [ flexiondotorg ]; 32 | platforms = lib.platforms.all; 33 | sourceProvenance = [ lib.sourceTypes.binaryBytecode ]; 34 | }; 35 | } 36 | -------------------------------------------------------------------------------- /.github/workflows/build-macbook.yml: -------------------------------------------------------------------------------- 1 | name: Build 🏗️ Macbooks 🍏 2 | on: 3 | push: 4 | branches: 5 | - main 6 | paths: 7 | - 'flake.lock' 8 | workflow_dispatch: 9 | 10 | concurrency: 11 | group: ${{ github.workflow }}-${{ github.ref }} 12 | cancel-in-progress: true 13 | permissions: 14 | contents: read 15 | id-token: write 16 | 17 | jobs: 18 | build-macbook: 19 | name: 🍏 20 | runs-on: macos-latest 21 | strategy: 22 | matrix: 23 | flake: 24 | - name: krall 25 | type: darwin 26 | path: '.#darwinConfigurations.krall.config.system.build.toplevel' 27 | - name: krall 28 | type: home 29 | path: '.#homeConfigurations.\"martin@krall\".activationPackage' 30 | steps: 31 | - uses: actions/checkout@v6 32 | - uses: DeterminateSystems/determinate-nix-action@v3 33 | with: 34 | extra-conf: | 35 | lazy-trees = true 36 | - uses: DeterminateSystems/flakehub-cache-action@v2 37 | - name: ${{ matrix.flake.name }}-${{ matrix.flake.type }} 38 | run: | 39 | sed -i '' 's|pico8|#pico8|' home-manager/_mixins/desktop/apps/game-development/default.nix 40 | nix build ${{ matrix.flake.path }} -L 41 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/lima-create/default.nix: -------------------------------------------------------------------------------- 1 | { config, pkgs, ... }: 2 | let 3 | name = builtins.baseNameOf (builtins.toString ./.); 4 | shellApplication = pkgs.writeShellApplication { 5 | inherit name; 6 | runtimeInputs = with pkgs; [ 7 | bc 8 | coreutils 9 | gawk 10 | gnused 11 | lima-bin 12 | procps 13 | ]; 14 | text = builtins.readFile ./${name}.sh; 15 | }; 16 | in 17 | { 18 | home = { 19 | file = { 20 | "${config.home.homeDirectory}/.lima/_templates/blackace.yaml".text = 21 | builtins.readFile ./blackace.yaml; 22 | "${config.home.homeDirectory}/.lima/_templates/defender.yaml".text = 23 | builtins.readFile ./defender.yaml; 24 | "${config.home.homeDirectory}/.lima/_templates/fighter.yaml".text = 25 | builtins.readFile ./fighter.yaml; 26 | }; 27 | packages = with pkgs; [ shellApplication ]; 28 | }; 29 | programs.fish.shellAliases = { 30 | create-blackace = "lima-create blackace"; 31 | create-defender = "lima-create defender"; 32 | create-fighter = "lima-create fighter"; 33 | blackace = "limactl shell blackace"; 34 | defender = "limactl shell defender"; 35 | fighter = "limactl shell fighter"; 36 | }; 37 | } 38 | -------------------------------------------------------------------------------- /pkgs/nerd-font-patcher/3.1.1/src/glyphs/powerline-symbols/LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright 2013 Kim Silkebækken and other contributors 2 | https://github.com/powerline/powerline 3 | 4 | Permission is hereby granted, free of charge, to any person obtaining 5 | a copy of this software and associated documentation files (the 6 | "Software"), to deal in the Software without restriction, including 7 | without limitation the rights to use, copy, modify, merge, publish, 8 | distribute, sublicense, and/or sell copies of the Software, and to 9 | permit persons to whom the Software is furnished to do so, subject to 10 | the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 19 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 20 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 21 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/default-input/default-input.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set +e # Disable errexit 4 | set +u # Disable nounset 5 | set +o pipefail # Disable pipefail 6 | 7 | function get_default_source() { 8 | pactl info | grep "Default Source" | cut -d':' -f2 | sed 's/ //g' 9 | } 10 | 11 | function set_default_source() { 12 | pactl set-default-source "$(pactl list short sources | grep "${1}" | grep -v monitor | cut -f 2)" 13 | } 14 | 15 | function get_all_sources() { 16 | pactl list short sources | grep -v monitor | cut -f 2 17 | } 18 | 19 | case "${1}" in 20 | blue*) 21 | set_default_source bluez_input 22 | ${0} status;; 23 | evo4) 24 | set_default_source Audient_EVO4 25 | ${0} status;; 26 | ssl2) 27 | set_default_source Solid_State_Logic_SSL_2 28 | ${0} status;; 29 | usb) 30 | HOST="$(hostnamectl hostname)" 31 | case "${HOST}" in 32 | phasma) ${0} ssl2;; 33 | vader) ${0} ssl2;; 34 | esac 35 | ;; 36 | status) 37 | SINK="$(get_default_source)" 38 | case "${SINK}" in 39 | *bluez*) echo "Bluetooth";; 40 | *EVO4*) echo "EVO4";; 41 | *SSL_2*) echo "SSL 2";; 42 | esac 43 | ;; 44 | *) echo "Usage: ${0} {bluetooth|evo4|ssl2|status}";; 45 | esac 46 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/notes/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | pkgs, 5 | username, 6 | ... 7 | }: 8 | let 9 | installFor = [ "martin" ]; 10 | inherit (pkgs.stdenv) isLinux; 11 | in 12 | lib.mkIf (lib.elem username installFor) { 13 | home = { 14 | file = { 15 | # Customised Catppuccin Mocha Blue theme for Joplin 16 | # - https://github.com/catppuccin/joplin 17 | # - https://joplinapp.org/help/apps/custom_css 18 | "${config.home.homeDirectory}/.config/joplin-desktop/userchrome.css".text = 19 | builtins.readFile ./userchrome.css; 20 | "${config.home.homeDirectory}/.config/joplin-desktop/userstyle.css".text = 21 | builtins.readFile ./userstyle.css; 22 | }; 23 | packages = [ pkgs.heynote ]; 24 | }; 25 | 26 | programs.joplin-desktop = { 27 | enable = isLinux; 28 | extraConfig = { 29 | "markdown.plugin.sub" = true; 30 | "markdown.plugin.sup" = true; 31 | "revisionService.ttlDays" = 180; 32 | "style.editor.fontFamily" = "Work Sans"; 33 | "style.editor.fontSize" = 16; 34 | "style.editor.monospaceFontFamily" = "FiraCode Nerd Font Mono"; 35 | "theme" = 7; 36 | }; 37 | sync = { 38 | interval = "1h"; 39 | target = "dropbox"; 40 | }; 41 | }; 42 | } 43 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/flatpak-theme/flatpak-theme.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | # Best effort to set the GTK theme for Flatpak apps 3 | 4 | case "${XDG_CURRENT_DESKTOP}" in 5 | Cinnamon|GNOME|Pantheon) 6 | COLOR_SCHEME=$(dconf read /org/gnome/desktop/interface/color-scheme | sed -e "s/'//g") 7 | GTK_THEME=$(dconf read /org/gnome/desktop/interface/gtk-theme | sed -e "s/'//g") 8 | ICON_THEME=$(dconf read /org/gnome/desktop/interface/icon-theme | sed -e "s/'//g") 9 | XCURSOR_THEME=$(dconf read /org/gnome/desktop/interface/cursor-theme | sed -e "s/'//g") 10 | if [ "${COLOR_SCHEME}" == "prefer-dark" ]; then 11 | GTK_THEME="$GTK_THEME:dark" 12 | fi 13 | ;; 14 | MATE) 15 | GTK_THEME=$(dconf read /org/mate/desktop/interface/gtk-theme | sed -e "s/'//g") 16 | ICON_THEME=$(dconf read /org/mate/desktop/interface/icon-theme | sed -e "s/'//g") 17 | XCURSOR_THEME=$(dconf read /org/mate/desktop/peripherals/mouse/cursor-theme | sed -e "s/'//g") 18 | ;; 19 | *) 20 | GTK_THEME="Adwaita" 21 | ICON_THEME="Adwaita" 22 | XCURSOR_THEME="Adwaita" 23 | ;; 24 | esac 25 | 26 | flatpak override --user --env=GTK_THEME="${GTK_THEME}" 27 | flatpak override --user --env=ICON_THEME="${ICON_THEME}" 28 | flatpak override --user --env=XCURSOR_THEME="${XCURSOR_THEME}" 29 | -------------------------------------------------------------------------------- /nixos/_mixins/virtualisation/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | inputs, 4 | isWorkstation, 5 | lib, 6 | pkgs, 7 | username, 8 | ... 9 | }: 10 | let 11 | hasNvidiaGPU = lib.elem "nvidia" config.services.xserver.videoDrivers; 12 | installFor = [ "martin" ]; 13 | rootlessMode = false; 14 | in 15 | lib.mkIf (lib.elem "${username}" installFor && isWorkstation) { 16 | environment = { 17 | # https://wiki.nixos.org/wiki/Docker 18 | systemPackages = with pkgs; [ 19 | act 20 | distrobox 21 | docker-color-output 22 | docker-compose 23 | docker-init 24 | docker-sbom 25 | fuse-overlayfs 26 | lazydocker 27 | qemu 28 | inputs.quickemu.packages.${pkgs.system}.default 29 | ]; 30 | }; 31 | 32 | hardware.nvidia-container-toolkit.enable = hasNvidiaGPU; 33 | 34 | users.users.${username} = { 35 | extraGroups = lib.optional config.virtualisation.docker.enable "docker"; 36 | }; 37 | 38 | virtualisation = { 39 | containers.enable = true; 40 | docker = { 41 | enable = true; 42 | rootless = lib.mkIf rootlessMode { 43 | enable = rootlessMode; 44 | setSocketVariable = rootlessMode; 45 | }; 46 | }; 47 | oci-containers.backend = "docker"; 48 | spiceUSBRedirection.enable = true; 49 | }; 50 | } 51 | -------------------------------------------------------------------------------- /nixos/_mixins/hardware/zram/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | pkgs, 5 | ... 6 | }: 7 | let 8 | # Only enable zram swap if no swap devices are configured 9 | usezramSwap = builtins.length config.swapDevices == 0; 10 | in 11 | { 12 | # Keep zram swap (lz4) latency in check 13 | boot.kernel.sysctl = lib.mkIf usezramSwap { "vm.page-cluster" = 1; }; 14 | 15 | # Enable Multi-Gen LRU: 16 | # - https://docs.kernel.org/next/admin-guide/mm/multigen_lru.html 17 | # - Inspired by: https://github.com/hakavlad/mg-lru-helper 18 | systemd.services."mglru" = lib.mkIf usezramSwap { 19 | enable = true; 20 | wantedBy = [ "basic.target" ]; 21 | script = '' 22 | ${pkgs.coreutils}/bin/echo 1000 > /sys/kernel/mm/lru_gen/min_ttl_ms 23 | ''; 24 | serviceConfig = { 25 | Type = "oneshot"; 26 | }; 27 | unitConfig = { 28 | ConditionPathExists = "/sys/kernel/mm/lru_gen/enabled"; 29 | Description = "Configure Enable Multi-Gen LRU"; 30 | }; 31 | }; 32 | 33 | # Enable zram 34 | # - https://github.com/ecdye/zram-config/blob/main/README.md#performance 35 | # - https://www.reddit.com/r/Fedora/comments/mzun99/new_zram_tuning_benchmarks/ 36 | # - https://linuxreviews.org/Zram 37 | zramSwap = { 38 | algorithm = "lz4"; 39 | enable = usezramSwap; 40 | }; 41 | } 42 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/apps/zed-editor/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | pkgs, 5 | username, 6 | ... 7 | }: 8 | let 9 | installFor = [ "martin" ]; 10 | inherit (pkgs.stdenv) isLinux; 11 | in 12 | lib.mkIf (lib.elem username installFor && isLinux) { 13 | catppuccin.zed.enable = config.programs.zed-editor.enable; 14 | programs = { 15 | zed-editor = { 16 | enable = true; 17 | extensions = [ 18 | "github-actions" 19 | "lua" 20 | "nix" 21 | ]; 22 | package = pkgs.unstable.zed-editor; 23 | userSettings = { 24 | "languages" = { 25 | "Nix" = { 26 | "formatter" = { 27 | "external" = { 28 | "command" = "nixfmt"; 29 | "arguments" = [ 30 | "--quiet" 31 | "--" 32 | ]; 33 | }; 34 | }; 35 | "language_servers" = [ 36 | "nil" 37 | "!nixd" 38 | ]; 39 | }; 40 | }; 41 | "lsp" = { 42 | "nil" = { 43 | "settings" = { 44 | "diagnostics" = { 45 | "ignored" = [ "unused_binding" ]; 46 | }; 47 | }; 48 | }; 49 | }; 50 | }; 51 | }; 52 | }; 53 | } 54 | -------------------------------------------------------------------------------- /nixos/_mixins/server/netdata/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | hostname, 4 | lib, 5 | pkgs, 6 | tailNet, 7 | ... 8 | }: 9 | let 10 | basePath = "/netdata"; 11 | installOn = [ 12 | "malak" 13 | "maul" 14 | "revan" 15 | ]; 16 | hasNvidiaGPU = lib.elem "nvidia" config.services.xserver.videoDrivers; 17 | in 18 | lib.mkIf (lib.elem config.networking.hostName installOn) { 19 | services = { 20 | # Reverse proxy netdata if Tailscale is enabled. 21 | caddy.virtualHosts."${hostname}.${tailNet}".extraConfig = 22 | lib.mkIf (config.services.netdata.enable && config.services.tailscale.enable) 23 | '' 24 | redir ${basePath} ${basePath}/ 25 | reverse_proxy ${basePath}/* localhost:19999 26 | ''; 27 | netdata = { 28 | # Enable the Nvidia plugin for Netdata if an Nvidia GPU is present 29 | configDir = lib.mkIf hasNvidiaGPU { 30 | "python.d.conf" = pkgs.writeText "python.d.conf" '' 31 | nvidia_smi: yes 32 | ''; 33 | }; 34 | enable = true; 35 | enableAnalyticsReporting = false; 36 | package = pkgs.netdata; 37 | }; 38 | }; 39 | # Enable the Nvidia plugin for Netdata if an Nvidia GPU is present 40 | systemd.services.netdata.path = lib.optionals hasNvidiaGPU [ pkgs.linuxPackages_6_12.nvidia_x11 ]; 41 | } 42 | -------------------------------------------------------------------------------- /nixos/_mixins/network/malak.nix: -------------------------------------------------------------------------------- 1 | { lib, ... }: 2 | let 3 | # https://developers.cloudflare.com/1.1.1.1/ip-addresses/ 4 | cloudflareDns = [ 5 | "1.1.1.1" 6 | "1.0.0.1" 7 | "2606:4700:4700::1111" 8 | "2606:4700:4700::1001" 9 | ]; 10 | # https://docs.hetzner.com/dns-console/dns/general/recursive-name-servers 11 | hetznerDns = [ 12 | "185.12.64.1" 13 | "185.12.64.2" 14 | "2a01:4ff:ff00::add:1" 15 | "2a01:4ff:ff00::add:2" 16 | ]; 17 | in 18 | { 19 | networking = { 20 | defaultGateway = "116.202.241.193"; 21 | defaultGateway6 = { 22 | address = "fe80::1"; 23 | interface = "eth0"; 24 | }; 25 | firewall = { 26 | allowedTCPPorts = [ 27 | 80 28 | 443 29 | ]; 30 | }; 31 | interfaces.eth0.ipv4.addresses = [ 32 | { 33 | address = "116.202.241.253"; 34 | prefixLength = 26; 35 | } 36 | ]; 37 | interfaces.eth0.ipv6.addresses = [ 38 | { 39 | address = "2a01:4f8:241:3f6d::1"; 40 | prefixLength = 64; 41 | } 42 | ]; 43 | nameservers = lib.mkForce hetznerDns; 44 | useDHCP = lib.mkForce false; 45 | usePredictableInterfaceNames = false; 46 | }; 47 | services.resolved = { 48 | fallbackDns = lib.mkForce cloudflareDns; 49 | dnsovertls = lib.mkForce "false"; 50 | }; 51 | } 52 | -------------------------------------------------------------------------------- /nixos/_mixins/server/kolide/default.nix: -------------------------------------------------------------------------------- 1 | # https://github.com/kolide/nix-agent 2 | # https://github.com/kolide/nix-agent/blob/main/modules/kolide-launcher/default.nix 3 | { 4 | hostname, 5 | inputs, 6 | lib, 7 | ... 8 | }: 9 | let 10 | installOn = [ "maul" ]; 11 | in 12 | lib.mkIf (lib.elem hostname installOn) { 13 | 14 | environment.systemPackages = [ 15 | inputs.kolide-launcher 16 | ]; 17 | 18 | services.kolide-launcher = { 19 | enable = true; 20 | # The hostname for the Kolide device management server. 21 | #kolideHostname = "k2device.kolide.com"; 22 | 23 | # The path to the directory that will hold launcher-related data, including logs, databases, and autoupdates. 24 | #rootDirectory = "/var/kolide-k2/k2device.kolide.com"; 25 | 26 | # Which release channel the launcher installation should use when autoupdating 27 | # itself and its osquery installation: one of stable, nightly, beta, or alpha. 28 | #updateChannel = "stable"; 29 | 30 | # The path to the directory where the enrollment secret lives. 31 | #enrollSecretDirectory = "/etc/kolide-k2"; 32 | }; 33 | 34 | sops = { 35 | secrets = { 36 | kolide = { 37 | mode = "0600"; 38 | path = "/etc/kolide-k2/secret"; 39 | sopsFile = ../../../../secrets/kolide.yaml; 40 | }; 41 | }; 42 | }; 43 | } 44 | -------------------------------------------------------------------------------- /nixos/malak/disks.nix: -------------------------------------------------------------------------------- 1 | # /dev/disk/by-id/nvme-SAMSUNG_MZVL2512HCJQ-00B00_S675NL0W253602 -> ../../nvme0n1 2 | _: { 3 | disko.devices = { 4 | disk = { 5 | nvme0 = { 6 | type = "disk"; 7 | device = "/dev/disk/by-id/nvme-SAMSUNG_MZVL2512HCJQ-00B00_S675NL0W253602"; 8 | content = { 9 | type = "gpt"; 10 | partitions = { 11 | boot = { 12 | name = "boot"; 13 | size = "1M"; 14 | type = "EF02"; 15 | }; 16 | esp = { 17 | name = "ESP"; 18 | size = "1024M"; 19 | type = "EF00"; 20 | content = { 21 | type = "filesystem"; 22 | format = "vfat"; 23 | mountOptions = [ 24 | "defaults" 25 | "umask=0077" 26 | ]; 27 | mountpoint = "/boot"; 28 | }; 29 | }; 30 | root = { 31 | name = "root"; 32 | size = "100%"; 33 | content = { 34 | type = "filesystem"; 35 | format = "xfs"; 36 | mountOptions = [ "defaults" ]; 37 | mountpoint = "/"; 38 | }; 39 | }; 40 | }; 41 | }; 42 | }; 43 | }; 44 | }; 45 | } 46 | -------------------------------------------------------------------------------- /pkgs/obs-plugins/obs-vertical-canvas.nix: -------------------------------------------------------------------------------- 1 | { 2 | lib, 3 | stdenv, 4 | fetchFromGitHub, 5 | cmake, 6 | curl, 7 | obs-studio, 8 | qtbase, 9 | }: 10 | 11 | stdenv.mkDerivation rec { 12 | pname = "obs-vertical-canvas"; 13 | version = "1.5.2"; 14 | 15 | src = fetchFromGitHub { 16 | owner = "Aitum"; 17 | repo = "obs-vertical-canvas"; 18 | rev = version; 19 | sha256 = "sha256-rwIhmrkj+jLjSOAmFqD/hZ9/BPL5npGehSdumBoWows="; 20 | }; 21 | 22 | # Remove after https://github.com/Aitum/obs-vertical-canvas/pull/25 is released :) 23 | patches = [ ./obs-vertical-canvas.diff ]; 24 | 25 | nativeBuildInputs = [ cmake ]; 26 | 27 | buildInputs = [ 28 | curl 29 | obs-studio 30 | qtbase 31 | ]; 32 | 33 | dontWrapQtApps = true; 34 | 35 | # Fix CMakeLists.txt to use new find_package syntax 36 | preConfigure = '' 37 | sed -i 's|find_qt(|find_package(Qt6 |' CMakeLists.txt 38 | ''; 39 | 40 | postInstall = '' 41 | rm -rf $out/data $out/obs-plugins 42 | ''; 43 | 44 | meta = { 45 | description = "Plugin for OBS Studio to add vertical canvas"; 46 | homepage = "https://github.com/Aitum/obs-vertical-canvas"; 47 | maintainers = with lib.maintainers; [ flexiondotorg ]; 48 | license = lib.licenses.gpl2Plus; 49 | platforms = [ 50 | "x86_64-linux" 51 | "i686-linux" 52 | ]; 53 | }; 54 | } 55 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/aqua/default.nix: -------------------------------------------------------------------------------- 1 | { lib, pkgs, ... }: 2 | let 3 | inherit (pkgs.stdenv) isDarwin; 4 | in 5 | lib.mkIf isDarwin { 6 | targets.darwin = { 7 | currentHostDefaults = { 8 | NSGlobalDomain = { 9 | AppleLanguages = [ "en-GB" ]; 10 | AppleLocale = "en_GB"; 11 | }; 12 | "com.apple.Safari" = { 13 | AutoFillCreditCardData = false; 14 | AutoFillFromAddressBook = false; 15 | AutoFillMiscellaneousForms = false; 16 | AutoFillPasswords = false; 17 | # Prevent Safari from opening ‘safe’ files automatically after downloading 18 | AutoOpenSafeDownloads = false; 19 | IncludeInternalDebugMenu = true; 20 | IncludeDevelopMenu = true; 21 | # Privacy: don’t send search queries to Apple 22 | SuppressSearchSuggestions = true; 23 | UniversalSearchEnabled = false; 24 | ShowFavoritesBar = false; 25 | ShowFullURLInSmartSearchField = true; 26 | ShowOverlayStatusBar = true; 27 | WarnAboutFraudulentWebsites = true; 28 | WebAutomaticSpellingCorrectionEnabled = false; 29 | WebContinuousSpellCheckingEnabled = true; 30 | WebKitDeveloperExtrasEnabledPreferenceKey = true; 31 | WebKitJavaEnabled = false; 32 | WebKitJavaScriptCanOpenWindowsAutomatically = false; 33 | }; 34 | }; 35 | }; 36 | } 37 | -------------------------------------------------------------------------------- /home-manager/_mixins/terminal/bottom.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | lib, 4 | pkgs, 5 | ... 6 | }: 7 | let 8 | shellAliases = { 9 | htop = "${pkgs.bottom}/bin/btm --basic --tree --hide_table_gap --dot_marker"; 10 | top = "${pkgs.bottom}/bin/btm --basic --tree --hide_table_gap --dot_marker"; 11 | }; 12 | in 13 | { 14 | catppuccin.bottom.enable = config.programs.bottom.enable; 15 | 16 | programs = { 17 | bottom = { 18 | enable = true; 19 | settings = { 20 | disk_filter = { 21 | is_list_ignored = true; 22 | list = [ "/dev/loop" ]; 23 | regex = true; 24 | case_sensitive = false; 25 | whole_word = false; 26 | }; 27 | flags = { 28 | dot_marker = false; 29 | enable_gpu_memory = true; 30 | group_processes = true; 31 | hide_table_gap = true; 32 | mem_as_value = true; 33 | tree = true; 34 | }; 35 | }; 36 | }; 37 | bash.shellAliases = lib.mkIf config.programs.bottom.enable shellAliases; 38 | fish.shellAliases = lib.mkIf config.programs.bottom.enable shellAliases; 39 | zsh.shellAliases = lib.mkIf config.programs.bottom.enable shellAliases; 40 | }; 41 | 42 | xdg = { 43 | desktopEntries = { 44 | bottom = { 45 | name = "bottom"; 46 | noDisplay = true; 47 | }; 48 | }; 49 | }; 50 | } 51 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/lima-create/blackace.yaml: -------------------------------------------------------------------------------- 1 | images: 2 | - location: "https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.img" 3 | arch: "x86_64" 4 | - location: "https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-arm64.img" 5 | arch: "aarch64" 6 | mounts: 7 | - location: "~" 8 | - location: "/tmp/lima" 9 | writable: true 10 | containerd: 11 | system: false 12 | user: false 13 | disk: "32GiB" 14 | rosetta: 15 | enabled: true 16 | provision: 17 | - mode: system 18 | script: | 19 | #!/bin/bash 20 | set -eux -o pipefail 21 | if [ ! -e /nix/var/nix/profiles/default/etc/profile.d/nix-daemon.sh ]; then 22 | hostnamectl hostname defender 23 | curl -sSfL https://install.determinate.systems/nix | sh -s -- install \ 24 | --determinate --no-confirm 25 | fi 26 | probes: 27 | - mode: readiness 28 | description: "determinate-nixd" 29 | script: | 30 | #!/bin/bash 31 | set -euo pipefail 32 | if ! timeout 30s bash -c "until command -v determinate-nixd >/dev/null 2>&1; do sleep 5; done"; then 33 | echo >&2 "determinate-nixd is not installed yet" 34 | exit 1 35 | fi 36 | hint: | 37 | See "/var/log/cloud-init-output.log" in the guest 38 | message: | 39 | Log in to FlakeHub.com using Determinate Nixd: 40 | ------ 41 | determinate-nixd login 42 | ------ 43 | -------------------------------------------------------------------------------- /nixos/_mixins/users/nixos/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | config, 3 | desktop, 4 | isISO, 5 | isWorkstation, 6 | lib, 7 | pkgs, 8 | username, 9 | ... 10 | }: 11 | let 12 | isWorkstationISO = isISO && isWorkstation; 13 | in 14 | { 15 | config.users.users.nixos.description = "NixOS"; 16 | 17 | # All configurations for live media are below: 18 | config.system = lib.mkIf isISO { stateVersion = lib.mkForce lib.trivial.release; }; 19 | 20 | config.environment = { 21 | systemPackages = lib.optionals isWorkstationISO [ pkgs.gparted ]; 22 | }; 23 | 24 | # All workstation configurations for live media are below. 25 | config.isoImage = lib.mkIf isWorkstationISO { edition = lib.mkForce "${desktop}"; }; 26 | 27 | config.services = { 28 | displayManager.autoLogin = lib.mkIf isWorkstationISO { user = "${username}"; }; 29 | }; 30 | 31 | # Create desktop shortcuts and dock items for the live media 32 | config.systemd.tmpfiles = lib.mkIf isWorkstationISO { 33 | rules = [ 34 | "d /home/${username}/Desktop 0755 ${username} users" 35 | "d /home/${username}/.config 0755 ${username} users" 36 | "L+ /home/${username}/Desktop/io.calamares.calamares.desktop - - - - ${pkgs.calamares-nixos}/share/applications/io.calamares.calamares.desktop" 37 | "L+ /home/${username}/Desktop/gparted.desktop - - - - ${pkgs.gparted}/share/applications/gparted.desktop" 38 | ]; 39 | }; 40 | } 41 | -------------------------------------------------------------------------------- /home-manager/_mixins/desktop/hyprland/waybar/tailscale-toggle.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | case "$1" in 4 | toggle) 5 | if [[ "$(tailscale status --json | jq -r '.BackendState')" == "Stopped" ]]; then 6 | tailscale up --operator="$USER" --reset 7 | notify-desktop "Tailscale connected" "Your Tailscale connection has been established successfully. You are now connected to your tailnet." --urgency=low --app-name="Tailscale Toggle" --icon=network-connect 8 | else 9 | tailscale down 10 | notify-desktop "Tailscale disconnected" "Your Tailscale connection has been terminated. You are no longer connected to your tailnet." --urgency=low --app-name="Tailscale Toggle" --icon=network-disconnect 11 | fi 12 | ;; 13 | toggle-mullvad) 14 | if [[ "$(tailscale status --json | jq -r '.ExitNodeStatus.Online')" == "true" ]]; then 15 | tailscale set --exit-node= 16 | notify-desktop "Mullvad VPN disconnected" "Tailscale connection has been disconnected from Mullvad VPN." --urgency=low --app-name="Tailscale Toggle" --icon=changes-allow 17 | else 18 | SUGGESTED="$(tailscale exit-node suggest | head -n 1 | cut -d':' -f 2 | sed s'/ //g')" 19 | tailscale set --exit-node="$SUGGESTED" 20 | notify-desktop "Mullvad VPN connected" "Tailscale has been connected to Mullvad VPN." --urgency=low --app-name="Tailscale Toggle" --icon=changes-prevent 21 | fi 22 | ;; 23 | esac 24 | -------------------------------------------------------------------------------- /.github/workflows/build-vms.yml: -------------------------------------------------------------------------------- 1 | name: Build 🏗️ VMs 👻 2 | on: 3 | push: 4 | branches: 5 | - main 6 | paths: 7 | - 'flake.lock' 8 | workflow_dispatch: 9 | 10 | concurrency: 11 | group: ${{ github.workflow }}-${{ github.ref }} 12 | cancel-in-progress: true 13 | permissions: 14 | contents: read 15 | id-token: write 16 | 17 | jobs: 18 | build-vm: 19 | name: 👻 20 | runs-on: ubuntu-latest 21 | strategy: 22 | matrix: 23 | host: 24 | - 'crawler' 25 | - 'dagger' 26 | config-type: 27 | - type: 'nixos' 28 | path: '.#nixosConfigurations.{host}.config.system.build.toplevel' 29 | - type: 'home' 30 | path: '.#homeConfigurations."martin@{host}".activationPackage' 31 | steps: 32 | - uses: actions/checkout@v6 33 | - uses: wimpysworld/nothing-but-nix@main 34 | with: 35 | hatchet-protocol: 'holster' 36 | - uses: DeterminateSystems/determinate-nix-action@v3 37 | with: 38 | extra-conf: | 39 | lazy-trees = true 40 | - uses: DeterminateSystems/flakehub-cache-action@v2 41 | - name: ${{ matrix.host }} 42 | run: | 43 | sed -i 's|pico8|#pico8|' home-manager/_mixins/desktop/apps/game-development/default.nix 44 | FLAKEREF="${{ matrix.config-type.path }}" 45 | FLAKEREF="${FLAKEREF/\{host\}/${{ matrix.host }}}" 46 | nix build ${FLAKEREF} -L 47 | -------------------------------------------------------------------------------- /nixos/shaa/disks.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | disko.devices = { 3 | disk = { 4 | nvme0 = { 5 | type = "disk"; 6 | device = "/dev/disk/by-id/nvme-CT1000P3SSD8_2402463DE763"; 7 | content = { 8 | type = "gpt"; 9 | partitions = { 10 | ESP = { 11 | size = "1024M"; 12 | type = "EF00"; 13 | content = { 14 | format = "vfat"; 15 | mountOptions = [ 16 | "defaults" 17 | "umask=0077" 18 | ]; 19 | mountpoint = "/boot"; 20 | type = "filesystem"; 21 | }; 22 | }; 23 | root = { 24 | size = "100%"; 25 | content = { 26 | extraArgs = [ 27 | "-f" 28 | "--compression=lz4" 29 | "--discard" 30 | "--encrypted" 31 | ]; 32 | format = "bcachefs"; 33 | mountOptions = [ 34 | "defaults" 35 | "compression=lz4" 36 | "discard" 37 | "relatime" 38 | "nodiratime" 39 | ]; 40 | mountpoint = "/"; 41 | type = "filesystem"; 42 | }; 43 | }; 44 | }; 45 | }; 46 | }; 47 | }; 48 | }; 49 | } 50 | -------------------------------------------------------------------------------- /home-manager/_mixins/scripts/ipad-volume/ipad-volume.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set +e # Disable errexit 4 | set +u # Disable nounset 5 | set +o pipefail # Disable pipefail 6 | 7 | if [ -z "${1}" ]; then 8 | echo "Usage: $(basename "${0}") {set|status|vol-down|vol-up}" 9 | exit 0 10 | fi 11 | 12 | SINK_ID="" 13 | for ID in $(pulsemixer --list-sinks | grep "WirePlumber \[export\]" | cut -d':' -f3 | cut -d',' -f1 | sed 's/ //g'); do 14 | SINK_ID=$(echo "${ID}" | cut -d'-' -f3) 15 | PLAYER_SINK=$(pactl list short sink-inputs | grep "${SINK_ID}" | cut -f3) 16 | PLAYER_CLIENT=$(pactl list short clients | grep ^"${PLAYER_SINK}" | cut -f3) 17 | if [ "${PLAYER_CLIENT}" == "wireplumber" ]; then 18 | break 19 | fi 20 | done 21 | 22 | case "${1}" in 23 | status) 24 | STATUS="--" 25 | if [ -n "${SINK_ID}" ]; then 26 | STATUS="$(pulsemixer --get-volume --id "${SINK_ID}" | cut -d' ' -f1)%" 27 | fi 28 | echo "${STATUS}" 29 | ;; 30 | vol-down) 31 | if [ -n "${SINK_ID}" ]; then 32 | pulsemixer --id "${SINK_ID}" --change-volume -5 33 | fi 34 | ${0} status 35 | ;; 36 | vol-up) 37 | if [ -n "${SINK_ID}" ]; then 38 | pulsemixer --id "${SINK_ID}" --change-volume 5 39 | fi 40 | ${0} status 41 | ;; 42 | set) 43 | if [ -n "${SINK_ID}" ]; then 44 | pulsemixer --id "${SINK_ID}" --set-volume "${2}" 45 | fi 46 | ${0} status 47 | ;; 48 | esac 49 | 50 | -------------------------------------------------------------------------------- /nixos/_mixins/server/backup-sync/default.nix: -------------------------------------------------------------------------------- 1 | { 2 | hostname, 3 | lib, 4 | pkgs, 5 | ... 6 | }: 7 | let 8 | installOn = [ "malak" ]; 9 | backup-sync = pkgs.writeShellApplication { 10 | name = "backup-sync"; 11 | runtimeInputs = with pkgs; [ 12 | curl 13 | gawk 14 | gnused 15 | openssh 16 | rsync 17 | util-linux 18 | coreutils 19 | findutils 20 | ]; 21 | text = builtins.readFile ./backup-sync.sh; 22 | }; 23 | in 24 | lib.mkIf (lib.elem hostname installOn) { 25 | environment = { 26 | systemPackages = with pkgs; [ 27 | backup-sync 28 | ]; 29 | }; 30 | sops = { 31 | secrets = { 32 | backup-sync-env = { 33 | group = "root"; 34 | mode = "0644"; 35 | owner = "root"; 36 | path = "/etc/backup-sync.env"; 37 | sopsFile = ../../../../secrets/backup-sync.yaml; 38 | }; 39 | }; 40 | }; 41 | 42 | systemd.services.backup-sync = { 43 | description = "Sync backups to remote server(s)"; 44 | serviceConfig = { 45 | ExecStart = "${pkgs.bash}/bin/bash -c '${backup-sync}/bin/backup-sync'"; 46 | User = "root"; 47 | }; 48 | }; 49 | 50 | systemd.timers.backup-sync = { 51 | description = "Run backup-sync every 2 hours"; 52 | wantedBy = [ "timers.target" ]; 53 | timerConfig = { 54 | OnBootSec = "5min"; 55 | OnUnitActiveSec = "2h"; 56 | RandomizedDelaySec = 300; 57 | }; 58 | }; 59 | } 60 | -------------------------------------------------------------------------------- /nixos/tanis/disks.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | disko.devices = { 3 | disk = { 4 | nvme0 = { 5 | type = "disk"; 6 | device = "/dev/disk/by-id/nvme-WD_PC_SN740_SDDPTQE-2T00_22504Z446124"; 7 | content = { 8 | type = "gpt"; 9 | partitions = { 10 | ESP = { 11 | size = "1024M"; 12 | type = "EF00"; 13 | content = { 14 | format = "vfat"; 15 | mountOptions = [ 16 | "defaults" 17 | "umask=0077" 18 | ]; 19 | mountpoint = "/boot"; 20 | type = "filesystem"; 21 | }; 22 | }; 23 | luks = { 24 | size = "100%"; 25 | content = { 26 | type = "luks"; 27 | name = "crypted"; 28 | settings.allowDiscards = true; 29 | passwordFile = "/tmp/data.passwordFile"; 30 | content = { 31 | extraArgs = [ "-f" ]; 32 | format = "xfs"; 33 | mountOptions = [ 34 | "defaults" 35 | "relatime" 36 | "nodiratime" 37 | ]; 38 | mountpoint = "/"; 39 | type = "filesystem"; 40 | }; 41 | }; 42 | }; 43 | }; 44 | }; 45 | }; 46 | }; 47 | }; 48 | } 49 | -------------------------------------------------------------------------------- /nixos/_mixins/desktop/backgrounds/default.nix: -------------------------------------------------------------------------------- 1 | _: { 2 | environment.etc = { 3 | "backgrounds/Cat-1920px.png".source = ./Cat-1920px.png; 4 | "backgrounds/Cat-2560px.png".source = ./Cat-2560px.png; 5 | "backgrounds/Cat-3440px.png".source = ./Cat-3440px.png; 6 | "backgrounds/Cat-3840px.png".source = ./Cat-3840px.png; 7 | "backgrounds/Catppuccin-1920x1080.png".source = ./Catppuccin-1920x1080.png; 8 | "backgrounds/Catppuccin-1920x1200.png".source = ./Catppuccin-1920x1200.png; 9 | "backgrounds/Catppuccin-2560x1440.png".source = ./Catppuccin-2560x1440.png; 10 | "backgrounds/Catppuccin-2560x1600.png".source = ./Catppuccin-2560x1600.png; 11 | "backgrounds/Catppuccin-2560x2880.png".source = ./Catppuccin-2560x2880.png; 12 | "backgrounds/Catppuccin-3440x1440.png".source = ./Catppuccin-3440x1440.png; 13 | "backgrounds/Catppuccin-3840x2160.png".source = ./Catppuccin-3840x2160.png; 14 | "backgrounds/Colorway-1920x1080.png".source = ./Colorway-1920x1080.png; 15 | "backgrounds/Colorway-1920x1200.png".source = ./Colorway-1920x1200.png; 16 | "backgrounds/Colorway-2560x1440.png".source = ./Colorway-2560x1440.png; 17 | "backgrounds/Colorway-2560x1600.png".source = ./Colorway-2560x1600.png; 18 | "backgrounds/Colorway-2560x2880.png".source = ./Colorway-2560x2880.png; 19 | "backgrounds/Colorway-3440x1440.png".source = ./Colorway-3440x1440.png; 20 | "backgrounds/Colorway-3840x2160.png".source = ./Colorway-3840x2160.png; 21 | }; 22 | } 23 | --------------------------------------------------------------------------------