diff --git a/modules/core/audio/audio.nix b/modules/core/audio/audio.nix new file mode 100644 index 0000000..95bce00 --- /dev/null +++ b/modules/core/audio/audio.nix @@ -0,0 +1,28 @@ +{ + den.aspects.audio = { + nixos = { + security.rtkit.enable = true; + + services = { + pulseaudio.enable = false; + + pipewire = { + enable = true; + + wireplumber.enable = true; + + alsa = { + enable = true; + support32Bit = true; + }; + + pulse.enable = true; + + #lowLatency.enable = false; + + jack.enable = true; + }; + }; + }; + }; +} diff --git a/modules/core/audio/mpd.nix b/modules/core/audio/mpd.nix new file mode 100644 index 0000000..de8b025 --- /dev/null +++ b/modules/core/audio/mpd.nix @@ -0,0 +1,39 @@ +{ + den.aspects.mpd = { + nixos = { + services = { + mpd = { + enable = true; + + settings = { + music_directory = "/home/bug/Music"; + + decoder = [ + { + plugin = "ffmpeg"; + enabled = "yes"; + } + { + plugin = "opus"; + enabled = "no"; + } + ]; + + audio_output = [{ + type = "pipewire"; + name = "PipeWire Sound Server"; + }]; + }; + + user = "bug"; + }; + }; + + systemd.services = { + mpd.environment = { + XDG_RUNTIME_DIR = "/run/user/1000"; + }; + }; + }; + }; +} diff --git a/modules/core/dendritic.nix b/modules/core/dendritic.nix new file mode 100644 index 0000000..67fbe26 --- /dev/null +++ b/modules/core/dendritic.nix @@ -0,0 +1,15 @@ +{ inputs, ... }: { + imports = [ + (inputs.flake-file.flakeModules.dendritic or {}) + (inputs.den.flakeModules.dendritic or {}) + ]; + + flake-file.inputs = { + den.url = "github:vic/den"; + flake-file.url = "github:vic/flake-file"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; +} diff --git a/modules/core/desktop/cosmic.nix b/modules/core/desktop/cosmic.nix new file mode 100644 index 0000000..540d47b --- /dev/null +++ b/modules/core/desktop/cosmic.nix @@ -0,0 +1,75 @@ +{ + den.aspects.cosmic = { + nixos = { pkgs, ... }: { + services = { + greetd.enable = true; + + system76-scheduler.enable = true; + + displayManager = { + cosmic-greeter.enable = true; + + autoLogin = { + enable = true; + user = "bug"; + }; + }; + + desktopManager.cosmic.enable = true; + }; + + environment.systemPackages = with pkgs; [ + cosmic-applets + cosmic-edit + cosmic-ext-calculator + cosmic-ext-tweaks + cosmic-screenshot + + xdg-desktop-portal-gtk + xdg-desktop-portal-cosmic + ]; + + environment.sessionVariables = { + COSMIC_DATA_CONTROL_ENABLED = 1; + }; + + xdg = { + portal = { + enable = true; + xdgOpenUsePortal = true; + + config.common.default = ["gtk"]; + + extraPortals = [pkgs.xdg-desktop-portal-gtk pkgs.xdg-desktop-portal-cosmic]; + }; + + mime = { + enable = true; + + defaultApplications = { + "text/html" = "firefox.desktop"; + "x-scheme-handler/http" = "firefox.desktop"; + "x-scheme-handler/https" = "firefox.desktop"; + "x-scheme-handler/about" = "firefox.desktop"; + "x-scheme-handler/unknown" = "firefox.desktop"; + "application/pdf" = "firefox.desktop"; + + "inode/directory" = "com.system76.CosmicFiles.desktop"; + + "text/plain" = "com.system76.CosmicEdit.desktop"; + "text/markdown" = "com.system76.CosmicEdit.desktop"; + + "application/zip" = "org.gnome.FileRoller.desktop"; + "application/x-7z-compressed" = "org.gnome.FileRoller.desktop"; + "application/x-tar" = "org.gnome.FileRoller.desktop"; + "application/gzip" = "org.gnome.FileRoller.desktop"; + "application/x-xz" = "org.gnome.FileRoller.desktop"; + "application/x-zip-compressed" = "org.gnome.FileRoller.desktop"; + + "application/x-ms-dos-executable" = "wine.desktop"; + }; + }; + }; + }; + }; +} diff --git a/modules/core/graphics/amdgpu.nix b/modules/core/graphics/amdgpu.nix new file mode 100644 index 0000000..f88988b --- /dev/null +++ b/modules/core/graphics/amdgpu.nix @@ -0,0 +1,10 @@ +{ + den.aspects.amdgpu = { + nixos = { + services.xserver = { + enable = true; + videoDrivers = ["amdgpu"]; + }; + }; + }; +} diff --git a/modules/core/graphics/nvidia.nix b/modules/core/graphics/nvidia.nix new file mode 100644 index 0000000..2341779 --- /dev/null +++ b/modules/core/graphics/nvidia.nix @@ -0,0 +1,45 @@ +{ + den.aspects.nvidia = { + nixos = { pkgs, config, ... }: { + hardware.graphics = { + enable = true; + enable32Bit = true; + + extraPackages = with pkgs; [ + libva-vdpau-driver + libvdpau + libvdpau-va-gl + vdpauinfo + libva + libva-utils + libglvnd + mesa + nvidia-vaapi-driver + ]; + }; + + services.xserver = { + enable = true; + videoDrivers = ["nvidia"]; + }; + + hardware.nvidia = { + modesetting.enable = true; + + powerManagement.enable = false; + powerManagement.finegrained = false; + + open = false; + + nvidiaSettings = true; + + package = config.boot.kernelPackages.nvidiaPackages.beta; + }; + + nixpkgs.config = { + cudaSupport = true; + nvidia.acceptLicense = true; + }; + }; + }; +} diff --git a/modules/core/network/cloudflare-warp.nix b/modules/core/network/cloudflare-warp.nix new file mode 100644 index 0000000..3bcb98c --- /dev/null +++ b/modules/core/network/cloudflare-warp.nix @@ -0,0 +1,9 @@ +{ + den.aspects.cloudflare-warp = { + nixos = { + services.cloudflare-warp = { + enable = true; + }; + }; + }; +} diff --git a/modules/core/network/crab-hole.nix b/modules/core/network/crab-hole.nix new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/modules/core/network/crab-hole.nix @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/modules/core/network/dns.nix b/modules/core/network/dns.nix new file mode 100644 index 0000000..f09da26 --- /dev/null +++ b/modules/core/network/dns.nix @@ -0,0 +1,11 @@ +{ + den.aspects.dns = { + nixos = { + networking = { + networkmanager.enable = true; + + nameservers = [ "1.1.1.1" "1.0.0.1" ]; + }; + }; + }; +} diff --git a/modules/core/network/openssh.nix b/modules/core/network/openssh.nix new file mode 100644 index 0000000..8f2d07b --- /dev/null +++ b/modules/core/network/openssh.nix @@ -0,0 +1,15 @@ +{ + den.aspects.openssh = { + nixos = { + services.openssh = { + enable = true; + + settings = { + PrintMotd = true; + X11Forwarding = true; + AllowTcpForwarding = true; + }; + }; + }; + }; +} diff --git a/modules/core/swap.nix b/modules/core/swap.nix new file mode 100644 index 0000000..a8d06c0 --- /dev/null +++ b/modules/core/swap.nix @@ -0,0 +1,19 @@ +{ + den.aspects.swap = { + nixos = { + boot.kernel.sysctl = { + "fs.file-max" = 524288; + }; + + swapDevices = [{ + device = "/var/lib/swapfile"; + size = 8 * 1024; + }]; + + zramSwap = { + enable = true; + memoryMax = 64 * 1024 * 1024 * 1024; + }; + }; + }; +} diff --git a/modules/core/virtualisation.nix b/modules/core/virtualisation.nix new file mode 100644 index 0000000..636f494 --- /dev/null +++ b/modules/core/virtualisation.nix @@ -0,0 +1,11 @@ +{ + den.aspects.virtualisation = { + nixos = { + virtualisation = { + libvirtd.enable = true; + + spiceUSBRedirection.enable = true; + }; + }; + }; +} diff --git a/modules/hosts.nix b/modules/hosts.nix new file mode 100644 index 0000000..6bb7d4b --- /dev/null +++ b/modules/hosts.nix @@ -0,0 +1,15 @@ +let + bug = { + isNormalUser = true; + description = "bug"; + extraGroups = [ "networkmanager" "wheel" "audio" "video" "libvirtd" "ydotool" "dialout" ]; + }; +in { + den.hosts.x86_64-linux = { + nix.users.bug = bug; + laptop.users.bug = bug; + box.users.bug = bug; + }; + + den.homes.x86_64-linux.bug = { aspect = "bug"; }; +} diff --git a/modules/hosts/box/box.nix b/modules/hosts/box/box.nix new file mode 100644 index 0000000..d4fc172 --- /dev/null +++ b/modules/hosts/box/box.nix @@ -0,0 +1,35 @@ + +{ den, ... }: { + den.aspects.box = { + includes = with den.aspects; [ + den.provides.home-manager + syncthing + fish + + cloudflared + searxng + copyparty + glances + #invidious + mailserver + matrix + redlib + sish + vscode-server + dns + openssh + ]; + + nixos = { + networking.hostName = "box"; + + users.users.levi = { + isNormalUser = true; + description = "levi"; + extraGroups = []; + + hashedPasswordFile = "/home/bug/users/levi.passwd"; + }; + }; + }; +} diff --git a/modules/hosts/defaults.nix b/modules/hosts/defaults.nix new file mode 100644 index 0000000..c332d38 --- /dev/null +++ b/modules/hosts/defaults.nix @@ -0,0 +1,98 @@ +{ + den.default = { + nixos = { pkgs, ... }: { + imports = [ + /etc/nixos/hardware-configuration.nix + ]; + + system = { + stateVersion = "26.05"; + + autoUpgrade = { + enable = true; + allowReboot = false; + }; + }; + + nixpkgs = { + config = { + allowUnfree = true; + }; + }; + + nix = { + optimise.automatic = true; + settings.experimental-features = [ "nix-command" "flakes" ]; + }; + + security = { + sudo = { + enable = true; + wheelNeedsPassword = false; + }; + }; + + boot = { + kernelPackages = pkgs.linuxPackages_zen; + + initrd.checkJournalingFS = false; + + loader = { + grub.splashImage = null; + + systemd-boot = { + enable = true; + configurationLimit = 25; + }; + + efi.canTouchEfiVariables = true; + }; + }; + + environment.systemPackages = with pkgs; [ + comma + fastfetch + git + home-manager + inetutils + micro + nh + nil + nixd + nixfmt + nix-index + nix-output-monitor + nix-prefetch + nvd + psmisc + tree + unzip + wget + ]; + + time.timeZone = "America/Chicago"; + + i18n = { + defaultLocale = "en_US.UTF-8"; + + extraLocaleSettings = { + LC_ADDRESS = "en_US.UTF-8"; + LC_IDENTIFICATION = "en_US.UTF-8"; + LC_MEASUREMENT = "en_US.UTF-8"; + LC_MONETARY = "en_US.UTF-8"; + LC_NAME = "en_US.UTF-8"; + LC_NUMERIC = "en_US.UTF-8"; + LC_PAPER = "en_US.UTF-8"; + LC_TELEPHONE = "en_US.UTF-8"; + LC_TIME = "en_US.UTF-8"; + }; + }; + }; + + homeManager = { + home = { + stateVersion = "26.05"; + }; + }; + }; +} diff --git a/modules/hosts/laptop/laptop.nix b/modules/hosts/laptop/laptop.nix new file mode 100644 index 0000000..3b1efcb --- /dev/null +++ b/modules/hosts/laptop/laptop.nix @@ -0,0 +1,36 @@ + +{ den, ... }: { + den.aspects.laptop = { + includes = with den.aspects; [ + amdgpu + cosmic + firefox + audio + + den.provides.home-manager + stylix + #nvidia + syncthing + swap + cloudflare-warp + packages + development + #cad + mpd + virtualisation + flatpak + fish + dns + openssh + ]; + + nixos = { + networking.hostName = "nix"; + + services.logind.settings.Login = { + HandleLidSwitch = "ignore"; + HandleLidSwitchDocked = "ignore"; + }; + }; + }; +} diff --git a/modules/hosts/nix/nix.nix b/modules/hosts/nix/nix.nix new file mode 100644 index 0000000..b11a20f --- /dev/null +++ b/modules/hosts/nix/nix.nix @@ -0,0 +1,31 @@ +{ den, ... }: +{ + den.aspects.nix = { + includes = with den.aspects; [ + #amdgpu + cosmic + firefox + audio + + den.provides.home-manager + stylix + nvidia + syncthing + swap + #cloudflare-warp + packages + development + #cad + mpd + virtualisation + flatpak + fish + dns + openssh + ]; + + nixos = { + networking.hostName = "nix"; + }; + }; +} diff --git a/modules/infra/cloudflared.nix b/modules/infra/cloudflared.nix new file mode 100644 index 0000000..cec937e --- /dev/null +++ b/modules/infra/cloudflared.nix @@ -0,0 +1,31 @@ +{ + den.aspects.cloudflared = { + nixos = { pkgs, ...}: let + TUNNEL_UUID = "4118935e-359b-4dd2-95bd-eb27f7b0c5bb"; + in { + environment.systemPackages = [ pkgs.cloudflared ]; + + environment.etc."cloudflared/${TUNNEL_UUID}.json".source = "/home/bug/.cloudflared/${TUNNEL_UUID}.json"; + + services.cloudflared = { + enable = true; + + tunnels."${TUNNEL_UUID}" = { + credentialsFile = "/etc/cloudflared/${TUNNEL_UUID}.json"; + default = "http_status:404"; + + ingress = { + "tvtun.bug.tools" = "http://127.0.0.1:3001"; + "search.bug.tools" = "http://127.0.0.1:8888"; + "files.bug.tools" = "http://127.0.0.1:3210"; + "tube.bug.tools" = "http://127.0.0.1:3030"; + "monitor.bug.tools" = "http://127.0.0.1:61208"; + "reddit.bug.tools" = "http://127.0.0.1:8975"; + "matrix.bug.tools" = "http://127.0.0.1:8008"; + "bug.tools" = "http://127.0.0.1:8080"; + }; + }; + }; + }; + }; +} diff --git a/modules/infra/syncthing.nix b/modules/infra/syncthing.nix new file mode 100644 index 0000000..9a967e8 --- /dev/null +++ b/modules/infra/syncthing.nix @@ -0,0 +1,70 @@ +{ + den.aspects.syncthing = { + homeManager = { + services.syncthing = { + enable = true; + + overrideDevices = true; + overrideFolders = true; + + key = "/home/bug/.syncthing/key.pem"; + cert = "/home/bug/.syncthing/cert.pem"; + + settings = { + devices = { + desktop.id = "VEZXY3W-U6UXWTP-6BHANIG-O5EKNZY-XNV5YOX-4V4O3HB-ETECIUX-T2DK7AV"; + laptop.id = "I6NW53P-IJMMT73-7O53TXY-3GAHS2U-4EAADM7-ZNB5ZPB-62QHKVW-H7DYXQ2"; + server.id = "KJECAIP-Y2Y3FHV-NOJKIQV-LWIDMMZ-5ITEAZ4-LQCQL72-3BGW6T7-BFPFJQA"; + }; + + folders = { + "Documents" = { + path = "/home/bug/Documents"; + devices = ["desktop" "laptop" "server"]; + }; + + "Downloads" = { + path = "/home/bug/Downloads"; + devices = ["desktop" "laptop" "server"]; + }; + + "Pictures" = { + path = "/home/bug/Pictures"; + devices = ["desktop" "laptop" "server"]; + }; + + "Videos" = { + path = "/home/bug/Videos"; + devices = ["desktop" "laptop" "server"]; + }; + + "nix" = { + path = "/home/bug/nix"; + devices = ["desktop" "laptop" "server"]; + }; + + "hytale" = { + path = "/home/bug/.local/share/Hytale/UserData/Saves"; + devices = ["desktop" "laptop"]; + }; + + "ssh" = { + path = "/home/bug/.ssh"; + devices = ["desktop" "laptop" "server"]; + }; + + "cloudflared" = { + path = "/home/bug/.cloudflared"; + devices = ["desktop" "laptop" "server"]; + }; + + "Music" = { + path = "/home/bug/Music/"; + devices = ["desktop" "laptop" "server"]; + }; + }; + }; + }; + }; + }; +} diff --git a/modules/services/copyparty.nix b/modules/services/copyparty.nix new file mode 100644 index 0000000..a5f6691 --- /dev/null +++ b/modules/services/copyparty.nix @@ -0,0 +1,82 @@ +{ inputs, ... }: { + den.aspects.copyparty = { + nixos = { + imports = [ inputs.copyparty.nixosModules.default ]; + + nixpkgs.overlays = [ inputs.copyparty.overlays.default ]; + + services.copyparty = { + enable = true; + + user = "bug"; + group = "copyparty"; + + settings = { + i = "0.0.0.0"; + p = [ 3210 3211 ]; + no-reload = true; + ignored-flag = false; + }; + + accounts = { + bug = { + passwordFile = "/home/bug/mailserver/bug.passwd"; + }; + + sang = { + passwordFile = "/home/bug/nix/sang.passwd"; + }; + }; + + groups = { + g1 = [ "bug" ]; + }; + + volumes = { + "/" = { + path = "/srv/copyparty"; + + access = { + r = "*"; + rw = [ "bug" ]; + }; + + flags = { + fk = 4; + scan = 60; + }; + }; + + "/music" = { + path = "/home/bug/Music"; + + access = { + r = "*"; + rw = [ "bug" ]; + }; + + flags = { + fk = 4; + scan = 60; + }; + }; + + "/sang" = { + path = "/srv/sang"; + + access = { + rw = [ "bug" "sang" ]; + }; + + flags = { + fk = 4; + scan = 60; + }; + }; + }; + + openFilesLimit = 8192; + }; + }; + }; +} diff --git a/modules/services/glances.nix b/modules/services/glances.nix new file mode 100644 index 0000000..7c67e9b --- /dev/null +++ b/modules/services/glances.nix @@ -0,0 +1,44 @@ +{ + den.aspects.glances = { + nixos = { pkgs, ... }: { + environment.systemPackages = [ pkgs.glances ]; + + users.users.glances = { + isSystemUser = true; + group = "glances"; + home = "/var/lib/glances"; + createHome = true; + }; + + users.groups.glances = {}; + + systemd.services.glances-web = { + description = "glances web interface"; + after = [ "network-online.target" ]; + wantedBy = [ "multi-user.target" ]; + + serviceConfig = { + User = "glances"; + Group = "glances"; + + ExecStart = '' + ${pkgs.glances}/bin/glances \ + -w \ + -p 61208 \ + -B 0.0.0.0 + ''; + + Restart = "always"; + RestartSec = 5; + + NoNewPrivileges = true; + PrivateTmp = true; + ProtectSystem = "strict"; + ProtectHome = true; + LockPersonality = true; + MemoryDenyWriteExecute = true; + }; + }; + }; + }; +} diff --git a/modules/services/invidious.nix b/modules/services/invidious.nix new file mode 100644 index 0000000..5082502 --- /dev/null +++ b/modules/services/invidious.nix @@ -0,0 +1,65 @@ +{ + den.aspects.invidious = { + nixos = { pkgs, lib, ... }: let + companionPort = 8282; + companionPath = "/companion"; + companionKey = "kKg3RKeZjE7frmvw"; + in { + virtualisation.podman.enable = true; + virtualisation.oci-containers.backend = lib.mkDefault "podman"; + + virtualisation.oci-containers.containers.invidious-companion = { + image = "quay.io/invidious/invidious-companion:latest"; + extraOptions = [ "--network=host" "--pull=always" ]; + + environment = { + SERVER_SECRET_KEY = companionKey; + HOST = "127.0.0.1"; + PORT = toString companionPort; + SERVER_BASE_URL = "http://127.0.0.1:${toString companionPort}"; + + # HTTP_PROXY = "http://proxy.example:3128"; + # HTTPS_PROXY = "http://proxy.example:3128"; + # NO_PROXY = "127.0.0.1,localhost"; + }; + }; + + services.invidious = { + enable = true; + package = pkgs.invidious; + + address = "127.0.0.1"; + port = 3030; + + nginx.enable = false; + sig-helper.enable = false; + + settings = { + domain = "tube.bug.tools"; + https_only = true; + external_port = 443; + + use_pubsub_feeds = true; + use_innertube_for_captions = true; + + visitor_data = "Cgt6ZmQ4UEtOUkJJNCjwtcPMBjIKCgJVUxIEGgAgXA%3D%3D"; + po_token = "Mni77CY6tviRIrvQXWaz6OfDryNNzAlKeIj4m0N1SHIITM94AZ8R0fK2dfuYke5tjZJjD33c4jB94p1Wy_XKCJPNbSkE2dgzRPdP502Q8ufofOe6fd4hV-fZFitud_tZO_BcNa18nKgfnupVYgV8huPgaFu-RKyGPIU="; + + invidious_companion = [ + { private_url = "http://127.0.0.1:${toString companionPort}${companionPath}"; } + ]; + + popular_enabled = true; + + invidious_companion_key = companionKey; + }; + }; + + systemd.services.invidious = let dep = "podman-invidious-companion.service"; in { + wants = [ dep ]; + after = [ dep ]; + requires = [ dep ]; + }; + }; + }; +} diff --git a/modules/services/mailserver.nix b/modules/services/mailserver.nix new file mode 100644 index 0000000..230f246 --- /dev/null +++ b/modules/services/mailserver.nix @@ -0,0 +1,52 @@ +{ + den.aspects.mailserver = { + nixos = { + imports = [ + (builtins.fetchTarball { + url = "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver/-/archive/master.tar.gz"; + sha256 = "0rm5f749xakmkqrpkl5ay1pydbnlinr50pvwg1vm795js2infmj5"; + }) + ]; + + security.acme = { + acceptTerms = true; + defaults.email = "security@bug.tools"; + + certs."mail.bug.tools" = { + listenHTTP = "1360"; + }; + }; + + mailserver = { + enable = true; + + stateVersion = 3; + + fqdn = "mail.bug.tools"; + domains = [ "bug.tools" ]; + + x509.useACMEHost = "mail.bug.tools"; + + loginAccounts = { + "bug@bug.tools" = { + hashedPasswordFile = "/home/bug/mailserver/bug.passwd"; + aliases = [ + "admin@bug.tools" + "google@bug.tools" + "apple@bug.tools" + "roblox@bug.tools" + "twitch@bug.tools" + "discord@bug.tools" + "github@bug.tools" + "matrix@bug.tools" + ]; + }; + + "pare@bug.tools" = { + hashedPasswordFile = "/home/bug/mailserver/pare.passwd"; + }; + }; + }; + }; + }; +} diff --git a/modules/services/matrix.nix b/modules/services/matrix.nix new file mode 100644 index 0000000..8787c31 --- /dev/null +++ b/modules/services/matrix.nix @@ -0,0 +1,7 @@ +{ + den.aspects.matrix = { + nixos = { + + }; + }; +} diff --git a/modules/services/portmap.nix b/modules/services/portmap.nix new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/modules/services/portmap.nix @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/modules/services/redlib.nix b/modules/services/redlib.nix new file mode 100644 index 0000000..abe987a --- /dev/null +++ b/modules/services/redlib.nix @@ -0,0 +1,37 @@ +{ + den.aspects.redlib = { + nixos = { + services.redlib = { + enable = true; + + address = "127.0.0.1"; + port = 8975; + openFirewall = false; + + settings = { + SFW_ONLY = "off"; + ROBOTS_DISABLE_INDEXING = "on"; + ENABLE_RSS = "on"; + THEME = "system"; + FRONT_PAGE = "default"; + LAYOUT = "card"; + WIDE = "on"; + POST_SORT = "hot"; + COMMENT_SORT = "confidence"; + BLUR_SPOILER = "off"; + SHOW_NSFW = "on"; + BLUR_NSFW = "off"; + USE_HLS = "on"; + HIDE_HLS_NOTIFICATION = "off"; + AUTOPLAY_VIDEOS = "off"; + HIDE_AWARDS = "off"; + DISABLE_VISIT_REDDIT_CONFIRMATION = "off"; + HIDE_SCORE = "off"; + HIDE_SIDEBAR_AND_SUMMARY = "off"; + FIXED_NAVBAR = "on"; + REMOVE_DEFAULT_FEEDS = "off"; + }; + }; + }; + }; +} diff --git a/modules/services/searxng/searxng.nix b/modules/services/searxng/searxng.nix new file mode 100644 index 0000000..68c3494 --- /dev/null +++ b/modules/services/searxng/searxng.nix @@ -0,0 +1,25 @@ +{ + den.aspects.searxng = { + nixos = { + systemd.services.searx-init.serviceConfig.EnvironmentFile = [ + "/home/bug/.searxng.env" + ]; + + services.searx = { + enable = true; + redisCreateLocally = false; + configureUwsgi = false; + settingsFile = ./searxng.yml; + environmentFile = "/home/bug/.searxng.env"; + + settings = { + general.instance_name = "search.bug.tools"; + + server.port = 8888; + server.bind_address = "0.0.0.0"; + server.secret_key = "$SEARX_SECRET_KEY"; + }; + }; + }; + }; +} diff --git a/modules/services/searxng/searxng.yml b/modules/services/searxng/searxng.yml new file mode 100644 index 0000000..cbeac08 --- /dev/null +++ b/modules/services/searxng/searxng.yml @@ -0,0 +1,2826 @@ +general: + # Debug mode, only for development. Is overwritten by ${SEARXNG_DEBUG} + debug: false + # displayed name + instance_name: "search.bug.tools" + # For example: https://example.com/privacy + privacypolicy_url: false + # use true to use your own donation page written in searx/info/en/donate.md + # use false to disable the donation link + donation_url: false + # mailto:contact@example.com + contact_url: false + # record stats + enable_metrics: true + # expose stats in open metrics format at /metrics + # leave empty to disable (no password set) + # open_metrics: + open_metrics: '' + +brand: + new_issue_url: https://github.com/searxng/searxng/issues/new + docs_url: https://docs.searxng.org/ + public_instances: https://searx.space + wiki_url: https://github.com/searxng/searxng/wiki + issue_url: https://github.com/searxng/searxng/issues + custom: + # # Custom entries in the footer: [title]: [link] + links: + Glance: https://glance.m4rx.cc + GitHub NixOS Config: https://github.com/xerhaxs/nixos + # Uptime: https://uptime.searxng.org/history/darmarit-org + # About: "https://searxng.org" + +search: + # Filter results. 0: None, 1: Moderate, 2: Strict + safe_search: 0 + # Existing autocomplete backends: "360search", "baidu", "brave", "dbpedia", "duckduckgo", "google", "yandex", + # "mwmbl", "naver", "seznam", "sogou", "startpage", "stract", "swisscows", "quark", "qwant", "wikipedia" - + # leave blank to turn it off by default. + autocomplete: "qwant" + # minimun characters to type before autocompleter starts + autocomplete_min: 3 + # backend for the favicon near URL in search results. + # Available resolvers: "allesedv", "duckduckgo", "google", "yandex" - leave blank to turn it off by default. + favicon_resolver: "duckduckgo" + # Default search language - leave blank to detect from browser information or + # use codes from 'languages.py' + default_lang: "auto" + # max_page: 0 # if engine supports paging, 0 means unlimited numbers of pages + # Available languages + # languages: + # - all + # - en + # - en-US + # - de + # - it-IT + # - fr + # - fr-BE + # ban time in seconds after engine errors + ban_time_on_fail: 5 + # max ban time in seconds after engine errors + max_ban_time_on_fail: 120 + suspended_times: + # Engine suspension time after error (in seconds; set to 0 to disable) + # For error "Access denied" and "HTTP error [402, 403]" + SearxEngineAccessDenied: 86400 + # For error "CAPTCHA" + SearxEngineCaptcha: 86400 + # For error "Too many request" and "HTTP error 429" + SearxEngineTooManyRequests: 3600 + # Cloudflare CAPTCHA + cf_SearxEngineCaptcha: 1296000 + cf_SearxEngineAccessDenied: 86400 + # ReCAPTCHA + recaptcha_SearxEngineCaptcha: 604800 + + # remove format to deny access, use lower case. + # formats: [html, csv, json, rss] + formats: + - html + +server: + # Is overwritten by ${SEARXNG_PORT} and ${SEARXNG_BIND_ADDRESS} + port: 8888 + bind_address: "127.0.0.1" + # public URL of the instance, to ensure correct inbound links. Is overwritten + # by ${SEARXNG_BASE_URL}. + base_url: false # "http://example.com/location" + # rate limit the number of request on the instance, block some bots. + # Is overwritten by ${SEARXNG_LIMITER} + limiter: false + # enable features designed only for public instances. + # Is overwritten by ${SEARXNG_PUBLIC_INSTANCE} + public_instance: false + + # If your instance owns a /etc/searxng/settings.yml file, then set the following + # values there. + + secret_key: "${SEARX_SECRET_KEY}" # Is overwritten by ${SEARXNG_SECRET} + # Proxy image results through SearXNG. Is overwritten by ${SEARXNG_IMAGE_PROXY} + image_proxy: false + # 1.0 and 1.1 are supported + http_protocol_version: "1.1" + # POST queries are "more secure!" but are also the source of hard-to-locate + # annoyances, which is why GET may be better for end users and their browsers. + # see https://github.com/searxng/searxng/pull/3619 + # Is overwritten by ${SEARXNG_METHOD} + method: "POST" + default_http_headers: + X-Content-Type-Options: nosniff + X-Download-Options: noopen + X-Robots-Tag: noindex, nofollow + Referrer-Policy: no-referrer + +valkey: + # URL to connect valkey database. Is overwritten by ${SEARXNG_VALKEY_URL}. + # https://docs.searxng.org/admin/settings/settings_valkey.html#settings-valkey + # url: valkey://localhost:6379/0 + url: false + +ui: + # Custom static path - leave it blank if you didn't change + static_path: "" + # Custom templates path - leave it blank if you didn't change + templates_path: "" + # query_in_title: When true, the result page's titles contains the query + # it decreases the privacy, since the browser can records the page titles. + query_in_title: true + # ui theme + default_theme: simple + # center the results ? + center_alignment: false + # URL prefix of the internet archive, don't forget trailing slash (if needed). + # cache_url: "https://webcache.googleusercontent.com/search?q=cache:" + # Default interface locale - leave blank to detect from browser information or + # use codes from the 'locales' config section + default_locale: "" + # Open result links in a new tab by default + # results_on_new_tab: false + theme_args: + # style of simple theme: auto, light, dark, black + simple_style: auto + # Perform search immediately if a category selected. + # Disable to select multiple categories at once and start the search manually. + search_on_category_select: true + # Hotkeys: default or vim + hotkeys: default + # URL formatting: pretty, full or host + url_formatting: full + +# Lock arbitrary settings on the preferences page. +# +# preferences: +# lock: +# - categories +# - language +# - autocomplete +# - favicon +# - safesearch +# - method +# - doi_resolver +# - locale +# - theme +# - results_on_new_tab +# - search_on_category_select +# - method +# - image_proxy +# - query_in_title + +# communication with search engines +# +outgoing: + # default timeout in seconds, can be override by engine + request_timeout: 3.0 + # the maximum timeout in seconds + # max_request_timeout: 10.0 + # suffix of searxng_useragent, could contain information like an email address + # to the administrator + useragent_suffix: "" + # The maximum number of concurrent connections that may be established. + pool_connections: 100 + # Allow the connection pool to maintain keep-alive connections below this + # point. + pool_maxsize: 20 + # See https://www.python-httpx.org/http2/ + enable_http2: true + # uncomment below section if you want to use a custom server certificate + # see https://www.python-httpx.org/advanced/#changing-the-verification-defaults + # and https://www.python-httpx.org/compatibility/#ssl-configuration + # verify: ~/.mitmproxy/mitmproxy-ca-cert.cer + # + # uncomment below section if you want to use a proxyq see: SOCKS proxies + # https://2.python-requests.org/en/latest/user/advanced/#proxies + # are also supported: see + # https://2.python-requests.org/en/latest/user/advanced/#socks + # + # proxies: + # all://: + # - http://proxy1:8080 + # - http://proxy2:8080 + # + # using_tor_proxy: true + # + # Extra seconds to add in order to account for the time taken by the proxy + # + # extra_proxy_timeout: 10 + # + # uncomment below section only if you have more than one network interface + # which can be the source of outgoing search requests + # + # source_ips: + # - 1.1.1.1 + # - 1.1.1.2 + # - fe80::/126 + + +# Plugin configuration, for more details see +# https://docs.searxng.org/admin/settings/settings_plugins.html +# +plugins: + + searx.plugins.calculator.SXNGPlugin: + active: false + + #searx.plugins.infinite_scroll.SXNGPlugin: + # active: false + + searx.plugins.hash_plugin.SXNGPlugin: + active: true + + searx.plugins.self_info.SXNGPlugin: + active: true + + searx.plugins.unit_converter.SXNGPlugin: + active: true + + searx.plugins.ahmia_filter.SXNGPlugin: + active: true + + searx.plugins.hostnames.SXNGPlugin: + active: true + + searx.plugins.time_zone.SXNGPlugin: + active: true + + searx.plugins.oa_doi_rewrite.SXNGPlugin: + active: false + + searx.plugins.tor_check.SXNGPlugin: + active: false + + searx.plugins.tracker_url_remover.SXNGPlugin: + active: true + + +# Configuration of the "Hostnames plugin": +# +# hostnames: +# replace: +# '(.*\.)?youtube\.com$': 'yt.example.com' +# '(.*\.)?youtu\.be$': 'yt.example.com' +# '(.*\.)?reddit\.com$': 'teddit.example.com' +# '(.*\.)?redd\.it$': 'teddit.example.com' +# '(www\.)?twitter\.com$': 'nitter.example.com' +# remove: +# - '(.*\.)?facebook.com$' +# low_priority: +# - '(.*\.)?google(\..*)?$' +# high_priority: +# - '(.*\.)?wikipedia.org$' +# +# Alternatively you can use external files for configuring the "Hostnames plugin": +# +# hostnames: +# replace: 'rewrite-hosts.yml' +# +# Content of 'rewrite-hosts.yml' (place the file in the same directory as 'settings.yml'): +# '(.*\.)?youtube\.com$': 'yt.example.com' +# '(.*\.)?youtu\.be$': 'yt.example.com' +# + +checker: + # disable checker when in debug mode + off_when_debug: true + + # use "scheduling: {}" to disable scheduling + # scheduling: interval or int + + # to activate the scheduler: + # * uncomment "scheduling" section + # * add "cache2 = name=searxngcache,items=2000,blocks=2000,blocksize=4096,bitmap=1" + # to your uwsgi.ini + + # scheduling: + # start_after: [300, 1800] # delay to start the first run of the checker + # every: [86400, 90000] # how often the checker runs + + # additional tests: only for the YAML anchors (see the engines section) + # + additional_tests: + rosebud: &test_rosebud + matrix: + query: rosebud + lang: en + result_container: + - not_empty + - ['one_title_contains', 'citizen kane'] + test: + - unique_results + + android: &test_android + matrix: + query: ['android'] + lang: ['en', 'de'] + result_container: + - not_empty + - ['one_title_contains', 'google'] + test: + - unique_results + + # tests: only for the YAML anchors (see the engines section) + tests: + infobox: &tests_infobox + infobox: + matrix: + query: ["linux", "new york", "bbc"] + result_container: + - has_infobox + +categories_as_tabs: + general: + images: + videos: + #news: + map: + #music: + it: + science: + files: + social media: + +engines: + - name: 360search + engine: 360search + shortcut: 360so + disabled: true + + - name: 360search videos + engine: 360search_videos + shortcut: 360sov + disabled: true + + - name: 9gag + engine: 9gag + shortcut: 9g + disabled: true + + - name: acfun + engine: acfun + shortcut: acf + disabled: true + + - name: adobe stock + engine: adobe_stock + shortcut: asi + categories: ["images"] + # https://docs.searxng.org/dev/engines/online/adobe_stock.html + adobe_order: relevance + adobe_content_types: ["photo", "illustration", "zip_vector", "template", "3d", "image"] + timeout: 6 + disabled: true + + - name: adobe stock video + engine: adobe_stock + shortcut: asv + network: adobe stock + categories: ["videos"] + adobe_order: relevance + adobe_content_types: ["video"] + timeout: 6 + disabled: true + + - name: adobe stock audio + engine: adobe_stock + shortcut: asa + network: adobe stock + categories: ["music"] + adobe_order: relevance + adobe_content_types: ["audio"] + timeout: 6 + disabled: true + + - name: astrophysics data system + engine: astrophysics_data_system + shortcut: ads + # read https://docs.searxng.org/dev/engines/online/astrophysics_data_system.html + api_key: "" + inactive: true + + - name: alpine linux packages + engine: alpinelinux + disabled: true + shortcut: alp + + - name: annas archive + engine: annas_archive + disabled: true + shortcut: aa + timeout: 5 + + - name: ansa + engine: ansa + shortcut: ans + disabled: true + + # - name: annas articles + # engine: annas_archive + # shortcut: aaa + # # https://docs.searxng.org/dev/engines/online/annas_archive.html + # aa_content: 'magazine' # book_fiction, book_unknown, book_nonfiction, book_comic + # aa_ext: 'pdf' # pdf, epub, .. + # aa_sort: oldest' # newest, oldest, largest, smallest + + - name: apk mirror + engine: apkmirror + timeout: 4.0 + shortcut: apkm + disabled: true + + - name: apple app store + engine: apple_app_store + shortcut: aps + disabled: true + + # Requires Tor + - name: ahmia + engine: ahmia + categories: onions + enable_http: true + shortcut: ah + + - name: anaconda + engine: xpath + paging: true + first_page_num: 0 + search_url: https://anaconda.org/search?q={query}&page={pageno} + results_xpath: //tbody/tr + url_xpath: ./td/h5/a[last()]/@href + title_xpath: ./td/h5 + content_xpath: ./td[h5]/text() + categories: it + timeout: 6.0 + shortcut: conda + disabled: true + + - name: arch linux wiki + engine: archlinux + shortcut: al + + - name: nixos wiki + engine: mediawiki + shortcut: nixw + base_url: https://wiki.nixos.org/ + search_type: text + categories: [it, software wikis] + + - name: artic + engine: artic + shortcut: arc + timeout: 4.0 + disabled: true + + - name: arxiv + engine: arxiv + categories: "science" + shortcut: arx + + - name: ask + engine: ask + shortcut: ask + disabled: true + + # - name: azure + # engine: azure + # shortcut: az + # categories: [it, cloud] + # azure_tenant_id: "your_tenant_id" + # azure_client_id: "your_client_id" + # azure_client_secret: "your_client_secret" + # disabled: true + + # tmp suspended: dh key too small + # - name: base + # engine: base + # shortcut: bs + + - name: bandcamp + engine: bandcamp + shortcut: bc + categories: music + disabled: true + + - name: baidu + baidu_category: general + categories: [general] + engine: baidu + shortcut: bd + disabled: true + + - name: baidu images + baidu_category: images + categories: [images] + engine: baidu + shortcut: bdi + disabled: true + + - name: baidu kaifa + baidu_category: it + categories: [it] + engine: baidu + shortcut: bdk + disabled: true + + - name: wikipedia + engine: wikipedia + shortcut: wp + # add "list" to the array to get results in the results list + display_type: ["infobox"] + categories: [general] + + - name: bilibili + engine: bilibili + shortcut: bil + disabled: true + + - name: bing + engine: bing + shortcut: bi + disabled: true + + - name: bing images + engine: bing_images + shortcut: bii + + - name: bing news + engine: bing_news + shortcut: bin + disabled: true + + - name: bing videos + engine: bing_videos + shortcut: biv + disabled: true + + - name: bitchute + engine: bitchute + shortcut: bit + disabled: true + + - name: bitbucket + engine: xpath + paging: true + search_url: https://bitbucket.org/repo/all/{pageno}?name={query} + url_xpath: //article[@class="repo-summary"]//a[@class="repo-link"]/@href + title_xpath: //article[@class="repo-summary"]//a[@class="repo-link"] + content_xpath: //article[@class="repo-summary"]/p + categories: [it, repos] + timeout: 4.0 + disabled: true + shortcut: bb + about: + website: https://bitbucket.org/ + wikidata_id: Q2493781 + official_api_documentation: https://developer.atlassian.com/bitbucket + use_official_api: false + require_api_key: false + results: HTML + + - name: bpb + engine: bpb + shortcut: bpb + disabled: true + + - name: btdigg + engine: btdigg + shortcut: bt + disabled: true + + - name: openverse + engine: openverse + categories: images + shortcut: opv + + - name: media.ccc.de + engine: ccc_media + shortcut: c3tv + # We don't set language: de here because media.ccc.de is not just + # for a German audience. It contains many English videos and many + # German videos have English subtitles. + disabled: true + + - name: chefkoch + engine: chefkoch + shortcut: chef + # to show premium or plus results too: + # skip_premium: false + disabled: true + + # WARNING: links from chinaso.com voilate users privacy + # Before activate these engines its mandatory to read + # - https://github.com/searxng/searxng/issues/4694 + # - https://docs.searxng.org/dev/engines/online/chinaso.html + + - name: chinaso news + engine: chinaso + shortcut: chinaso + categories: [news] + chinaso_category: news + chinaso_news_source: all + disabled: true + inactive: true + + - name: chinaso images + engine: chinaso + network: chinaso news + shortcut: chinasoi + categories: [images] + chinaso_category: images + disabled: true + inactive: true + + - name: chinaso videos + engine: chinaso + network: chinaso news + shortcut: chinasov + categories: [videos] + chinaso_category: videos + disabled: true + inactive: true + + - name: cloudflareai + engine: cloudflareai + shortcut: cfai + # get api token and accont id from https://developers.cloudflare.com/workers-ai/get-started/rest-api/ + cf_account_id: 'your_cf_accout_id' + cf_ai_api: 'your_cf_api' + # create your ai gateway by https://developers.cloudflare.com/ai-gateway/get-started/creating-gateway/ + cf_ai_gateway: 'your_cf_ai_gateway_name' + # find the model name from https://developers.cloudflare.com/workers-ai/models/#text-generation + cf_ai_model: 'ai_model_name' + # custom your preferences + # cf_ai_model_display_name: 'Cloudflare AI' + # cf_ai_model_assistant: 'prompts_for_assistant_role' + # cf_ai_model_system: 'prompts_for_system_role' + timeout: 30 + disabled: true + + - name: core.ac.uk + engine: core + shortcut: cor + # read https://docs.searxng.org/dev/engines/online/core.html + api_key: "" + inactive: true + + - name: crossref + engine: crossref + shortcut: cr + timeout: 30 + disabled: true + + - name: crowdview + engine: json_engine + shortcut: cv + categories: general + paging: false + search_url: https://crowdview-next-js.onrender.com/api/search-v3?query={query} + results_query: results + url_query: link + title_query: title + content_query: snippet + title_html_to_text: true + content_html_to_text: true + disabled: true + about: + website: https://crowdview.ai/ + + - name: yep + engine: yep + shortcut: yep + categories: general + search_type: web + timeout: 5 + disabled: true + + - name: yep images + engine: yep + shortcut: yepi + categories: images + search_type: images + disabled: true + + - name: yep news + engine: yep + shortcut: yepn + categories: news + search_type: news + disabled: true + + - name: currency + engine: currency_convert + shortcut: cc + + - name: deezer + engine: deezer + shortcut: dz + disabled: true + + - name: destatis + engine: destatis + shortcut: destat + disabled: true + + - name: deviantart + engine: deviantart + shortcut: da + timeout: 3.0 + disabled: true + + - name: devicons + engine: devicons + shortcut: di + timeout: 3.0 + + - name: ddg definitions + engine: duckduckgo_definitions + shortcut: ddd + weight: 2 + disabled: true + tests: *tests_infobox + + # cloudflare protected + # - name: digbt + # engine: digbt + # shortcut: dbt + # timeout: 6.0 + # disabled: true + + - name: docker hub + engine: docker_hub + shortcut: dh + categories: [it, packages] + + - name: encyclosearch + engine: json_engine + shortcut: es + categories: general + paging: true + search_url: https://encyclosearch.org/encyclosphere/search?q={query}&page={pageno}&resultsPerPage=15 + results_query: Results + url_query: SourceURL + title_query: Title + content_query: Description + disabled: true + about: + website: https://encyclosearch.org + official_api_documentation: https://encyclosearch.org/docs/#/rest-api + use_official_api: true + require_api_key: false + results: JSON + + - name: erowid + engine: xpath + paging: true + first_page_num: 0 + page_size: 30 + search_url: https://www.erowid.org/search.php?q={query}&s={pageno} + url_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/@href + title_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/text() + content_xpath: //dl[@class="results-list"]/dd[@class="result-details"] + categories: [] + shortcut: ew + disabled: true + about: + website: https://www.erowid.org/ + wikidata_id: Q1430691 + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + # - name: elasticsearch + # shortcut: els + # engine: elasticsearch + # base_url: http://localhost:9200 + # username: elastic + # password: changeme + # index: my-index + # enable_http: true + # # available options: match, simple_query_string, term, terms, custom + # query_type: match + # # if query_type is set to custom, provide your query here + # # custom_query_json: {"query":{"match_all": {}}} + # # show_metadata: false + # disabled: true + + - name: wikidata + engine: wikidata + shortcut: wd + timeout: 3.0 + weight: 2 + # add "list" to the array to get results in the results list + display_type: ["infobox"] + tests: *tests_infobox + categories: [general] + + - name: duckduckgo + engine: duckduckgo + shortcut: ddg + + - name: duckduckgo images + engine: duckduckgo_extra + categories: [images, web] + ddg_category: images + shortcut: ddi + disabled: true + + - name: duckduckgo videos + engine: duckduckgo_extra + categories: [videos, web] + ddg_category: videos + shortcut: ddv + disabled: true + + - name: duckduckgo news + engine: duckduckgo_extra + categories: [news, web] + ddg_category: news + shortcut: ddn + disabled: true + + - name: duckduckgo weather + engine: duckduckgo_weather + shortcut: ddw + disabled: true + + - name: apple maps + engine: apple_maps + shortcut: apm + disabled: true + timeout: 5.0 + + - name: emojipedia + engine: emojipedia + timeout: 4.0 + shortcut: em + disabled: true + + - name: tineye + engine: tineye + shortcut: tin + timeout: 9.0 + disabled: true + + - name: etymonline + engine: xpath + paging: true + search_url: https://etymonline.com/search?page={pageno}&q={query} + url_xpath: //a[contains(@class, "word__name--")]/@href + title_xpath: //a[contains(@class, "word__name--")] + content_xpath: //section[contains(@class, "word__defination")] + first_page_num: 1 + shortcut: et + categories: [dictionaries] + about: + website: https://www.etymonline.com/ + wikidata_id: Q1188617 + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + # - name: ebay + # engine: ebay + # shortcut: eb + # base_url: 'https://www.ebay.com' + # disabled: true + # timeout: 5 + + - name: 1x + engine: www1x + shortcut: 1x + timeout: 3.0 + disabled: true + + - name: fdroid + engine: fdroid + shortcut: fd + disabled: true + + - name: findthatmeme + engine: findthatmeme + shortcut: ftm + disabled: true + + - name: flickr + categories: images + shortcut: fl + # You can use the engine using the official stable API, but you need an API + # key, see: https://www.flickr.com/services/apps/create/ + # engine: flickr + # api_key: 'apikey' # required! + # Or you can use the html non-stable engine, activated by default + engine: flickr_noapi + + - name: free software directory + engine: mediawiki + shortcut: fsd + categories: [it, software wikis] + base_url: https://directory.fsf.org/ + search_type: title + timeout: 5.0 + disabled: true + about: + website: https://directory.fsf.org/ + wikidata_id: Q2470288 + + # - name: freesound + # engine: freesound + # shortcut: fnd + # disabled: true + # timeout: 15.0 + # API key required, see: https://freesound.org/docs/api/overview.html + # api_key: MyAPIkey + + - name: frinkiac + engine: frinkiac + shortcut: frk + disabled: true + + - name: fyyd + engine: fyyd + shortcut: fy + timeout: 8.0 + disabled: true + + - name: geizhals + engine: geizhals + shortcut: geiz + disabled: true + + - name: genius + engine: genius + shortcut: gen + disabled: true + + - name: gentoo + engine: mediawiki + shortcut: ge + categories: ["it", "software wikis"] + base_url: "https://wiki.gentoo.org/" + api_path: "api.php" + search_type: text + timeout: 10 + disabled: true + + - name: gitlab + engine: gitlab + base_url: https://gitlab.com + shortcut: gl + about: + website: https://gitlab.com/ + wikidata_id: Q16639197 + disabled: true + + # - name: gnome + # engine: gitlab + # base_url: https://gitlab.gnome.org + # shortcut: gn + # about: + # website: https://gitlab.gnome.org + # wikidata_id: Q44316 + + - name: github + engine: github + shortcut: gh + + - name: github code + engine: github_code + shortcut: ghc + disabled: true + ghc_auth: + # type is one of: + # * none + # * personal_access_token + # * bearer + # When none is passed, the token is not requried. + type: "none" + token: "token" + # specify whether to highlight the matching lines to the query + ghc_highlight_matching_lines: true + ghc_strip_new_lines: true + ghc_strip_whitespace: false + timeout: 10.0 + + - name: codeberg + # https://docs.searxng.org/dev/engines/online/gitea.html + engine: gitea + base_url: https://codeberg.org + shortcut: cb + disabled: true + + - name: gitea.com + engine: gitea + base_url: https://gitea.com + shortcut: gitea + disabled: true + + - name: goodreads + engine: goodreads + shortcut: good + timeout: 4.0 + disabled: true + + - name: google + engine: google + shortcut: go + # additional_tests: + # android: *test_android + disabled: true + + - name: google images + engine: google_images + shortcut: goi + # additional_tests: + # android: *test_android + # dali: + # matrix: + # query: ['Dali Christ'] + # lang: ['en', 'de', 'fr', 'zh-CN'] + # result_container: + # - ['one_title_contains', 'Salvador'] + disabled: true + + - name: google news + engine: google_news + shortcut: gon + # additional_tests: + # android: *test_android + disabled: true + + - name: google videos + engine: google_videos + shortcut: gov + # additional_tests: + # android: *test_android + + - name: google scholar + engine: google_scholar + categories: "science" + shortcut: gos + + - name: google play apps + engine: google_play + categories: [files, apps] + shortcut: gpa + play_categ: apps + disabled: true + + - name: google play movies + engine: google_play + categories: videos + shortcut: gpm + play_categ: movies + disabled: true + + - name: grokipedia + engine: grokipedia + shortcut: gp + disabled: true + inactive: true + + - name: material icons + engine: material_icons + shortcut: mi + disabled: true + + - name: habrahabr + engine: xpath + paging: true + search_url: https://habr.com/en/search/page{pageno}/?q={query} + results_xpath: //article[contains(@class, "tm-articles-list__item")] + url_xpath: .//a[@class="tm-title__link"]/@href + title_xpath: .//a[@class="tm-title__link"] + content_xpath: .//div[contains(@class, "article-formatted-body")] + categories: it + timeout: 4.0 + disabled: true + shortcut: habr + about: + website: https://habr.com/ + wikidata_id: Q4494434 + official_api_documentation: https://habr.com/en/docs/help/api/ + use_official_api: false + require_api_key: false + results: HTML + + - name: hackernews + engine: hackernews + shortcut: hn + disabled: true + + - name: hex + engine: hex + shortcut: hex + disabled: true + # Valid values: name inserted_at updated_at total_downloads recent_downloads + sort_criteria: "recent_downloads" + page_size: 10 + + - name: crates.io + engine: crates + shortcut: crates + disabled: true + timeout: 6.0 + disabled: true + + - name: hoogle + engine: xpath + search_url: https://hoogle.haskell.org/?hoogle={query} + results_xpath: '//div[@class="result"]' + title_xpath: './/div[@class="ans"]//a' + url_xpath: './/div[@class="ans"]//a/@href' + content_xpath: './/div[@class="from"]' + page_size: 20 + categories: [it, packages] + shortcut: ho + about: + website: https://hoogle.haskell.org/ + wikidata_id: Q34010 + official_api_documentation: https://hackage.haskell.org/api + use_official_api: false + require_api_key: false + results: JSON + disabled: true + + - name: il post + engine: il_post + shortcut: pst + disabled: true + + - name: huggingface + engine: huggingface + shortcut: hf + disabled: true + + - name: huggingface datasets + huggingface_endpoint: datasets + engine: huggingface + shortcut: hfd + disabled: true + + - name: huggingface spaces + huggingface_endpoint: spaces + engine: huggingface + shortcut: hfs + disabled: true + + - name: imdb + engine: imdb + shortcut: imdb + timeout: 6.0 + disabled: true + + - name: imgur + engine: imgur + shortcut: img + disabled: true + + - name: ina + engine: ina + shortcut: in + timeout: 6.0 + disabled: true + + # - name: invidious + # engine: invidious + # # if you want to use invidious with SearXNG you should setup one locally + # # https://github.com/searxng/searxng/issues/2722#issuecomment-2884993248 + # base_url: + # - https://invidious.example1.com + # - https://invidious.example2.com + # shortcut: iv + # timeout: 3.0 + + - name: ipernity + engine: ipernity + shortcut: ip + disabled: true + + - name: iqiyi + engine: iqiyi + shortcut: iq + disabled: true + + - name: jisho + engine: jisho + shortcut: js + timeout: 3.0 + disabled: true + + - name: kickass + engine: kickass + base_url: + - https://kickasstorrents.to + - https://kickasstorrents.cr + - https://kickasstorrent.cr + - https://kickass.sx + - https://kat.am + shortcut: kc + timeout: 4.0 + disabled: true + + - name: lemmy communities + engine: lemmy + lemmy_type: Communities + shortcut: leco + + - name: lemmy users + engine: lemmy + network: lemmy communities + lemmy_type: Users + shortcut: leus + + - name: lemmy posts + engine: lemmy + network: lemmy communities + lemmy_type: Posts + shortcut: lepo + + - name: lemmy comments + engine: lemmy + network: lemmy communities + lemmy_type: Comments + shortcut: lecom + + - name: library genesis + engine: xpath + # search_url: https://libgen.is/search.php?req={query} + search_url: https://libgen.rs/search.php?req={query} + url_xpath: //a[contains(@href,"book/index.php?md5")]/@href + title_xpath: //a[contains(@href,"book/")]/text()[1] + content_xpath: //td/a[1][contains(@href,"=author")]/text() + categories: files + timeout: 7.0 + disabled: true + shortcut: lg + about: + website: https://libgen.fun/ + wikidata_id: Q22017206 + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + - name: z-library + engine: zlibrary + shortcut: zlib + timeout: 7.0 + disabled: true + # https://github.com/searxng/searxng/issues/3610 + inactive: true + + - name: library of congress + engine: loc + shortcut: loc + categories: images + disabled: true + + - name: libretranslate + engine: libretranslate + # https://github.com/LibreTranslate/LibreTranslate?tab=readme-ov-file#mirrors + base_url: + - https://libretranslate.com/translate + # api_key: abc123 + shortcut: lt + disabled: true + + - name: lingva + engine: lingva + shortcut: lv + # set lingva instance in url, by default it will use the official instance + # url: https://lingva.thedaviddelta.com + disabled: true + + - name: lobste.rs + engine: xpath + search_url: https://lobste.rs/search?q={query}&what=stories&order=relevance + results_xpath: //li[contains(@class, "story")] + url_xpath: .//a[@class="u-url"]/@href + title_xpath: .//a[@class="u-url"] + content_xpath: .//a[@class="domain"] + categories: it + shortcut: lo + timeout: 5.0 + disabled: true + about: + website: https://lobste.rs/ + wikidata_id: Q60762874 + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + - name: lucide + engine: lucide + shortcut: luc + timeout: 3.0 + disabled: true + + - name: marginalia + engine: marginalia + shortcut: mar + # To get an API key, please follow the instructions at + # - https://about.marginalia-search.com/article/api/ + # api_key: ... + disabled: true + inactive: true + + - name: mastodon users + engine: mastodon + mastodon_type: accounts + base_url: https://mastodon.social + shortcut: mau + disabled: true + + - name: mastodon hashtags + engine: mastodon + mastodon_type: hashtags + base_url: https://mastodon.social + shortcut: mah + disabled: true + + # - name: matrixrooms + # engine: mrs + # # https://docs.searxng.org/dev/engines/online/mrs.html + # # base_url: https://mrs-api-host + # shortcut: mtrx + # disabled: true + + - name: mdn + shortcut: mdn + engine: json_engine + categories: [it] + paging: true + search_url: https://developer.mozilla.org/api/v1/search?q={query}&page={pageno} + results_query: documents + url_query: mdn_url + url_prefix: https://developer.mozilla.org + title_query: title + content_query: summary + about: + website: https://developer.mozilla.org + wikidata_id: Q3273508 + official_api_documentation: null + use_official_api: false + require_api_key: false + results: JSON + + - name: metacpan + engine: metacpan + shortcut: cpan + disabled: true + number_of_results: 20 + disabled: true + + # https://docs.searxng.org/dev/engines/offline/search-indexer-engines.html#module-searx.engines.meilisearch + # - name: meilisearch + # engine: meilisearch + # shortcut: mes + # enable_http: true + # base_url: http://localhost:7700 + # index: my-index + # auth_key: Bearer XXXX + + - name: microsoft learn + engine: microsoft_learn + shortcut: msl + disabled: true + + - name: mixcloud + engine: mixcloud + shortcut: mc + disabled: true + + # MongoDB engine + # Required dependency: pymongo + # - name: mymongo + # engine: mongodb + # shortcut: md + # exact_match_only: false + # host: '127.0.0.1' + # port: 27017 + # enable_http: true + # results_per_page: 20 + # database: 'business' + # collection: 'reviews' # name of the db collection + # key: 'name' # key in the collection to search for + + - name: mozhi + engine: mozhi + base_url: + - https://mozhi.aryak.me + - https://translate.bus-hit.me + - https://nyc1.mz.ggtyler.dev + # mozhi_engine: google - see https://mozhi.aryak.me for supported engines + timeout: 4.0 + shortcut: mz + disabled: true + + - name: mwmbl + engine: mwmbl + # api_url: https://api.mwmbl.org + shortcut: mwm + disabled: true + + - name: niconico + engine: niconico + shortcut: nico + disabled: true + + - name: npm + engine: npm + shortcut: npm + timeout: 5.0 + disabled: true + + - name: nyaa + engine: nyaa + shortcut: nt + disabled: true + + - name: mankier + engine: json_engine + search_url: https://www.mankier.com/api/v2/mans/?q={query} + results_query: results + url_query: url + title_query: name + content_query: description + categories: it + shortcut: man + about: + website: https://www.mankier.com/ + official_api_documentation: https://www.mankier.com/api + use_official_api: true + require_api_key: false + results: JSON + disabled: true + + - name: odysee + engine: odysee + shortcut: od + disabled: true + + - name: ollama + engine: ollama + shortcut: ollama + disabled: true + + - name: openairedatasets + engine: json_engine + paging: true + search_url: https://api.openaire.eu/search/datasets?format=json&page={pageno}&size=10&title={query} + results_query: response/results/result + url_query: metadata/oaf:entity/oaf:result/children/instance/webresource/url/$ + title_query: metadata/oaf:entity/oaf:result/title/$ + content_query: metadata/oaf:entity/oaf:result/description/$ + content_html_to_text: true + categories: "science" + shortcut: oad + timeout: 5.0 + about: + website: https://www.openaire.eu/ + wikidata_id: Q25106053 + official_api_documentation: https://api.openaire.eu/ + use_official_api: false + require_api_key: false + results: JSON + + - name: openairepublications + engine: json_engine + paging: true + search_url: https://api.openaire.eu/search/publications?format=json&page={pageno}&size=10&title={query} + results_query: response/results/result + url_query: metadata/oaf:entity/oaf:result/children/instance/webresource/url/$ + title_query: metadata/oaf:entity/oaf:result/title/$ + content_query: metadata/oaf:entity/oaf:result/description/$ + content_html_to_text: true + categories: science + shortcut: oap + timeout: 5.0 + about: + website: https://www.openaire.eu/ + wikidata_id: Q25106053 + official_api_documentation: https://api.openaire.eu/ + use_official_api: false + require_api_key: false + results: JSON + disabled: true + + - name: openalex + engine: openalex + shortcut: oa + # https://docs.searxng.org/dev/engines/online/openalex.html + # Recommended by OpenAlex: join the polite pool with an email address + # mailto: "[email protected]" + timeout: 5.0 + disabled: true + + - name: openclipart + engine: openclipart + shortcut: ocl + inactive: true + disabled: true + timeout: 30 + + - name: openlibrary + engine: openlibrary + shortcut: ol + timeout: 10 + disabled: true + + - name: openmeteo + engine: open_meteo + shortcut: om + disabled: true + + # - name: opensemanticsearch + # engine: opensemantic + # shortcut: oss + # base_url: 'http://localhost:8983/solr/opensemanticsearch/' + + - name: openstreetmap + engine: openstreetmap + shortcut: osm + + - name: openrepos + engine: xpath + paging: true + search_url: https://openrepos.net/search/node/{query}?page={pageno} + url_xpath: //li[@class="search-result"]//h3[@class="title"]/a/@href + title_xpath: //li[@class="search-result"]//h3[@class="title"]/a + content_xpath: //li[@class="search-result"]//div[@class="search-snippet-info"]//p[@class="search-snippet"] + categories: files + timeout: 4.0 + disabled: true + shortcut: or + about: + website: https://openrepos.net/ + wikidata_id: + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + - name: packagist + engine: json_engine + paging: true + search_url: https://packagist.org/search.json?q={query}&page={pageno} + results_query: results + url_query: url + title_query: name + content_query: description + categories: [it, packages] + disabled: true + timeout: 5.0 + shortcut: pack + about: + website: https://packagist.org + wikidata_id: Q108311377 + official_api_documentation: https://packagist.org/apidoc + use_official_api: true + require_api_key: false + results: JSON + + - name: pdbe + engine: pdbe + categories: "science" + shortcut: pdb + # Hide obsolete PDB entries. Default is not to hide obsolete structures + # hide_obsolete: false + + - name: photon + engine: photon + shortcut: ph + disabled: true + + - name: pinterest + engine: pinterest + shortcut: pin + + - name: piped + engine: piped + shortcut: ppd + categories: videos + piped_filter: videos + timeout: 3.0 + inactive: true + disabled: true + # URL to use as link and for embeds + frontend_url: https://srv.piped.video + # Instance will be selected randomly, for more see https://piped-instances.kavin.rocks/ + backend_url: + - https://pipedapi.ducks.party + - https://api.piped.private.coffee + + - name: piped.music + engine: piped + network: piped + shortcut: ppdm + categories: music + piped_filter: music_songs + timeout: 3.0 + inactive: true + disabled: true + + - name: piratebay + engine: piratebay + shortcut: tpb + # You may need to change this URL to a proxy if piratebay is blocked in your + # country + url: https://thepiratebay.org/ + timeout: 3.0 + + - name: pixabay images + engine: pixabay + pixabay_type: images + categories: images + shortcut: pixi + disabled: true + + - name: pixabay videos + engine: pixabay + pixabay_type: videos + categories: videos + shortcut: pixv + disabled: true + + - name: pixiv + shortcut: pv + engine: pixiv + disabled: true + inactive: true + remove_ai_images: false + pixiv_image_proxies: + - https://pximg.example.org + # A proxy is required to load the images. Hosting an image proxy server + # for Pixiv: + # --> https://pixivfe.pages.dev/hosting-image-proxy-server/ + # Proxies from public instances. Ask the public instances owners if they + # agree to receive traffic from SearXNG! + # --> https://codeberg.org/VnPower/PixivFE#instances + # --> https://github.com/searxng/searxng/pull/3192#issuecomment-1941095047 + # image proxy of https://pixiv.cat + # - https://i.pixiv.cat + # image proxy of https://www.pixiv.pics + # - https://pximg.cocomi.eu.org + # image proxy of https://pixivfe.exozy.me + # - https://pximg.exozy.me + # image proxy of https://pixivfe.ducks.party + # - https://pixiv.ducks.party + # image proxy of https://pixiv.perennialte.ch + # - https://pximg.perennialte.ch + + - name: podcastindex + engine: podcastindex + shortcut: podcast + disabled: true + + # Required dependency: psychopg2 + # - name: postgresql + # engine: postgresql + # database: postgres + # username: postgres + # password: postgres + # limit: 10 + # query_str: 'SELECT * from my_table WHERE my_column = %(query)s' + # shortcut : psql + + - name: presearch + engine: presearch + search_type: search + categories: [general, web] + shortcut: ps + timeout: 4.0 + disabled: true + + - name: presearch images + engine: presearch + network: presearch + search_type: images + categories: [images, web] + timeout: 4.0 + shortcut: psimg + disabled: true + + - name: presearch videos + engine: presearch + network: presearch + search_type: videos + categories: [general, web] + timeout: 4.0 + shortcut: psvid + disabled: true + + - name: presearch news + engine: presearch + network: presearch + search_type: news + categories: [news, web] + timeout: 4.0 + shortcut: psnews + disabled: true + + - name: pub.dev + engine: xpath + shortcut: pd + search_url: https://pub.dev/packages?q={query}&page={pageno} + paging: true + results_xpath: //div[contains(@class,"packages-item")] + url_xpath: ./div/h3/a/@href + title_xpath: ./div/h3/a + content_xpath: ./div/div/div[contains(@class,"packages-description")]/span + categories: [packages, it] + timeout: 3.0 + disabled: true + first_page_num: 1 + about: + website: https://pub.dev/ + official_api_documentation: https://pub.dev/help/api + use_official_api: false + require_api_key: false + results: HTML + + - name: public domain image archive + engine: public_domain_image_archive + shortcut: pdia + disabled: true + + - name: pubmed + engine: pubmed + categories: "science" + shortcut: pub + disabled: true + + - name: pypi + shortcut: pypi + engine: pypi + + - name: quark + quark_category: general + categories: [general] + engine: quark + shortcut: qk + disabled: true + + - name: quark images + quark_category: images + categories: [images] + engine: quark + shortcut: qki + disabled: true + + - name: qwant + qwant_categ: web + engine: qwant + shortcut: qw + categories: [general, web] + additional_tests: + rosebud: *test_rosebud + disabled: true + + - name: qwant news + qwant_categ: news + engine: qwant + shortcut: qwn + categories: news + network: qwant + + - name: qwant images + qwant_categ: images + engine: qwant + shortcut: qwi + categories: [images, web] + network: qwant + disabled: true + + - name: qwant videos + qwant_categ: videos + engine: qwant + shortcut: qwv + categories: [videos, web] + network: qwant + disabled: true + + # - name: library + # engine: recoll + # shortcut: lib + # base_url: 'https://recoll.example.org/' + # search_dir: '' + # mount_prefix: /export + # dl_prefix: 'https://download.example.org' + # timeout: 30.0 + # categories: files + # disabled: true + + # - name: recoll library reference + # engine: recoll + # base_url: 'https://recoll.example.org/' + # search_dir: reference + # mount_prefix: /export + # dl_prefix: 'https://download.example.org' + # shortcut: libr + # timeout: 30.0 + # categories: files + # disabled: true + + - name: radio browser + engine: radio_browser + shortcut: rb + disabled: true + + - name: reddit + engine: reddit + shortcut: re + page_size: 25 + + - name: reuters + engine: reuters + shortcut: reu + # https://docs.searxng.org/dev/engines/online/reuters.html + # sort_order = "relevance" + disabled: true + + - name: right dao + engine: xpath + paging: true + page_size: 12 + search_url: https://rightdao.com/search?q={query}&start={pageno} + results_xpath: //div[contains(@class, "description")] + url_xpath: ../div[contains(@class, "title")]/a/@href + title_xpath: ../div[contains(@class, "title")] + content_xpath: . + categories: general + shortcut: rd + disabled: true + about: + website: https://rightdao.com/ + use_official_api: false + require_api_key: false + results: HTML + + - name: rottentomatoes + engine: rottentomatoes + shortcut: rt + disabled: true + + # Required dependency: valkey + # - name: myvalkey + # shortcut : rds + # engine: valkey_server + # exact_match_only: false + # host: '127.0.0.1' + # port: 6379 + # enable_http: true + # password: '' + # db: 0 + + # tmp suspended: bad certificate + # - name: scanr structures + # shortcut: scs + # engine: scanr_structures + # disabled: true + + - name: searchmysite + engine: xpath + shortcut: sms + categories: general + paging: true + search_url: https://searchmysite.net/search/?q={query}&page={pageno} + results_xpath: //div[contains(@class,'search-result')] + url_xpath: .//a[contains(@class,'result-link')]/@href + title_xpath: .//span[contains(@class,'result-title-txt')]/text() + content_xpath: ./p[@id='result-hightlight'] + disabled: true + about: + website: https://searchmysite.net + + - name: selfhst icons + engine: selfhst + shortcut: si + disabled: true + + - name: sepiasearch + engine: sepiasearch + shortcut: sep + + - name: sogou + engine: sogou + shortcut: sogou + disabled: true + + - name: sogou images + engine: sogou_images + shortcut: sogoui + disabled: true + + - name: sogou videos + engine: sogou_videos + shortcut: sogouv + disabled: true + + - name: sogou wechat + engine: sogou_wechat + shortcut: sogouw + disabled: true + + - name: soundcloud + engine: soundcloud + shortcut: sc + disabled: true + + - name: stackoverflow + engine: stackexchange + shortcut: st + api_site: 'stackoverflow' + categories: [it, q&a] + + - name: askubuntu + engine: stackexchange + shortcut: ubuntu + api_site: 'askubuntu' + categories: [it, q&a] + + - name: superuser + engine: stackexchange + shortcut: su + api_site: 'superuser' + categories: [it, q&a] + + - name: discuss.python + engine: discourse + shortcut: dpy + base_url: 'https://discuss.python.org' + categories: [it, q&a] + disabled: true + + - name: caddy.community + engine: discourse + shortcut: caddy + base_url: 'https://caddy.community' + categories: [it, q&a] + disabled: true + + - name: pi-hole.community + engine: discourse + shortcut: pi + categories: [it, q&a] + base_url: 'https://discourse.pi-hole.net' + disabled: true + + - name: searchcode code + engine: searchcode_code + shortcut: scc + disabled: true + inactive: true + + # - name: searx + # engine: searx_engine + # shortcut: se + # instance_urls : + # - http://127.0.0.1:8888/ + # - ... + # disabled: true + + - name: semantic scholar + engine: semantic_scholar + categories: "science" + shortcut: se + disabled: true + + # Spotify needs API credentials + # - name: spotify + # engine: spotify + # shortcut: stf + # api_client_id: ******* + # api_client_secret: ******* + + # - name: solr + # engine: solr + # shortcut: slr + # base_url: http://localhost:8983 + # collection: collection_name + # sort: '' # sorting: asc or desc + # field_list: '' # comma separated list of field names to display on the UI + # default_fields: '' # default field to query + # query_fields: '' # query fields + # enable_http: true + + - name: springer nature + engine: springer + shortcut: springer + timeout: 5 + # read https://docs.searxng.org/dev/engines/online/springer.html + api_key: "" + inactive: true + disabled: true + + - name: startpage + engine: startpage + shortcut: sp + startpage_categ: web + categories: [general, web] + additional_tests: + rosebud: *test_rosebud + + - name: startpage news + engine: startpage + startpage_categ: news + categories: [news, web] + shortcut: spn + disabled: true + + - name: startpage images + engine: startpage + startpage_categ: images + categories: [images, web] + shortcut: spi + disabled: true + + - name: steam + engine: steam + shortcut: stm + disabled: true + + - name: tokyotoshokan + engine: tokyotoshokan + shortcut: tt + timeout: 6.0 + disabled: true + + - name: solidtorrents + engine: solidtorrents + shortcut: solid + timeout: 4.0 + base_url: + - https://solidtorrents.to + - https://bitsearch.to + disabled: true + + # For this demo of the sqlite engine download: + # https://liste.mediathekview.de/filmliste-v2.db.bz2 + # and unpack into searx/data/filmliste-v2.db + # Query to test: "!mediathekview concert" + # + # - name: mediathekview + # engine: sqlite + # shortcut: mediathekview + # categories: [general, videos] + # result_type: MainResult + # database: searx/data/filmliste-v2.db + # query_str: >- + # SELECT title || ' (' || time(duration, 'unixepoch') || ')' AS title, + # COALESCE( NULLIF(url_video_hd,''), NULLIF(url_video_sd,''), url_video) AS url, + # description AS content + # FROM film + # WHERE title LIKE :wildcard OR description LIKE :wildcard + # ORDER BY duration DESC + + - name: tagesschau + engine: tagesschau + # when set to false, display URLs from Tagesschau, and not the actual source + # (e.g. NDR, WDR, SWR, HR, ...) + use_source_url: true + shortcut: ts + disabled: true + + - name: tmdb + engine: xpath + paging: true + categories: movies + search_url: https://www.themoviedb.org/search?page={pageno}&query={query} + results_xpath: //div[contains(@class,"movie") or contains(@class,"tv")]//div[contains(@class,"card")] + url_xpath: .//div[contains(@class,"poster")]/a/@href + thumbnail_xpath: .//img/@src + title_xpath: .//div[contains(@class,"title")]//h2 + content_xpath: .//div[contains(@class,"overview")] + shortcut: tm + disabled: true + + # Requires Tor + - name: torch + engine: xpath + paging: true + search_url: + http://xmh57jrknzkhv6y3ls3ubitzfqnkrwxhopf5aygthi7d6rplyvk3noyd.onion/cgi-bin/omega/omega?P={query}&DEFAULTOP=and + results_xpath: //table//tr + url_xpath: ./td[2]/a + title_xpath: ./td[2]/b + content_xpath: ./td[2]/small + categories: onions + enable_http: true + shortcut: tch + + # TubeArchivist is a self-hosted Youtube archivist software. + # https://docs.searxng.org/dev/engines/online/tubearchivist.html + # + # - name: tubearchivist + # engine: tubearchivist + # shortcut: tuba + # base_url: + # ta_token: + # ta_link_to_mp4: false + + # torznab engine lets you query any torznab compatible indexer. Using this + # engine in combination with Jackett opens the possibility to query a lot of + # public and private indexers directly from SearXNG. More details at: + # https://docs.searxng.org/dev/engines/online/torznab.html + # + # - name: Torznab EZTV + # engine: torznab + # shortcut: eztv + # base_url: http://localhost:9117/api/v2.0/indexers/eztv/results/torznab + # enable_http: true # if using localhost + # api_key: xxxxxxxxxxxxxxx + # show_magnet_links: true + # show_torrent_files: false + # # https://github.com/Jackett/Jackett/wiki/Jackett-Categories + # torznab_categories: # optional + # - 2000 + # - 5000 + + # tmp suspended - too slow, too many errors + # - name: urbandictionary + # engine : xpath + # search_url : https://www.urbandictionary.com/define.php?term={query} + # url_xpath : //*[@class="word"]/@href + # title_xpath : //*[@class="def-header"] + # content_xpath: //*[@class="meaning"] + # shortcut: ud + + - name: unsplash + engine: unsplash + shortcut: us + disabled: true + + - name: yandex + engine: yandex + categories: general + search_type: web + shortcut: yd + + - name: yandex images + engine: yandex + network: yandex + categories: images + search_type: images + shortcut: ydi + disabled: true + + - name: yandex music + engine: yandex_music + network: yandex + shortcut: ydm + disabled: true + # https://yandex.com/support/music/access.html + + - name: yahoo + engine: yahoo + shortcut: yh + + - name: yahoo news + engine: yahoo_news + shortcut: yhn + disabled: true + + - name: youtube + shortcut: yt + # You can use the engine using the official stable API, but you need an API + # key See: https://console.developers.google.com/project + # + # engine: youtube_api + # api_key: 'apikey' # required! + # + # Or you can use the html non-stable engine, activated by default + engine: youtube_noapi + + - name: dailymotion + engine: dailymotion + shortcut: dm + + - name: vimeo + engine: vimeo + shortcut: vm + disabled: true + + - name: wiby + engine: json_engine + paging: true + search_url: https://wiby.me/json/?q={query}&p={pageno} + url_query: URL + title_query: Title + content_query: Snippet + categories: [general, web] + shortcut: wib + disabled: true + about: + website: https://wiby.me/ + + - name: wikibooks + engine: mediawiki + weight: 0.5 + shortcut: wb + categories: [general, wikimedia] + base_url: "https://{language}.wikibooks.org/" + search_type: text + disabled: true + about: + website: https://www.wikibooks.org/ + wikidata_id: Q367 + + - name: wikinews + engine: mediawiki + shortcut: wn + categories: [news, wikimedia] + base_url: "https://{language}.wikinews.org/" + search_type: text + srsort: create_timestamp_desc + about: + website: https://www.wikinews.org/ + wikidata_id: Q964 + + - name: wikiquote + engine: mediawiki + weight: 0.5 + shortcut: wq + categories: [general, wikimedia] + base_url: "https://{language}.wikiquote.org/" + search_type: text + disabled: true + additional_tests: + rosebud: *test_rosebud + about: + website: https://www.wikiquote.org/ + wikidata_id: Q369 + + - name: wikisource + engine: mediawiki + weight: 0.5 + shortcut: ws + categories: [general, wikimedia] + base_url: "https://{language}.wikisource.org/" + search_type: text + disabled: true + about: + website: https://www.wikisource.org/ + wikidata_id: Q263 + + - name: wikispecies + engine: mediawiki + shortcut: wsp + categories: [general, science, wikimedia] + base_url: "https://species.wikimedia.org/" + search_type: text + disabled: true + about: + website: https://species.wikimedia.org/ + wikidata_id: Q13679 + tests: + wikispecies: + matrix: + query: "Campbell, L.I. et al. 2011: MicroRNAs" + lang: en + result_container: + - not_empty + - ['one_title_contains', 'Tardigrada'] + test: + - unique_results + + - name: wiktionary + engine: mediawiki + shortcut: wt + categories: [dictionaries, wikimedia] + base_url: "https://{language}.wiktionary.org/" + search_type: text + about: + website: https://www.wiktionary.org/ + wikidata_id: Q151 + + - name: wikiversity + engine: mediawiki + weight: 0.5 + shortcut: wv + categories: [general, wikimedia] + base_url: "https://{language}.wikiversity.org/" + search_type: text + disabled: true + about: + website: https://www.wikiversity.org/ + wikidata_id: Q370 + + - name: wikivoyage + engine: mediawiki + weight: 0.5 + shortcut: wy + categories: [general, wikimedia] + base_url: "https://{language}.wikivoyage.org/" + search_type: text + disabled: true + about: + website: https://www.wikivoyage.org/ + wikidata_id: Q373 + + - name: wikicommons.images + engine: wikicommons + shortcut: wci + categories: images + wc_search_type: image + + - name: wikicommons.videos + engine: wikicommons + shortcut: wcv + categories: videos + wc_search_type: video + + - name: wikicommons.audio + engine: wikicommons + shortcut: wca + categories: music + wc_search_type: audio + + - name: wikicommons.files + engine: wikicommons + shortcut: wcf + categories: files + wc_search_type: file + + - name: wolframalpha + shortcut: wa + # You can use the engine using the official stable API, but you need an API + # key. See: https://products.wolframalpha.com/api/ + # + # engine: wolframalpha_api + # api_key: '' + # + # Or you can use the html non-stable engine, activated by default + engine: wolframalpha_noapi + timeout: 6.0 + categories: general + disabled: true + + - name: dictzone + engine: dictzone + shortcut: dc + + - name: mymemory translated + engine: translated + shortcut: tl + timeout: 5.0 + disabled: true + # You can use without an API key, but you are limited to 1000 words/day + # See: https://mymemory.translated.net/doc/usagelimits.php + # api_key: '' + + # Required dependency: mysql-connector-python + # - name: mysql + # engine: mysql_server + # database: mydatabase + # username: user + # password: pass + # limit: 10 + # query_str: 'SELECT * from mytable WHERE fieldname=%(query)s' + # shortcut: mysql + + # Required dependency: mariadb + # - name: mariadb + # engine: mariadb_server + # database: mydatabase + # username: user + # password: pass + # limit: 10 + # query_str: 'SELECT * from mytable WHERE fieldname=%(query)s' + # shortcut: mdb + + - name: 1337x + engine: 1337x + shortcut: 1337x + disabled: true + + - name: duden + engine: duden + shortcut: du + + - name: seznam + shortcut: szn + engine: seznam + disabled: true + + # - name: deepl + # engine: deepl + # shortcut: dpl + # # You can use the engine using the official stable API, but you need an API key + # # See: https://www.deepl.com/pro-api?cta=header-pro-api + # api_key: '' # required! + # timeout: 5.0 + # disabled: true + + - name: mojeek + shortcut: mjk + engine: mojeek + categories: [general, web] + disabled: true + + - name: mojeek images + shortcut: mjkimg + engine: mojeek + categories: [images, web] + search_type: images + paging: false + disabled: true + + - name: mojeek news + shortcut: mjknews + engine: mojeek + categories: [news, web] + search_type: news + paging: false + disabled: true + + - name: moviepilot + engine: moviepilot + shortcut: mp + disabled: true + + - name: naver + categories: [general, web] + engine: naver + shortcut: nvr + disabled: true + + - name: naver images + naver_category: images + categories: [images] + engine: naver + shortcut: nvri + disabled: true + + - name: naver news + naver_category: news + categories: [news] + engine: naver + shortcut: nvrn + disabled: true + + - name: naver videos + naver_category: videos + categories: [videos] + engine: naver + shortcut: nvrv + disabled: true + + - name: rubygems + shortcut: rbg + engine: xpath + paging: true + search_url: https://rubygems.org/search?page={pageno}&query={query} + results_xpath: /html/body/main/div/a[@class="gems__gem"] + url_xpath: ./@href + title_xpath: ./span/h2 + content_xpath: ./span/p + suggestion_xpath: /html/body/main/div/div[@class="search__suggestions"]/p/a + first_page_num: 1 + categories: [it, packages] + disabled: true + about: + website: https://rubygems.org/ + wikidata_id: Q1853420 + official_api_documentation: https://guides.rubygems.org/rubygems-org-api/ + use_official_api: false + require_api_key: false + results: HTML + + - name: peertube + engine: peertube + shortcut: ptb + paging: true + # alternatives see: https://instances.joinpeertube.org/instances + # base_url: https://tube.4aem.com + categories: videos + disabled: true + timeout: 6.0 + + - name: mediathekviewweb + engine: mediathekviewweb + shortcut: mvw + disabled: true + + - name: yacy + # https://docs.searxng.org/dev/engines/online/yacy.html + engine: yacy + categories: general + search_type: text + # see https://github.com/searxng/searxng/pull/3631#issuecomment-2240903027 + base_url: + - https://yacy.searchlab.eu + shortcut: ya + disabled: true + # if you aren't using HTTPS for your local yacy instance disable https + # enable_http: false + search_mode: 'global' + # timeout can be reduced in 'local' search mode + timeout: 5.0 + + - name: yacy images + engine: yacy + network: yacy + categories: images + search_type: image + shortcut: yai + disabled: true + # timeout can be reduced in 'local' search mode + timeout: 5.0 + + - name: rumble + engine: rumble + shortcut: ru + base_url: https://rumble.com/ + paging: true + categories: videos + disabled: true + + - name: repology + engine: repology + shortcut: rep + disabled: true + inactive: true + + - name: livespace + engine: livespace + shortcut: ls + categories: videos + disabled: true + timeout: 5.0 + + - name: wordnik + engine: wordnik + shortcut: wnik + timeout: 5.0 + disabled: true + + - name: woxikon.de synonyme + engine: xpath + shortcut: woxi + categories: [dictionaries] + timeout: 5.0 + disabled: true + search_url: https://synonyme.woxikon.de/synonyme/{query}.php + url_xpath: //div[@class="upper-synonyms"]/a/@href + content_xpath: //div[@class="synonyms-list-group"] + title_xpath: //div[@class="upper-synonyms"]/a + no_result_for_http_status: [404] + about: + website: https://www.woxikon.de/ + wikidata_id: # No Wikidata ID + use_official_api: false + require_api_key: false + results: HTML + language: de + + - name: seekr news + engine: seekr + shortcut: senews + categories: news + seekr_category: news + disabled: true + + - name: seekr images + engine: seekr + network: seekr news + shortcut: seimg + categories: images + seekr_category: images + disabled: true + + - name: seekr videos + engine: seekr + network: seekr news + shortcut: sevid + categories: videos + seekr_category: videos + disabled: true + + - name: stract + engine: stract + shortcut: str + disabled: true + + - name: svgrepo + engine: svgrepo + shortcut: svg + timeout: 10.0 + disabled: true + + - name: tootfinder + engine: tootfinder + shortcut: toot + disabled: true + + - name: uxwing + engine: uxwing + shortcut: ux + disabled: true + + - name: voidlinux + engine: voidlinux + shortcut: void + disabled: true + + - name: wallhaven + engine: wallhaven + # api_key: abcdefghijklmnopqrstuvwxyz + shortcut: wh + disabled: true + + # wikimini: online encyclopedia for children + # The fulltext and title parameter is necessary for Wikimini because + # sometimes it will not show the results and redirect instead + - name: wikimini + engine: xpath + shortcut: wkmn + search_url: https://fr.wikimini.org/w/index.php?search={query}&title=Sp%C3%A9cial%3ASearch&fulltext=Search + url_xpath: //li/div[@class="mw-search-result-heading"]/a/@href + title_xpath: //li//div[@class="mw-search-result-heading"]/a + content_xpath: //li/div[@class="searchresult"] + categories: general + disabled: true + about: + website: https://wikimini.org/ + wikidata_id: Q3568032 + use_official_api: false + require_api_key: false + results: HTML + language: fr + + - name: wttr.in + engine: wttr + shortcut: wttr + timeout: 9.0 + disabled: true + + - name: brave + engine: brave + shortcut: br + time_range_support: true + paging: true + categories: [general, web] + brave_category: search + disabled: true + # brave_spellcheck: true + + - name: brave.images + engine: brave + network: brave + shortcut: brimg + categories: [images, web] + brave_category: images + disabled: true + + - name: brave.videos + engine: brave + network: brave + shortcut: brvid + categories: [videos, web] + brave_category: videos + + - name: brave.news + engine: brave + network: brave + shortcut: brnews + categories: news + brave_category: news + + # - name: brave.goggles + # engine: brave + # network: brave + # shortcut: brgog + # time_range_support: true + # paging: true + # categories: [general, web] + # brave_category: goggles + # Goggles: # required! This should be a URL ending in .goggle + + - name: lib.rs + shortcut: lrs + engine: lib_rs + disabled: true + + - name: sourcehut + shortcut: srht + engine: sourcehut + # https://docs.searxng.org/dev/engines/online/sourcehut.html + # sourcehut_sort_order: longest-active + disabled: true + + - name: bt4g + engine: bt4g + shortcut: bt4g + + - name: pkg.go.dev + engine: pkg_go_dev + shortcut: pgo + disabled: true + + - name: senscritique + engine: senscritique + shortcut: scr + timeout: 4.0 + disabled: true + + - name: minecraft wiki + engine: mediawiki + shortcut: mcw + categories: ["software wikis"] + base_url: https://minecraft.wiki/ + api_path: "api.php" + search_type: text + disabled: true + about: + website: https://minecraft.wiki/ + wikidata_id: Q105533483 + +# Doku engine lets you access to any Doku wiki instance: +# A public one or a privete/corporate one. +# - name: ubuntuwiki +# engine: doku +# shortcut: uw +# base_url: 'https://doc.ubuntu-fr.org' + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: git grep +# engine: command +# command: ['git', 'grep', '{{QUERY}}'] +# shortcut: gg +# tokens: [] +# disabled: true +# delimiter: +# chars: ':' +# keys: ['filepath', 'code'] + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: locate +# engine: command +# command: ['locate', '{{QUERY}}'] +# shortcut: loc +# tokens: [] +# disabled: true +# delimiter: +# chars: ' ' +# keys: ['line'] + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: find +# engine: command +# command: ['find', '.', '-name', '{{QUERY}}'] +# query_type: path +# shortcut: fnd +# tokens: [] +# disabled: true +# delimiter: +# chars: ' ' +# keys: ['line'] + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: pattern search in files +# engine: command +# command: ['fgrep', '{{QUERY}}'] +# shortcut: fgr +# tokens: [] +# disabled: true +# delimiter: +# chars: ' ' +# keys: ['line'] + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: regex search in files +# engine: command +# command: ['grep', '{{QUERY}}'] +# shortcut: gr +# tokens: [] +# disabled: true +# delimiter: +# chars: ' ' +# keys: ['line'] + +doi_resolvers: + oadoi.org: 'https://oadoi.org/' + doi.org: 'https://doi.org/' + sci-hub.se: 'https://sci-hub.se/' + sci-hub.st: 'https://sci-hub.st/' + sci-hub.ru: 'https://sci-hub.ru/' + +default_doi_resolver: 'oadoi.org' \ No newline at end of file diff --git a/modules/services/sish.nix b/modules/services/sish.nix new file mode 100644 index 0000000..e7a79c9 --- /dev/null +++ b/modules/services/sish.nix @@ -0,0 +1,7 @@ +{ + den.aspects.sish = { + nixos = { + + }; + }; +} diff --git a/modules/services/vscode-server.nix b/modules/services/vscode-server.nix new file mode 100644 index 0000000..dae3891 --- /dev/null +++ b/modules/services/vscode-server.nix @@ -0,0 +1,11 @@ +{ + den.aspects.vscode-server = { + nixos = { + imports = [ + (fetchTarball "https://github.com/nix-community/nixos-vscode-server/tarball/master") + ]; + + services.vscode-server.enable = true; + }; + }; +} diff --git a/modules/software/beets.nix b/modules/software/beets.nix new file mode 100644 index 0000000..bf16bb5 --- /dev/null +++ b/modules/software/beets.nix @@ -0,0 +1,51 @@ +{ + den.aspects.beets = { + homeManager = { pkgs, ... }: { + packages = with pkgs; [ + beets + ffmpeg + chromaprint + ]; + + file.".config/beets/config.yaml".text = '' + library: ~/.local/share/beets/library.db + directory: ~/Music + + import: + write: true + copy: true + + plugins: + - convert + - fetchart + - embedart + - fromfilename + - chroma + - smartplaylist + + paths: + default: $artist/$album/$track - $title + + convert: + auto: true + format: opus + formats: + opus: ffmpeg -i $source -y -vn -c:a libopus -b:a 160k $dest + dest: /home/bug/Music + + fetchart: + auto: yes + ifempty: yes + art_filename: folder + + embedart: + auto: yes + + smartplaylist: + playlist_dir: ~/Music/playlists + relative_to: library + output: extm3u + ''; + }; + }; +} diff --git a/modules/software/cad.nix b/modules/software/cad.nix new file mode 100644 index 0000000..48188bc --- /dev/null +++ b/modules/software/cad.nix @@ -0,0 +1,11 @@ +{ + den.aspects.cad = { + nixos = { pkgs, ... }: { + users.users.bug.packages = with pkgs; [ + blender + plasticity + orca-slicer + ]; + }; + }; +} diff --git a/modules/software/compatibility.nix b/modules/software/compatibility.nix new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/modules/software/compatibility.nix @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/modules/software/development.nix b/modules/software/development.nix new file mode 100644 index 0000000..4aacad4 --- /dev/null +++ b/modules/software/development.nix @@ -0,0 +1,21 @@ +{ + den.aspects.development = { + nixos = { pkgs, ... }: { + environment.systemPackages = with pkgs; [ + file-roller + ]; + + users.users.bug.packages = with pkgs; [ + zed-editor + + vscode + + tree + gh + scanmem + + arduino-ide + ]; + }; + }; +} diff --git a/modules/software/firefox.nix b/modules/software/firefox.nix new file mode 100644 index 0000000..4b8d226 --- /dev/null +++ b/modules/software/firefox.nix @@ -0,0 +1,11 @@ +{ + den.aspects.firefox = { + nixos = { pkgs, ... }: { + programs.firefox = { + enable = true; + + package = pkgs.firefox-bin; + }; + }; + }; +} diff --git a/modules/software/fish.nix b/modules/software/fish.nix new file mode 100644 index 0000000..00dea9f --- /dev/null +++ b/modules/software/fish.nix @@ -0,0 +1,9 @@ +{ + den.aspects.fish = { + nixos = { + programs.fish.shellAliases = { + box = "ssh box.bug.tools"; + }; + }; + }; +} diff --git a/modules/software/flatpak.nix b/modules/software/flatpak.nix new file mode 100644 index 0000000..558fb4f --- /dev/null +++ b/modules/software/flatpak.nix @@ -0,0 +1,55 @@ +{ inputs, lib, ... }: { + den.aspects.flatpak = { + nixos = { pkgs, ... }: { + imports = [ inputs.nix-flatpak.nixosModules.nix-flatpak ]; + + services.flatpak = { + enable = true; + + remotes = lib.mkOptionDefault [{ + name = "flathub-beta"; + location = "https://flathub.org/beta-repo/flathub-beta.flatpakrepo"; + }]; + + update.auto.enable = true; + uninstallUnmanaged = true; + + packages = [ + "org.vinegarhq.Sober" + "org.vinegarhq.Vinegar" + "org.gnome.Decibels" + "org.pipewire.Helvum" + "community.pathofbuilding.PathOfBuilding" + "io.github.gaheldev.Millisecond" + + { + appId = "com.hytale.Launcher"; + sha256 = "sha256-SUxfyovC2umZmsOj5bOTZ8WfGCpnWcz7svOESwNekV0="; + bundle = "${pkgs.fetchurl { + url = "https://launcher.hytale.com/builds/release/linux/amd64/hytale-launcher-latest.flatpak"; + sha256 = "sha256-SUxfyovC2umZmsOj5bOTZ8WfGCpnWcz7svOESwNekV0="; + }}"; + } + + # add Polytoria client + # https://cdn.polytoria.com/releases/installer/linux/Polytoria%20Setup%204.12.0.flatpak + + { + appId = "com.polytoria.launcher"; + sha256 = "sha256-VjhNiJfSdCtlH2SuP3Mn8jjOrx5xcOqhtDKaWYIwxYg="; + bundle = "${pkgs.fetchurl { + url = "https://github.com/4DBug/poly/releases/download/poly/poly.flatpak"; + sha256 = "sha256-VjhNiJfSdCtlH2SuP3Mn8jjOrx5xcOqhtDKaWYIwxYg="; + }}"; + } + ]; + + overrides = { + global = { + Context.sockets = ["wayland" "!x11" "!fallback-x11"]; + }; + }; + }; + }; + }; +} diff --git a/modules/software/gaming.nix b/modules/software/gaming.nix new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/modules/software/gaming.nix @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/modules/software/music.nix b/modules/software/music.nix new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/modules/software/music.nix @@ -0,0 +1 @@ +{} diff --git a/modules/software/placeholder.nix b/modules/software/placeholder.nix new file mode 100644 index 0000000..7746d30 --- /dev/null +++ b/modules/software/placeholder.nix @@ -0,0 +1,195 @@ +{ + den.aspects.packages = { + nixos = { pkgs, options, ... }: { + environment.systemPackages = with pkgs; [ + gnome-boxes + + wine64 + wineWow64Packages.full + + appimage-run + + pulseaudioFull + + lug-helper + gamemode + steam-run + + firmware-updater + + file-roller + + baobab + + firefox-bin + ]; + + users.users.bug.packages = with pkgs; [ + obsidian + vesktop + nicotine-plus + fastfetch + gh + scanmem + samrewritten + impression + + mission-center + + authenticator + + steamtinkerlaunch + + #prismlauncher + + euphonica + + kooha + + loupe + + arduino-ide + + geary + + fractal + + gnome-calendar + ]; + + + services = { + /* + flatpak = { + enable = true; + + remotes = lib.mkOptionDefault [{ + name = "flathub-beta"; + location = "https://flathub.org/beta-repo/flathub-beta.flatpakrepo"; + }]; + + update.auto.enable = true; + uninstallUnmanaged = true; + + packages = [ + "org.vinegarhq.Sober" + "org.vinegarhq.Vinegar" + "org.gnome.Decibels" + "org.pipewire.Helvum" + "community.pathofbuilding.PathOfBuilding" + "io.github.gaheldev.Millisecond" + + { + appId = "com.hytale.Launcher"; + sha256 = "sha256-SUxfyovC2umZmsOj5bOTZ8WfGCpnWcz7svOESwNekV0="; + bundle = "${pkgs.fetchurl { + url = "https://launcher.hytale.com/builds/release/linux/amd64/hytale-launcher-latest.flatpak"; + sha256 = "sha256-SUxfyovC2umZmsOj5bOTZ8WfGCpnWcz7svOESwNekV0="; + }}"; + } + + # add Polytoria client + # https://cdn.polytoria.com/releases/installer/linux/Polytoria%20Setup%204.12.0.flatpak + + { + appId = "com.polytoria.launcher"; + sha256 = "sha256-VjhNiJfSdCtlH2SuP3Mn8jjOrx5xcOqhtDKaWYIwxYg="; + bundle = "${pkgs.fetchurl { + url = "https://github.com/4DBug/poly/releases/download/poly/poly.flatpak"; + sha256 = "sha256-VjhNiJfSdCtlH2SuP3Mn8jjOrx5xcOqhtDKaWYIwxYg="; + }}"; + } + ]; + + overrides = { + global = { + Context.sockets = ["wayland" "!x11" "!fallback-x11"]; + }; + }; + }; + */ + + ollama = { + enable = false; + + loadModels = [ "llama3.2:3b" "deepseek-r1:1.5b" "deepseek-r1:8b"]; + }; + }; + + fonts = { + fontDir.enable = true; + enableDefaultPackages = true; + + packages = with pkgs; [ + twitter-color-emoji + nerd-fonts.fira-code + nerd-fonts.droid-sans-mono + ]; + + fontconfig = { + enable = true; + useEmbeddedBitmaps = true; + + defaultFonts = { + emoji = [ "Twitter Color Emoji" ]; + }; + }; + }; + + programs = { + appimage = { + enable = true; + binfmt = true; + }; + + steam = { + enable = true; + + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = false; + + localNetworkGameTransfers.openFirewall = true; + + gamescopeSession.enable = true; + + extraCompatPackages = with pkgs; [ + proton-ge-bin + ]; + + #platformOptimizations.enable = true; + }; + + ydotool.enable = true; + + gamescope = { + enable = true; + capSysNice = true; + args = [ + "--rt" + "--expose-wayland" + ]; + }; + + virt-manager.enable = true; + + nix-ld = { + enable = true; + + libraries = options.programs.nix-ld.libraries.default ++ (with pkgs; [ + libxml2 + udev + gcc + egl-wayland + mesa + libglvnd + wayland + libX11 + libXcursor + libXrandr + libXi + ]); + }; + }; + }; + }; +} diff --git a/modules/software/social.nix b/modules/software/social.nix new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/modules/software/social.nix @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/modules/software/stylix.nix b/modules/software/stylix.nix new file mode 100644 index 0000000..03780f5 --- /dev/null +++ b/modules/software/stylix.nix @@ -0,0 +1,47 @@ +{ inputs, ... }: { + den.aspects.stylix = { + homeManager = { pkgs, ... }: { + imports = [ + (inputs.stylix.homeModules.stylix or {}) + ]; + + stylix = { + enable = true; + autoEnable = true; + polarity = "dark"; + + # catppuccin mocha + base16Scheme = { + base00 = "1E1E2E"; + base01 = "181825"; + base02 = "313244"; + base03 = "45475A"; + base04 = "585B70"; + base05 = "CDD6F4"; + base06 = "F5E0DC"; + base07 = "B4BEFE"; + base08 = "F38BA8"; + base09 = "FAB387"; + base0A = "F9E2AF"; + base0B = "A6E3A1"; + base0C = "94E2D5"; + base0D = "89B4FA"; + base0E = "CBA6F7"; + base0F = "F2CDCD"; + }; + + fonts.emoji = { + name = "Twitter Color Emoji"; + package = pkgs.twitter-color-emoji; + }; + + targets = { + vesktop.enable = true; + gnome.enable = true; + gtk.enable = true; + firefox.enable = true; + }; + }; + }; + }; +} diff --git a/modules/users/bug.nix b/modules/users/bug.nix new file mode 100644 index 0000000..081d7dc --- /dev/null +++ b/modules/users/bug.nix @@ -0,0 +1,10 @@ +{ den, ... }: +{ + den.aspects.bug = { + includes = [ + den.provides.primary-user + (den.provides.user-shell "fish") + den.provides.home-manager + ]; + }; +} diff --git a/modules/vm.nix b/modules/vm.nix new file mode 100644 index 0000000..7eb1a59 --- /dev/null +++ b/modules/vm.nix @@ -0,0 +1,16 @@ +# nix run .#vm + +{ inputs, den, ... }: { + den.aspects.nix.includes = [ (den.provides.tty-autologin "bug") ]; + + perSystem = { pkgs, ... }: { + packages.vm = pkgs.writeShellApplication { + name = "vm"; + text = let + host = inputs.self.nixosConfigurations.nix.config; + in '' + ${host.system.build.vm}/bin/run-${host.networking.hostName}-vm "$@" + ''; + }; + }; +} diff --git a/nix/.stfolder/syncthing-folder-a0745f.txt b/nix/.stfolder/syncthing-folder-a0745f.txt new file mode 100644 index 0000000..b3ae570 --- /dev/null +++ b/nix/.stfolder/syncthing-folder-a0745f.txt @@ -0,0 +1,5 @@ +# This directory is a Syncthing folder marker. +# Do not delete. + +folderID: nix +created: 2026-01-29T23:05:44-06:00 diff --git a/nix/.stignore b/nix/.stignore new file mode 100644 index 0000000..27f2bde --- /dev/null +++ b/nix/.stignore @@ -0,0 +1,2 @@ +device.nix +hardware-configuration.nix \ No newline at end of file diff --git a/nix/device.nix b/nix/device.nix new file mode 100644 index 0000000..4a699cd --- /dev/null +++ b/nix/device.nix @@ -0,0 +1 @@ +{ device = "desktop"; } \ No newline at end of file diff --git a/nix/flake.lock b/nix/flake.lock new file mode 100644 index 0000000..986cb65 --- /dev/null +++ b/nix/flake.lock @@ -0,0 +1,807 @@ +{ + "nodes": { + "base16": { + "inputs": { + "fromYaml": "fromYaml" + }, + "locked": { + "lastModified": 1755819240, + "narHash": "sha256-qcMhnL7aGAuFuutH4rq9fvAhCpJWVHLcHVZLtPctPlo=", + "owner": "SenchoPens", + "repo": "base16.nix", + "rev": "75ed5e5e3fce37df22e49125181fa37899c3ccd6", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "base16.nix", + "type": "github" + } + }, + "base16-fish": { + "flake": false, + "locked": { + "lastModified": 1765809053, + "narHash": "sha256-XCUQLoLfBJ8saWms2HCIj4NEN+xNsWBlU1NrEPcQG4s=", + "owner": "tomyun", + "repo": "base16-fish", + "rev": "86cbea4dca62e08fb7fd83a70e96472f92574782", + "type": "github" + }, + "original": { + "owner": "tomyun", + "repo": "base16-fish", + "rev": "86cbea4dca62e08fb7fd83a70e96472f92574782", + "type": "github" + } + }, + "base16-helix": { + "flake": false, + "locked": { + "lastModified": 1760703920, + "narHash": "sha256-m82fGUYns4uHd+ZTdoLX2vlHikzwzdu2s2rYM2bNwzw=", + "owner": "tinted-theming", + "repo": "base16-helix", + "rev": "d646af9b7d14bff08824538164af99d0c521b185", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-helix", + "type": "github" + } + }, + "base16-vim": { + "flake": false, + "locked": { + "lastModified": 1732806396, + "narHash": "sha256-e0bpPySdJf0F68Ndanwm+KWHgQiZ0s7liLhvJSWDNsA=", + "owner": "tinted-theming", + "repo": "base16-vim", + "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-vim", + "rev": "577fe8125d74ff456cf942c733a85d769afe58b7", + "type": "github" + } + }, + "copyparty": { + "inputs": { + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + }, + "locked": { + "lastModified": 1770758715, + "narHash": "sha256-FlRSDJ8OlCiWX+tIAZJkQnkBAAwbO125aUdAC6VJlOk=", + "owner": "9001", + "repo": "copyparty", + "rev": "d44ea245307c06eb060b6e6f5c2cba91a759c940", + "type": "github" + }, + "original": { + "owner": "9001", + "repo": "copyparty", + "type": "github" + } + }, + "firefox-gnome-theme": { + "flake": false, + "locked": { + "lastModified": 1764873433, + "narHash": "sha256-1XPewtGMi+9wN9Ispoluxunw/RwozuTRVuuQOmxzt+A=", + "owner": "rafaelmardojai", + "repo": "firefox-gnome-theme", + "rev": "f7ffd917ac0d253dbd6a3bf3da06888f57c69f92", + "type": "github" + }, + "original": { + "owner": "rafaelmardojai", + "repo": "firefox-gnome-theme", + "type": "github" + } + }, + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1746162366, + "narHash": "sha256-5SSSZ/oQkwfcAz/o/6TlejlVGqeK08wyREBQ5qFFPhM=", + "owner": "nix-community", + "repo": "flake-compat", + "rev": "0f158086a2ecdbb138cd0429410e44994f1b7e4b", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-parts": { + "inputs": { + "nixpkgs-lib": [ + "nix-citizen", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1769996383, + "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_2": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1769996383, + "narHash": "sha256-AnYjnFWgS49RlqX7LrC4uA+sCCDBj0Ry/WOJ5XWAsa0=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "57928607ea566b5db3ad13af0e57e921e6b12381", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_3": { + "inputs": { + "nixpkgs-lib": [ + "stylix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1767609335, + "narHash": "sha256-feveD98mQpptwrAEggBQKJTYbvwwglSbOv53uCfH9PY=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "250481aafeb741edfe23d29195671c19b36b6dca", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1678901627, + "narHash": "sha256-U02riOqrKKzwjsxc/400XnElV+UtPUQWpANPlyazjH0=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "93a2b84fc4b70d9e089d029deacc3583435c2ed6", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_2": { + "inputs": { + "systems": "systems_3" + }, + "locked": { + "lastModified": 1681202837, + "narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "cfacdce06f30d2b68473a46042957675eebb3401", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flatpaks": { + "locked": { + "lastModified": 1767983141, + "narHash": "sha256-7ZCulYUD9RmJIDULTRkGLSW1faMpDlPKcbWJLYHoXcs=", + "owner": "gmodena", + "repo": "nix-flatpak", + "rev": "440818969ac2cbd77bfe025e884d0aa528991374", + "type": "github" + }, + "original": { + "owner": "gmodena", + "ref": "latest", + "repo": "nix-flatpak", + "type": "github" + } + }, + "fromYaml": { + "flake": false, + "locked": { + "lastModified": 1731966426, + "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", + "owner": "SenchoPens", + "repo": "fromYaml", + "rev": "106af9e2f715e2d828df706c386a685698f3223b", + "type": "github" + }, + "original": { + "owner": "SenchoPens", + "repo": "fromYaml", + "type": "github" + } + }, + "gnome-shell": { + "flake": false, + "locked": { + "host": "gitlab.gnome.org", + "lastModified": 1767737596, + "narHash": "sha256-eFujfIUQDgWnSJBablOuG+32hCai192yRdrNHTv0a+s=", + "owner": "GNOME", + "repo": "gnome-shell", + "rev": "ef02db02bf0ff342734d525b5767814770d85b49", + "type": "gitlab" + }, + "original": { + "host": "gitlab.gnome.org", + "owner": "GNOME", + "ref": "gnome-49", + "repo": "gnome-shell", + "type": "gitlab" + } + }, + "home-manager": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1770654520, + "narHash": "sha256-mg5WZMIPGsFu9MxSrUcuJUPMbfMsF77el5yb/7rc10k=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "6c4fdbe1ad198fac36c320fd45c5957324a80b8e", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "home-manager", + "type": "github" + } + }, + "hytale-launcher": { + "inputs": { + "nixpkgs": "nixpkgs_3" + }, + "locked": { + "lastModified": 1770408363, + "narHash": "sha256-ocMI5t0EBxao7dRRnQi7Aa9jpBvtSZmOpPbXx8fbOjw=", + "owner": "JPyke3", + "repo": "hytale-launcher-nix", + "rev": "89db7a709e20525f145ea8ba729f32f8c6b43ac6", + "type": "github" + }, + "original": { + "owner": "JPyke3", + "repo": "hytale-launcher-nix", + "type": "github" + } + }, + "nix-citizen": { + "inputs": { + "flake-parts": "flake-parts", + "nix-gaming": [ + "nix-gaming" + ], + "nix-github-actions": "nix-github-actions", + "nixpkgs": "nixpkgs_4", + "systems": "systems", + "treefmt-nix": "treefmt-nix" + }, + "locked": { + "lastModified": 1770673830, + "narHash": "sha256-m/4WPh6komkPfizenqHmEVZBzn/CpL+WAD4B7axDjqs=", + "owner": "LovingMelody", + "repo": "nix-citizen", + "rev": "8a7401f3ff547d4ee1a54e893a5e52d4c18cc9ff", + "type": "github" + }, + "original": { + "owner": "LovingMelody", + "repo": "nix-citizen", + "type": "github" + } + }, + "nix-gaming": { + "inputs": { + "flake-parts": "flake-parts_2", + "nixpkgs": "nixpkgs_5" + }, + "locked": { + "lastModified": 1770691919, + "narHash": "sha256-e3G2ebDGaMfNCeRRSFQivSC+iWktI7a37AEzZ9I+JZA=", + "owner": "fufexan", + "repo": "nix-gaming", + "rev": "6cc488d4779f9dd15dd4831e97b15d2432ae761b", + "type": "github" + }, + "original": { + "owner": "fufexan", + "repo": "nix-gaming", + "type": "github" + } + }, + "nix-github-actions": { + "inputs": { + "nixpkgs": [ + "nix-citizen", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1737420293, + "narHash": "sha256-F1G5ifvqTpJq7fdkT34e/Jy9VCyzd5XfJ9TO8fHhJWE=", + "owner": "nix-community", + "repo": "nix-github-actions", + "rev": "f4158fa080ef4503c8f4c820967d946c2af31ec9", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nix-github-actions", + "type": "github" + } + }, + "nixos-cosmic": { + "inputs": { + "flake-compat": "flake-compat", + "nixpkgs": "nixpkgs_6", + "nixpkgs-stable": "nixpkgs-stable", + "rust-overlay": "rust-overlay" + }, + "locked": { + "lastModified": 1751591814, + "narHash": "sha256-A4lgvuj4v+Pr8MniXz1FBG0DXOygi8tTECR+j53FMhM=", + "owner": "lilyinstarlight", + "repo": "nixos-cosmic", + "rev": "fef2d0c78c4e4d6c600a88795af193131ff51bdc", + "type": "github" + }, + "original": { + "owner": "lilyinstarlight", + "repo": "nixos-cosmic", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1748162331, + "narHash": "sha256-rqc2RKYTxP3tbjA+PB3VMRQNnjesrT0pEofXQTrMsS8=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "7c43f080a7f28b2774f3b3f43234ca11661bf334", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-25.05", + "type": "indirect" + } + }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1769909678, + "narHash": "sha256-cBEymOf4/o3FD5AZnzC3J9hLbiZ+QDT/KDuyHXVJOpM=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "72716169fe93074c333e8d0173151350670b824c", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nixpkgs-stable": { + "locked": { + "lastModified": 1751048012, + "narHash": "sha256-MYbotu4UjWpTsq01wglhN5xDRfZYLFtNk7SBY0BcjkU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a684c58d46ebbede49f280b653b9e56100aa3877", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-24.11", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1770197578, + "narHash": "sha256-AYqlWrX09+HvGs8zM6ebZ1pwUqjkfpnv8mewYwAo+iM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_3": { + "locked": { + "lastModified": 1770197578, + "narHash": "sha256-AYqlWrX09+HvGs8zM6ebZ1pwUqjkfpnv8mewYwAo+iM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1770562336, + "narHash": "sha256-ub1gpAONMFsT/GU2hV6ZWJjur8rJ6kKxdm9IlCT0j84=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d6c71932130818840fc8fe9509cf50be8c64634f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1770537093, + "narHash": "sha256-pF1quXG5wsgtyuPOHcLfYg/ft/QMr8NnX0i6tW2187s=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "fef9403a3e4d31b0a23f0bacebbec52c248fbb51", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_6": { + "locked": { + "lastModified": 1751011381, + "narHash": "sha256-krGXKxvkBhnrSC/kGBmg5MyupUUT5R6IBCLEzx9jhMM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "30e2e2857ba47844aa71991daa6ed1fc678bcbb7", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_7": { + "locked": { + "lastModified": 1770562336, + "narHash": "sha256-ub1gpAONMFsT/GU2hV6ZWJjur8rJ6kKxdm9IlCT0j84=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d6c71932130818840fc8fe9509cf50be8c64634f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_8": { + "locked": { + "lastModified": 1682134069, + "narHash": "sha256-TnI/ZXSmRxQDt2sjRYK/8j8iha4B4zP2cnQCZZ3vp7k=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "fd901ef4bf93499374c5af385b2943f5801c0833", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nur": { + "inputs": { + "flake-parts": [ + "stylix", + "flake-parts" + ], + "nixpkgs": [ + "stylix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1767810917, + "narHash": "sha256-ZKqhk772+v/bujjhla9VABwcvz+hB2IaRyeLT6CFnT0=", + "owner": "nix-community", + "repo": "NUR", + "rev": "dead29c804adc928d3a69dfe7f9f12d0eec1f1a4", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "NUR", + "type": "github" + } + }, + "root": { + "inputs": { + "copyparty": "copyparty", + "flatpaks": "flatpaks", + "home-manager": "home-manager", + "hytale-launcher": "hytale-launcher", + "nix-citizen": "nix-citizen", + "nix-gaming": "nix-gaming", + "nixos-cosmic": "nixos-cosmic", + "nixpkgs": "nixpkgs_7", + "stylix": "stylix", + "vscode-server": "vscode-server" + } + }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "nixos-cosmic", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1751251399, + "narHash": "sha256-y+viCuy/eKKpkX1K2gDvXIJI/yzvy6zA3HObapz9XZ0=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "b22d5ee8c60ed1291521f2dde48784edd6bf695b", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, + "stylix": { + "inputs": { + "base16": "base16", + "base16-fish": "base16-fish", + "base16-helix": "base16-helix", + "base16-vim": "base16-vim", + "firefox-gnome-theme": "firefox-gnome-theme", + "flake-parts": "flake-parts_3", + "gnome-shell": "gnome-shell", + "nixpkgs": [ + "nixpkgs" + ], + "nur": "nur", + "systems": "systems_2", + "tinted-foot": "tinted-foot", + "tinted-kitty": "tinted-kitty", + "tinted-schemes": "tinted-schemes", + "tinted-tmux": "tinted-tmux", + "tinted-zed": "tinted-zed" + }, + "locked": { + "lastModified": 1770587906, + "narHash": "sha256-N9ZTG3ia7l4iQO+9JlOj+sX4yu6gl7a3aozrlhSIJwQ=", + "owner": "nix-community", + "repo": "stylix", + "rev": "72e6483a88d51471a6c55e1d43e7ed2bc47a76a4", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "stylix", + "type": "github" + } + }, + "systems": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_2": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "systems_3": { + "locked": { + "lastModified": 1681028828, + "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "owner": "nix-systems", + "repo": "default", + "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default", + "type": "github" + } + }, + "tinted-foot": { + "flake": false, + "locked": { + "lastModified": 1726913040, + "narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=", + "owner": "tinted-theming", + "repo": "tinted-foot", + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-foot", + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", + "type": "github" + } + }, + "tinted-kitty": { + "flake": false, + "locked": { + "lastModified": 1735730497, + "narHash": "sha256-4KtB+FiUzIeK/4aHCKce3V9HwRvYaxX+F1edUrfgzb8=", + "owner": "tinted-theming", + "repo": "tinted-kitty", + "rev": "de6f888497f2c6b2279361bfc790f164bfd0f3fa", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-kitty", + "type": "github" + } + }, + "tinted-schemes": { + "flake": false, + "locked": { + "lastModified": 1767710407, + "narHash": "sha256-+W1EB79Jl0/gm4JqmO0Nuc5C7hRdp4vfsV/VdzI+des=", + "owner": "tinted-theming", + "repo": "schemes", + "rev": "2800e2b8ac90f678d7e4acebe4fa253f602e05b2", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "schemes", + "type": "github" + } + }, + "tinted-tmux": { + "flake": false, + "locked": { + "lastModified": 1767489635, + "narHash": "sha256-e6nnFnWXKBCJjCv4QG4bbcouJ6y3yeT70V9MofL32lU=", + "owner": "tinted-theming", + "repo": "tinted-tmux", + "rev": "3c32729ccae99be44fe8a125d20be06f8d7d8184", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "tinted-tmux", + "type": "github" + } + }, + "tinted-zed": { + "flake": false, + "locked": { + "lastModified": 1767488740, + "narHash": "sha256-wVOj0qyil8m+ouSsVZcNjl5ZR+1GdOOAooAatQXHbuU=", + "owner": "tinted-theming", + "repo": "base16-zed", + "rev": "11abb0b282ad3786a2aae088d3a01c60916f2e40", + "type": "github" + }, + "original": { + "owner": "tinted-theming", + "repo": "base16-zed", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "nix-citizen", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1770228511, + "narHash": "sha256-wQ6NJSuFqAEmIg2VMnLdCnUc0b7vslUohqqGGD+Fyxk=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "337a4fe074be1042a35086f15481d763b8ddc0e7", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "vscode-server": { + "inputs": { + "flake-utils": "flake-utils_2", + "nixpkgs": "nixpkgs_8" + }, + "locked": { + "lastModified": 1770124655, + "narHash": "sha256-yHmd2B13EtBUPLJ+x0EaBwNkQr9LTne1arLVxT6hSnY=", + "owner": "nix-community", + "repo": "nixos-vscode-server", + "rev": "92ce71c3ba5a94f854e02d57b14af4997ab54ef0", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixos-vscode-server", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/nix/flake.nix b/nix/flake.nix new file mode 100644 index 0000000..5b09114 --- /dev/null +++ b/nix/flake.nix @@ -0,0 +1,90 @@ +{ + inputs = { + # nixpkgs.follows = "nixos-cosmic/nixpkgs"; + + nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + + flatpaks.url = "github:gmodena/nix-flatpak/?ref=latest"; + + nixos-cosmic.url = "github:lilyinstarlight/nixos-cosmic"; + + hytale-launcher.url = "github:JPyke3/hytale-launcher-nix"; + + stylix = { + url = "github:nix-community/stylix"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + + vscode-server.url = "github:nix-community/nixos-vscode-server"; + + home-manager.url = "github:nix-community/home-manager"; + + nix-citizen.url = "github:LovingMelody/nix-citizen"; + + nix-gaming.url = "github:fufexan/nix-gaming"; + nix-citizen.inputs.nix-gaming.follows = "nix-gaming"; + + copyparty.url = "github:9001/copyparty"; + }; + + outputs = inputs@{ self, nixpkgs, stylix, home-manager, flatpaks, hytale-launcher, vscode-server, copyparty, nix-citizen, ... }: + let + deviceType = import ./device.nix; + system = "x86_64-linux"; + in + { + nixosConfigurations = { + nix = nixpkgs.lib.nixosSystem { + inherit system; + + specialArgs = { inherit inputs; inherit (deviceType) device; }; + + modules = [ + { + nix.settings = { + substituters = [ "https://cosmic.cachix.org/" ]; + trusted-public-keys = [ "cosmic.cachix.org-1:Dya9IyXD4xdBehWjrkPv6rtxpmMdRel02smYzA85dPE=" ]; + }; + } + + nix-citizen.nixosModules.default + + flatpaks.nixosModules.nix-flatpak + + ./main.nix + ]; + }; + + box = nixpkgs.lib.nixosSystem { + inherit system; + + specialArgs = { inherit inputs; inherit (deviceType) device; }; + + modules = [ + ./main.nix + + vscode-server.nixosModules.default + + copyparty.nixosModules.default + ]; + }; + }; + + homeConfigurations = { + bug = home-manager.lib.homeManagerConfiguration { + pkgs = nixpkgs.legacyPackages.x86_64-linux; + + extraSpecialArgs = { + inherit inputs; + inherit (deviceType) device; + }; + + modules = [ + stylix.homeModules.stylix + + ./home.nix + ]; + }; + }; + }; +} \ No newline at end of file diff --git a/nix/home.nix b/nix/home.nix new file mode 100644 index 0000000..bc324aa --- /dev/null +++ b/nix/home.nix @@ -0,0 +1,42 @@ +{inputs, config, pkgs, device, ... }: + +{ + imports = [ + ./modules/syncthing.nix + ] ++ (if device == "server" then [ + + ] else [ + ./modules/stylix.nix + ./modules/beets.nix + + #./modules/firefox.nix + ]); + + home = { + username = "bug"; + homeDirectory = "/home/bug"; + + stateVersion = "25.11"; + + packages = with pkgs; [ + + ] ++ (if device == "server" then [ + gh + luajit + nodejs + node2nix + cloudflared + ] else []); + + file = {}; + + sessionVariables = { + EDITOR = "micro"; + MICRO_TRUECOLOR = 1; + }; + }; + + nixpkgs.config.allowUnfree = true; + + #programs.home-manager.enable = true; +} \ No newline at end of file diff --git a/nix/main.nix b/nix/main.nix new file mode 100644 index 0000000..0ed3d00 --- /dev/null +++ b/nix/main.nix @@ -0,0 +1,119 @@ +{ lib, config, inputs, pkgs, options, device, ... }: + +{ + imports = [ + /etc/nixos/hardware-configuration.nix + + ./modules/users.nix + ./modules/boot.nix + ./modules/network.nix + ./modules/locale.nix + ./modules/security.nix + ] ++ (if device == "server" then [ + ./modules/mailserver.nix + ./modules/vscode-server.nix + ./modules/copyparty.nix + ./modules/searxng.nix + ./modules/cloudflared.nix + ./modules/invidious.nix + ./modules/glances.nix + ./modules/redlib.nix + + ({ pkgs, ... }: { + environment.systemPackages = with pkgs; [ + nh comma nix-index home-manager micro wget git fastfetch + ]; + }) + ] else [ + ./modules/packages.nix + ./modules/cosmic.nix + ./modules/graphics.nix + ./modules/audio.nix + ./modules/swap.nix + ./modules/virtualisation.nix + ./modules/mpd.nix + ./modules/sshfs.nix + + #./modules/firefox.nix + ]) ++ (if device == "laptop" then [ + + ] else []) ++ (if device == "desktop" then [ + + ] else []); + + system = { + stateVersion = "25.11"; + + autoUpgrade = { + enable = true; + allowReboot = true; + }; + }; + + nix = { + optimise.automatic = true; + settings.experimental-features = [ "nix-command" "flakes" ]; + }; + + nixpkgs = { + config = { + allowUnfree = true; + + cudaSupport = (device == "desktop"); + nvidia.acceptLicense = (device == "desktop"); + }; + + overlays = [ + + ]; + }; + + environment.sessionVariables.NIXPKGS_ALLOW_UNFREE = 1; + + systemd = { + user.extraConfig = '' + DefaultEnvironment="PATH=/run/current-system/sw/bin" + ''; + + services.monitord.wantedBy = [ "multi-user.target" ]; + }; + + services.fstrim.enable = true; + + programs = { + bash.shellAliases = { + fetch = "fastfetch --file ~/nix/nix.ans"; + + rebuild = "nh os switch ~/nix"; #"sudo nixos-rebuild switch --impure"; # home-manager switch --impure + + #pissh = "ssh -t $(avahi-resolve-host-name -4 pi.home | awk '{print $2}')"; + #pi = "pissh \"cd $(pwd) && bash\""; + #pi = "ssh pi.bug.tools"; + box = "ssh box.bug.tools"; + + unbox = "sh -c 'ssh -N -L \"$1\":0.0.0.0:\"$1\" box.bug.tools &' --"; + + rebox = "sh -c 'fuser -k \"$1\"/tcp' --"; + + dock = "sh -c 'ssh -N -D \"$1\" box.bug.tools &' --"; + + pico = "ssh pico.sh"; + + # tuns name port + tuns = "bash -c '\''if [ \"$#\" -ne 2 ]; then echo \"Usage: tun name port\"; exit 1; fi; +if [[ \"$1\" =~ ^[0-9]+$ ]]; then port=\"$1\"; name=\"$2\"; +elif [[ \"$2\" =~ ^[0-9]+$ ]]; then port=\"$2\"; name=\"$1\"; +else echo \"Error: One argument must be a number (port)\"; exit 1; fi; +ssh -R \"$\{name}:80:localhost:$\{port}\" tuns.sh'\'' _"; + + # pgs name directory + pgs = "bash -c '\''if [ \"$#\" -ne 2 ]; then echo \"Usage: pgs NAME DIRECTORY\"; exit 1; fi; rsync -rv \"$2\" pgs.sh:/\"$1\"'\'' _"; + + bambu = "env -u WAYLAND_DISPLAY XDG_SESSION_TYPE=x11 WEBKIT_FORCE_COMPOSITING_MODE=1 WEBKIT_DISABLE_COMPOSITING_MODE=1 GBM_BACKEND=dri bambu-studio"; + + scale = "env GDK_BACKEND=x11 GDK_SCALE=1 GDK_DPI_SCALE=1"; + + hytale = "env -u WAYLAND_DISPLAY -u EGL_PLATFORM -u ELECTRON_ENABLE_WAYLAND DISPLAY=:0 XDG_SESSION_TYPE=x11 __GLX_VENDOR_LIBRARY_NAME=nvidia LD_LIBRARY_PATH=/run/opengl-driver/lib hytale-launcher"; + }; + }; +} diff --git a/nix/modules/audio.nix b/nix/modules/audio.nix new file mode 100644 index 0000000..4856538 --- /dev/null +++ b/nix/modules/audio.nix @@ -0,0 +1,24 @@ +{ config, pkgs, device, ... }: + +{ + security.rtkit.enable = true; + + services = { + pulseaudio.enable = false; + + pipewire = { + enable = true; + + wireplumber.enable = true; + + alsa.enable = true; + alsa.support32Bit = true; + + pulse.enable = true; + + lowLatency.enable = false; + + jack.enable = true; + }; + }; +} \ No newline at end of file diff --git a/nix/modules/beets.nix b/nix/modules/beets.nix new file mode 100644 index 0000000..7e61d4a --- /dev/null +++ b/nix/modules/beets.nix @@ -0,0 +1,52 @@ +{ config, lib, pkgs, ... }: + +{ + home = { + packages = with pkgs; [ + beets + ffmpeg + chromaprint + ]; + + file.".config/beets/config.yaml".text = '' + library: ~/.local/share/beets/library.db + directory: ~/Music + + import: + write: true + copy: true + + plugins: + - convert + - fetchart + - embedart + - fromfilename + - chroma + - smartplaylist + + paths: + default: $artist/$album/$track - $title + + convert: + auto: true + format: opus + formats: + opus: ffmpeg -i $source -y -vn -c:a libopus -b:a 160k $dest + dest: /home/bug/Music + + + fetchart: + auto: yes + ifempty: yes + art_filename: folder + + embedart: + auto: yes + + smartplaylist: + playlist_dir: ~/Music/playlists + relative_to: library + output: extm3u + ''; + }; +} \ No newline at end of file diff --git a/nix/modules/boot.nix b/nix/modules/boot.nix new file mode 100644 index 0000000..d9192ba --- /dev/null +++ b/nix/modules/boot.nix @@ -0,0 +1,23 @@ +{ config, pkgs, device, ... }: + +{ + boot = { + kernelModules = if (device == "desktop") then ["nvidia" "nvidia_modeset" "nvidia_uvm" "nvidia_drm" "uinput"] else []; + kernelParams = if (device == "desktop") then ["nvidia-drm.modeset=1" "nvidia_drm.fbdev=1"] else []; + + kernelPackages = pkgs.linuxPackages_zen; + + initrd.checkJournalingFS = false; + + loader = { + grub.splashImage = null; + + systemd-boot = { + enable = true; + configurationLimit = 25; + }; + + efi.canTouchEfiVariables = true; + }; + }; +} \ No newline at end of file diff --git a/nix/modules/cloudflared.nix b/nix/modules/cloudflared.nix new file mode 100644 index 0000000..6cc71c3 --- /dev/null +++ b/nix/modules/cloudflared.nix @@ -0,0 +1,28 @@ +{ config, pkgs, ... }: + +let + TUNNEL_UUID = "4118935e-359b-4dd2-95bd-eb27f7b0c5bb"; +in +{ + environment.systemPackages = [ pkgs.cloudflared ]; + + environment.etc."cloudflared/${TUNNEL_UUID}.json".source = "/home/bug/.cloudflared/${TUNNEL_UUID}.json"; + + services.cloudflared = { + enable = true; + + tunnels."${TUNNEL_UUID}" = { + credentialsFile = "/etc/cloudflared/${TUNNEL_UUID}.json"; + default = "http_status:404"; + + ingress = { + "tvtun.bug.tools" = "http://127.0.0.1:3001"; + "search.bug.tools" = "http://127.0.0.1:8888"; + "files.bug.tools" = "http://127.0.0.1:3210"; + "tube.bug.tools" = "http://127.0.0.1:3030"; + "monitor.bug.tools" = "http://127.0.0.1:61208"; + "reddit.bug.tools" = "http://127.0.0.1:8975"; + }; + }; + }; +} diff --git a/nix/modules/copyparty.nix b/nix/modules/copyparty.nix new file mode 100644 index 0000000..088c8a8 --- /dev/null +++ b/nix/modules/copyparty.nix @@ -0,0 +1,48 @@ +{ config, pkgs, inputs, ... }: + +{ + nixpkgs.overlays = [ inputs.copyparty.overlays.default ]; + + services.copyparty = { + enable = true; + + user = "bug"; + + group = "copyparty"; + + settings = { + i = "0.0.0.0"; + p = [ 3210 3211 ]; + no-reload = true; + ignored-flag = false; + }; + + accounts = { + bug = { + passwordFile = "/home/bug/mailserver/bug.passwd"; + }; + }; + + groups = { + g1 = [ "bug" ]; + }; + + volumes = { + "/" = { + path = "/srv/copyparty"; + + access = { + r = "*"; + rw = [ "bug" ]; + }; + + flags = { + fk = 4; + scan = 60; + }; + }; + }; + + openFilesLimit = 8192; + }; +} \ No newline at end of file diff --git a/nix/modules/cosmic.nix b/nix/modules/cosmic.nix new file mode 100644 index 0000000..5d53d54 --- /dev/null +++ b/nix/modules/cosmic.nix @@ -0,0 +1,62 @@ +{ config, pkgs, device, ... }: + +{ + services = { + greetd.enable = true; + + system76-scheduler.enable = true; + + displayManager = { + cosmic-greeter.enable = true; + + autoLogin = { + enable = (device == "desktop"); + user = "bug"; + }; + }; + + desktopManager.cosmic.enable = true; + }; + + environment.sessionVariables = { + COSMIC_DATA_CONTROL_ENABLED = 1; + }; + + xdg = { + portal = { + enable = true; + xdgOpenUsePortal = true; + + config.common.default = ["gtk"]; + + extraPortals = [pkgs.xdg-desktop-portal-gtk pkgs.xdg-desktop-portal-cosmic]; + }; + + mime = { + enable = true; + + defaultApplications = { + "text/html" = "firefox.desktop"; + "x-scheme-handler/http" = "firefox.desktop"; + "x-scheme-handler/https" = "firefox.desktop"; + "x-scheme-handler/about" = "firefox.desktop"; + "x-scheme-handler/unknown" = "firefox.desktop"; + "application/pdf" = "firefox.desktop"; + + "inode/directory" = "com.system76.CosmicFiles.desktop"; + + "text/plain" = "com.system76.CosmicEdit.desktop"; + "text/markdown" = "com.system76.CosmicEdit.desktop"; + + "application/zip" = "org.gnome.FileRoller.desktop"; + "application/x-7z-compressed" = "org.gnome.FileRoller.desktop"; + "application/x-tar" = "org.gnome.FileRoller.desktop"; + "application/gzip" = "org.gnome.FileRoller.desktop"; + "application/x-xz" = "org.gnome.FileRoller.desktop"; + "application/x-zip-compressed" = "org.gnome.FileRoller.desktop"; + + "application/x-ms-dos-executable" = "wine.desktop"; + }; + }; + }; +} \ No newline at end of file diff --git a/nix/modules/firefox.nix b/nix/modules/firefox.nix new file mode 100644 index 0000000..789302c --- /dev/null +++ b/nix/modules/firefox.nix @@ -0,0 +1,90 @@ +{ config, pkgs, device, ... }: + +{ + programs.firefox = { + enable = true; + package = pkgs.librewolf; + + profiles = { + "bug" = { + id = 0; + name = "bug"; + isDefault = true; + + }; + }; + + policies = { + DisableTelemetry = true; + DisableFirefoxStudies = true; + + Preferences = { + "cookiebanners.service.mode" = 2; + "cookiebanners.service.mode.privateBrowsing" = 2; + "network.cookie.lifetimePolicy" = 0; + "privacy.clearonShutdown.cookies" = false; + "privacy.claerOnShutdown.history" = false; + "privacy.donottrackheader.enabled" = true; + "privacy.fingerprintingProtection.enabled" = true; + "privacy.resistFingerprinting" = false; + "privacy.trackingprotection.enabled" = true; + "privacy.trackingprotection.socialtracking.enabled" = true; + "privacy.trackingprotection.fingerprinting.enabled" = true; + "privacy.trackingprotection.emailtracking.enabled" = true; + "webgl.disabled" = false; + }; + + /* + ExtensionSettings = { + # catppuccin no borders https://addons.mozilla.org/en-US/firefox/addon/catppuccin-mocha-no-borders/ + "catppuccin-mocha-no-borders@skyrpex" = { + installation_mode = "force_installed"; + install_url = "https://addons.mozilla.org/firefox/downloads/latest/catppuccin-mocha-no-borders/latest.xpi"; + }; + + # DeArrow + "dearrow@jetpack" = { + installation_mode = "force_installed"; + install_url = "https://addons.mozilla.org/firefox/downloads/latest/dearrow-jetpack/latest.xpi"; + }; + + # Return Youtube Dislike + "return-youtube-dislike@0.4.11" = { + installation_mode = "force_installed"; + install_url = "https://addons.mozilla.org/firefox/downloads/latest/return-youtube-dislike/latest.xpi"; + }; + + # SponsorBlock for YouTube + "sponsorblock@sponsorblock.com" = { + installation_mode = "force_installed"; + install_url = "https://addons.mozilla.org/firefox/downloads/latest/sponsorblock-for-youtube/latest.xpi"; + }; + + # Stylus + "stylus@stylus" = { + installation_mode = "force_installed"; + install_url = "https://addons.mozilla.org/firefox/downloads/latest/stylus/latest.xpi"; + }; + + # Tampermonkey + "tampermonkey.net" = { + installation_mode = "force_installed"; + install_url = "https://addons.mozilla.org/firefox/downloads/latest/tampermonkey/latest.xpi"; + }; + + # uBlock Origin + "ublockorigin@raymondhill.net" = { + installation_mode = "force_installed"; + install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi"; + }; + + # BTRoblox + "btroblox@btroblox" = { + installation_mode = "force_installed"; + install_url = "https://addons.mozilla.org/firefox/downloads/latest/btroblox/latest.xpi"; + }; + }; + */ + }; + }; +} diff --git a/nix/modules/glances.nix b/nix/modules/glances.nix new file mode 100644 index 0000000..75254c7 --- /dev/null +++ b/nix/modules/glances.nix @@ -0,0 +1,44 @@ +{ config, pkgs, lib, ... }: + +{ + environment.systemPackages = [ + pkgs.glances + ]; + + users.users.glances = { + isSystemUser = true; + group = "glances"; + home = "/var/lib/glances"; + createHome = true; + }; + + users.groups.glances = {}; + + systemd.services.glances-web = { + description = "glances web interface"; + after = [ "network-online.target" ]; + wantedBy = [ "multi-user.target" ]; + + serviceConfig = { + User = "glances"; + Group = "glances"; + + ExecStart = '' + ${pkgs.glances}/bin/glances \ + -w \ + -p 61208 \ + -B 0.0.0.0 + ''; + + Restart = "always"; + RestartSec = 5; + + NoNewPrivileges = true; + PrivateTmp = true; + ProtectSystem = "strict"; + ProtectHome = true; + LockPersonality = true; + MemoryDenyWriteExecute = true; + }; + }; +} diff --git a/nix/modules/graphics.nix b/nix/modules/graphics.nix new file mode 100644 index 0000000..9789053 --- /dev/null +++ b/nix/modules/graphics.nix @@ -0,0 +1,88 @@ +{ config, pkgs, device, ... }: + +{ + services = { + xserver = { + enable = true; + + videoDrivers = if (device == "desktop") then ["nvidia"] else ["amdgpu"]; + excludePackages = [pkgs.xterm]; + + xkb = { + layout = "us"; + variant = ""; + }; + }; + }; + + hardware = { + graphics = { + enable = true; + enable32Bit = true; + + extraPackages = with pkgs; [ + libva-vdpau-driver + libvdpau + libvdpau-va-gl + vdpauinfo + libva + libva-utils + libglvnd + mesa + ] ++ (if (device == "desktop") then [ + nvidia-vaapi-driver + ] else [ + + ]); + }; + + nvidia = if (device == "desktop") then { + modesetting.enable = true; + + powerManagement.enable = false; + powerManagement.finegrained = false; + + open = false; + + nvidiaSettings = true; + + package = config.boot.kernelPackages.nvidiaPackages.beta; + + nvidiaPersistenced = true; + } else {}; + + enableRedistributableFirmware = true; + }; + + + environment = { + variables = { + + } // (if (device == "desktop") then { + WGPU_BACKEND = "gl"; + GBM_BACKEND = "nvidia-drm"; + LIBVA_DRIVER_NAME = "nvidia"; + __GLX_VENDOR_LIBRARY_NAME = "nvidia"; + EGL_PLATFORM = "wayland"; + } else { + + }); + + sessionVariables = { + WEBKIT_DISABLE_COMPOSITING_MODE = "1"; + } // (if (device == "desktop") then { + WGPU_BACKEND = "gl"; + GBM_BACKEND = "nvidia-drm"; + LIBVA_DRIVER_NAME = "nvidia"; + __GLX_VENDOR_LIBRARY_NAME = "nvidia"; + EGL_PLATFORM = "wayland"; + } else { + + }); + }; + + services.logind.settings.Login = { + HandleLidSwitch = "ignore"; + HandleLidSwitchDocked = "ignore"; + }; +} \ No newline at end of file diff --git a/nix/modules/invidious.nix b/nix/modules/invidious.nix new file mode 100644 index 0000000..41ca650 --- /dev/null +++ b/nix/modules/invidious.nix @@ -0,0 +1,56 @@ +{ config, pkgs, lib, ... }: + +let + companionPort = 8282; + companionPath = "/companion"; + companionKey = "kKg3RKeZjE7frmuw"; +in +{ + virtualisation.podman.enable = true; + virtualisation.oci-containers.backend = lib.mkDefault "podman"; + + virtualisation.oci-containers.containers.invidious-companion = { + image = "quay.io/invidious/invidious-companion:latest"; + extraOptions = [ "--network=host" "--pull=always" ]; + + environment = { + SERVER_SECRET_KEY = companionKey; + HOST = "127.0.0.1"; + PORT = toString companionPort; + SERVER_BASE_URL = "http://127.0.0.1:${toString companionPort}"; + + # HTTP_PROXY = "http://proxy.example:3128"; + # HTTPS_PROXY = "http://proxy.example:3128"; + # NO_PROXY = "127.0.0.1,localhost"; + }; + }; + + services.invidious = { + enable = true; + package = pkgs.invidious; + + address = "127.0.0.1"; + port = 3030; + + nginx.enable = false; + sig-helper.enable = false; + + settings = { + domain = "tube.bug.tools"; + https_only = false; + external_port = 3030; + + invidious_companion = [ + { private_url = "http://127.0.0.1:${toString companionPort}${companionPath}"; } + ]; + + invidious_companion_key = companionKey; + }; + }; + + systemd.services.invidious = let dep = "podman-invidious-companion.service"; in { + wants = [ dep ]; + after = [ dep ]; + requires = [ dep ]; + }; +} \ No newline at end of file diff --git a/nix/modules/locale.nix b/nix/modules/locale.nix new file mode 100644 index 0000000..a7802f0 --- /dev/null +++ b/nix/modules/locale.nix @@ -0,0 +1,21 @@ +{ config, pkgs, device, ... }: + +{ + time.timeZone = "America/Chicago"; + + i18n = { + defaultLocale = "en_US.UTF-8"; + + extraLocaleSettings = { + LC_ADDRESS = "en_US.UTF-8"; + LC_IDENTIFICATION = "en_US.UTF-8"; + LC_MEASUREMENT = "en_US.UTF-8"; + LC_MONETARY = "en_US.UTF-8"; + LC_NAME = "en_US.UTF-8"; + LC_NUMERIC = "en_US.UTF-8"; + LC_PAPER = "en_US.UTF-8"; + LC_TELEPHONE = "en_US.UTF-8"; + LC_TIME = "en_US.UTF-8"; + }; + }; +} \ No newline at end of file diff --git a/nix/modules/mailserver.nix b/nix/modules/mailserver.nix new file mode 100644 index 0000000..5adc563 --- /dev/null +++ b/nix/modules/mailserver.nix @@ -0,0 +1,45 @@ +{ config, pkgs, device, ... }: + +{ + imports = [ + (builtins.fetchTarball { + url = "https://gitlab.com/simple-nixos-mailserver/nixos-mailserver/-/archive/master.tar.gz"; + + sha256 = "0xlhl8zhcz5c6hvmpkfw9ay2lfnk6nhax8pphvbv3vzxf1p9dhw9"; + }) + ]; + + security.acme = { + acceptTerms = true; + defaults.email = "security@bug.tools"; + + certs."mail.bug.tools" = { + listenHTTP = "1360"; + }; + }; + + mailserver = { + enable = true; + + stateVersion = 3; + + fqdn = "mail.bug.tools"; + domains = [ "bug.tools" ]; + + x509.useACMEHost = "mail.bug.tools"; + + loginAccounts = { + "bug@bug.tools" = { + hashedPasswordFile = "/home/bug/mailserver/bug.passwd"; + aliases = [ + "admin@bug.tools" + "google@bug.tools" + ]; + }; + + "pare@bug.tools" = { + hashedPasswordFile = "/home/bug/mailserver/pare.passwd"; + }; + }; + }; +} \ No newline at end of file diff --git a/nix/modules/mpd.nix b/nix/modules/mpd.nix new file mode 100644 index 0000000..a8c8293 --- /dev/null +++ b/nix/modules/mpd.nix @@ -0,0 +1,37 @@ +{ config, pkgs, device, ... }: + +{ + services = { + mpd = { + enable = true; + + settings = { + music_directory = (if (device == "desktop") then "/home/bug/Music" else "/run/media/bug/Music/"); + + decoder = [ + { + plugin = "ffmpeg"; + enabled = "yes"; + } + { + plugin = "opus"; + enabled = "no"; + } + ]; + + audio_output = [{ + type = "pipewire"; + name = "PipeWire Sound Server"; + }]; + }; + + user = "bug"; + }; + }; + + systemd.services = { + mpd.environment = { + XDG_RUNTIME_DIR = "/run/user/1000"; + }; + }; +} \ No newline at end of file diff --git a/nix/modules/network.nix b/nix/modules/network.nix new file mode 100644 index 0000000..230f9a3 --- /dev/null +++ b/nix/modules/network.nix @@ -0,0 +1,25 @@ +{ config, pkgs, device, ... }: + +{ + networking = { + hostName = if (device == "server") then "box" else "nix"; + + networkmanager.enable = true; + + nameservers = [ "1.1.1.1" "1.0.0.1" ]; + }; + + services = { + cloudflare-warp.enable = (device == "laptop"); + + openssh = { + enable = true; + + settings = { + PrintMotd = true; + X11Forwarding = true; + AllowTcpForwarding = true; + }; + }; + }; +} \ No newline at end of file diff --git a/nix/modules/packages.nix b/nix/modules/packages.nix new file mode 100644 index 0000000..533a174 --- /dev/null +++ b/nix/modules/packages.nix @@ -0,0 +1,360 @@ +{ lib, config, inputs, pkgs, options, device, ... }: + +let + nix-gaming = import (builtins.fetchTarball "https://github.com/fufexan/nix-gaming/archive/master.tar.gz"); + + nix-alien = import ( + builtins.fetchTarball "https://github.com/thiagokokada/nix-alien/tarball/master" + ) {}; +in +{ + imports = [ + nix-gaming.nixosModules.platformOptimizations + nix-gaming.nixosModules.pipewireLowLatency + ]; + + nixpkgs = { + config = { + allowUnfree = true; + + cudaSupport = (device == "desktop"); + nvidia.acceptLicense = (device == "desktop"); + }; + + overlays = [ + + ]; + }; + + environment.sessionVariables = { + BROWSER = "firefox"; + NIXPKGS_ALLOW_UNFREE = 1; + }; + + users.users.bug.packages = with pkgs; [ + vscode + + (luajit.withPackages (ps: with ps; [ + luasocket + bit32 + ])) + + go + + #(python3.withPackages (ps: with ps; [ + #unidecode + #discordpy + #setuptools + + #pip + #pynput + #python-uinput + + #mido + + #pyautogui + #pygobject3 + #pycairo + + #tkinter + + #numpy + #scipy + #imageio + + #evdev + #])) + + nodejs + + (blender.withPackages (ps: with ps; [ + libGLU + gcc + zlib + libX11 + fontconfig + pcre2 + libXext + libxcb + glib + ])) + + plasticity + obsidian + vesktop + nicotine-plus + fastfetch + tree + gh + scanmem + samrewritten + impression + + mission-center + + authenticator + + steamtinkerlaunch + + obs-studio + + #prismlauncher + + euphonica + + kooha + + loupe + + arduino-ide + + geary + ]; + + environment.systemPackages = with pkgs; [ + home-manager + comma # run nixpkgs without installing + nix-index + + git + wget + + gcc + gnumake + + nmap + inetutils + + nix-prefetch + nix-output-monitor + nvd # nix pkg diff + + nixfmt # nix formatter + nixd # nix language server + nil # nix language server + + nh # nix helper + + gnome-boxes # gnome vm manager + vulkan-tools + + openjdk + zlib + glfw + glew + + wine64 + wineWow64Packages.full + + lug-helper + + appimage-run + + + vulkan-validation-layers + vulkan-loader + + pulseaudioFull + + gamemode + + winetricks + + steam-run + + firmware-updater + + cosmic-applets + cosmic-edit + cosmic-ext-calculator + cosmic-ext-tweaks + cosmic-screenshot + quick-webapps + + nix-alien.nix-alien + + file-roller + unzip + + xdg-desktop-portal-gtk + xdg-desktop-portal-cosmic + + mangohud + mesa-demos + + lutris + + gnome-software + + neovim + + micro + + inputs.hytale-launcher.packages.${pkgs.system}.default + + baobab + + psmisc + + firefox-bin + ] ++ (if (device == "desktop") then [ + #(nix-gaming.packages.${pkgs.stdenv.hostPlatform.system}.star-citizen.override { + # tricks = [ "arial" "vcrun2019" "win10" "sound=alsa" ]; + #}) + + inputs.nix-citizen.packages.${system}.rsi-launcher + + libxshmfence + + (appimage-run.override { + extraPkgs = pkgs: [ pkgs.xorg.libxshmfence pkgs.linuxPackages.nvidia_x11 ]; + }) + ] else [ + bambu-studio + ]); + + services = { + flatpak = { + enable = true; + + remotes = lib.mkOptionDefault [{ + name = "flathub-beta"; + location = "https://flathub.org/beta-repo/flathub-beta.flatpakrepo"; + }]; + + update.auto.enable = true; + uninstallUnmanaged = true; + + packages = [ + "org.vinegarhq.Sober" + "org.vinegarhq.Vinegar" + "org.gnome.Decibels" + "org.pipewire.Helvum" + "community.pathofbuilding.PathOfBuilding" + "io.github.gaheldev.Millisecond" + + { + appId = "com.hytale.Launcher"; + sha256 = "sha256-SUxfyovC2umZmsOj5bOTZ8WfGCpnWcz7svOESwNekV0="; + bundle = "${pkgs.fetchurl { + url = "https://launcher.hytale.com/builds/release/linux/amd64/hytale-launcher-latest.flatpak"; + sha256 = "sha256-SUxfyovC2umZmsOj5bOTZ8WfGCpnWcz7svOESwNekV0="; + }}"; + } + + # add Polytoria client + # https://cdn.polytoria.com/releases/installer/linux/Polytoria%20Setup%204.12.0.flatpak + + { + appId = "com.polytoria.launcher"; + sha256 = "sha256-VjhNiJfSdCtlH2SuP3Mn8jjOrx5xcOqhtDKaWYIwxYg="; + bundle = "${pkgs.fetchurl { + url = "https://github.com/4DBug/poly/releases/download/poly/poly.flatpak"; + sha256 = "sha256-VjhNiJfSdCtlH2SuP3Mn8jjOrx5xcOqhtDKaWYIwxYg="; + }}"; + } + ]; + + overrides = { + global = { + Context.sockets = ["wayland" "!x11" "!fallback-x11"]; + }; + }; + }; + + ollama = { + enable = false; + + loadModels = [ "llama3.2:3b" "deepseek-r1:1.5b" "deepseek-r1:8b"]; + }; + }; + + fonts = { + fontDir.enable = true; + enableDefaultPackages = true; + + packages = with pkgs; [ + twitter-color-emoji + nerd-fonts.fira-code + nerd-fonts.droid-sans-mono + ]; + + fontconfig = { + enable = true; + useEmbeddedBitmaps = true; + + defaultFonts = { + emoji = [ "Twitter Color Emoji" ]; + }; + }; + }; + + programs = { + rsi-launcher = { + enable = (device == "desktop"); + + preCommands = '' + export DISPLAY=; + ''; + }; + + appimage = { + enable = true; + binfmt = true; + }; + + firefox = { + enable = true; + + package = pkgs.firefox-bin; + }; + + steam = { + enable = true; + + remotePlay.openFirewall = true; + dedicatedServer.openFirewall = false; + + localNetworkGameTransfers.openFirewall = true; + + gamescopeSession.enable = true; + + extraCompatPackages = with pkgs; [ + proton-ge-bin + ]; + + platformOptimizations.enable = true; + }; + + ydotool.enable = true; + + gamescope = { + enable = true; + capSysNice = true; + args = [ + "--rt" + "--expose-wayland" + ]; + }; + + virt-manager.enable = true; + + nix-ld = { + enable = true; + + libraries = options.programs.nix-ld.libraries.default ++ (with pkgs; [ + libxml2 + udev + gcc + egl-wayland + mesa + libglvnd + wayland + libX11 + libXcursor + libXrandr + libXi + ]); + }; + }; +} \ No newline at end of file diff --git a/nix/modules/redlib.nix b/nix/modules/redlib.nix new file mode 100644 index 0000000..72c78ef --- /dev/null +++ b/nix/modules/redlib.nix @@ -0,0 +1,35 @@ +{ config, lib, pkgs, ... }: + +{ + services.redlib = { + enable = true; + + address = "127.0.0.1"; + port = 8975; + openFirewall = false; + + settings = { + SFW_ONLY = "off"; # ["on", "off"] + ROBOTS_DISABLE_INDEXING = "on"; # ["on", "off"] + ENABLE_RSS = "on"; # ["on", "off"] + THEME = "system"; # ["system", "light", "dark", "black", "dracula", "nord", "laserwave", "violet", "gold", "rosebox", "gruvboxdark", "gruvboxlight", "tokyoNight", "icebergDark", "doomone", "libredditBlack", "libredditDark", "libredditLight"] + FRONT_PAGE = "default"; # ["default", "popular", "all"] + LAYOUT = "card"; # ["card", "clean", "compact"] + WIDE = "on"; # ["on", "off"] + POST_SORT = "hot"; # ["hot", "new", "top", "rising", "controversial"] + COMMENT_SORT = "confidence"; # ["confidence", "top", "new", "controversial", "old"] + BLUR_SPOILER = "off"; # ["on", "off"] + SHOW_NSFW = "on"; # ["on", "off"] + BLUR_NSFW = "off"; # ["on", "off"] + USE_HLS = "on"; # ["on", "off"] + HIDE_HLS_NOTIFICATION = "off"; # ["on", "off"] + AUTOPLAY_VIDEOS = "off"; # ["on", "off"] + HIDE_AWARDS = "off"; # ["on", "off"] + DISABLE_VISIT_REDDIT_CONFIRMATION = "off"; # ["on", "off"] + HIDE_SCORE = "off"; # ["on", "off"] + HIDE_SIDEBAR_AND_SUMMARY = "off"; # ["on", "off"] + FIXED_NAVBAR = "on"; # ["on", "off"] + REMOVE_DEFAULT_FEEDS = "off"; # ["on", "off"] + }; + }; +} diff --git a/nix/modules/searxng.nix b/nix/modules/searxng.nix new file mode 100755 index 0000000..fe54f23 --- /dev/null +++ b/nix/modules/searxng.nix @@ -0,0 +1,23 @@ +{ config, lib, pkgs, ... }: + +{ + systemd.services.searx-init.serviceConfig.EnvironmentFile = [ + "/home/bug/.searxng.env" + ]; + + services.searx = { + enable = true; + redisCreateLocally = false; + configureUwsgi = false; + settingsFile = ./searxng.yml; + environmentFile = "/home/bug/.searxng.env"; + + settings = { + general.instance_name = "search.bug.tools"; + + server.port = 8888; + server.bind_address = "0.0.0.0"; + server.secret_key = "$SEARX_SECRET_KEY"; + }; + }; +} \ No newline at end of file diff --git a/nix/modules/searxng.yml b/nix/modules/searxng.yml new file mode 100644 index 0000000..cbeac08 --- /dev/null +++ b/nix/modules/searxng.yml @@ -0,0 +1,2826 @@ +general: + # Debug mode, only for development. Is overwritten by ${SEARXNG_DEBUG} + debug: false + # displayed name + instance_name: "search.bug.tools" + # For example: https://example.com/privacy + privacypolicy_url: false + # use true to use your own donation page written in searx/info/en/donate.md + # use false to disable the donation link + donation_url: false + # mailto:contact@example.com + contact_url: false + # record stats + enable_metrics: true + # expose stats in open metrics format at /metrics + # leave empty to disable (no password set) + # open_metrics: + open_metrics: '' + +brand: + new_issue_url: https://github.com/searxng/searxng/issues/new + docs_url: https://docs.searxng.org/ + public_instances: https://searx.space + wiki_url: https://github.com/searxng/searxng/wiki + issue_url: https://github.com/searxng/searxng/issues + custom: + # # Custom entries in the footer: [title]: [link] + links: + Glance: https://glance.m4rx.cc + GitHub NixOS Config: https://github.com/xerhaxs/nixos + # Uptime: https://uptime.searxng.org/history/darmarit-org + # About: "https://searxng.org" + +search: + # Filter results. 0: None, 1: Moderate, 2: Strict + safe_search: 0 + # Existing autocomplete backends: "360search", "baidu", "brave", "dbpedia", "duckduckgo", "google", "yandex", + # "mwmbl", "naver", "seznam", "sogou", "startpage", "stract", "swisscows", "quark", "qwant", "wikipedia" - + # leave blank to turn it off by default. + autocomplete: "qwant" + # minimun characters to type before autocompleter starts + autocomplete_min: 3 + # backend for the favicon near URL in search results. + # Available resolvers: "allesedv", "duckduckgo", "google", "yandex" - leave blank to turn it off by default. + favicon_resolver: "duckduckgo" + # Default search language - leave blank to detect from browser information or + # use codes from 'languages.py' + default_lang: "auto" + # max_page: 0 # if engine supports paging, 0 means unlimited numbers of pages + # Available languages + # languages: + # - all + # - en + # - en-US + # - de + # - it-IT + # - fr + # - fr-BE + # ban time in seconds after engine errors + ban_time_on_fail: 5 + # max ban time in seconds after engine errors + max_ban_time_on_fail: 120 + suspended_times: + # Engine suspension time after error (in seconds; set to 0 to disable) + # For error "Access denied" and "HTTP error [402, 403]" + SearxEngineAccessDenied: 86400 + # For error "CAPTCHA" + SearxEngineCaptcha: 86400 + # For error "Too many request" and "HTTP error 429" + SearxEngineTooManyRequests: 3600 + # Cloudflare CAPTCHA + cf_SearxEngineCaptcha: 1296000 + cf_SearxEngineAccessDenied: 86400 + # ReCAPTCHA + recaptcha_SearxEngineCaptcha: 604800 + + # remove format to deny access, use lower case. + # formats: [html, csv, json, rss] + formats: + - html + +server: + # Is overwritten by ${SEARXNG_PORT} and ${SEARXNG_BIND_ADDRESS} + port: 8888 + bind_address: "127.0.0.1" + # public URL of the instance, to ensure correct inbound links. Is overwritten + # by ${SEARXNG_BASE_URL}. + base_url: false # "http://example.com/location" + # rate limit the number of request on the instance, block some bots. + # Is overwritten by ${SEARXNG_LIMITER} + limiter: false + # enable features designed only for public instances. + # Is overwritten by ${SEARXNG_PUBLIC_INSTANCE} + public_instance: false + + # If your instance owns a /etc/searxng/settings.yml file, then set the following + # values there. + + secret_key: "${SEARX_SECRET_KEY}" # Is overwritten by ${SEARXNG_SECRET} + # Proxy image results through SearXNG. Is overwritten by ${SEARXNG_IMAGE_PROXY} + image_proxy: false + # 1.0 and 1.1 are supported + http_protocol_version: "1.1" + # POST queries are "more secure!" but are also the source of hard-to-locate + # annoyances, which is why GET may be better for end users and their browsers. + # see https://github.com/searxng/searxng/pull/3619 + # Is overwritten by ${SEARXNG_METHOD} + method: "POST" + default_http_headers: + X-Content-Type-Options: nosniff + X-Download-Options: noopen + X-Robots-Tag: noindex, nofollow + Referrer-Policy: no-referrer + +valkey: + # URL to connect valkey database. Is overwritten by ${SEARXNG_VALKEY_URL}. + # https://docs.searxng.org/admin/settings/settings_valkey.html#settings-valkey + # url: valkey://localhost:6379/0 + url: false + +ui: + # Custom static path - leave it blank if you didn't change + static_path: "" + # Custom templates path - leave it blank if you didn't change + templates_path: "" + # query_in_title: When true, the result page's titles contains the query + # it decreases the privacy, since the browser can records the page titles. + query_in_title: true + # ui theme + default_theme: simple + # center the results ? + center_alignment: false + # URL prefix of the internet archive, don't forget trailing slash (if needed). + # cache_url: "https://webcache.googleusercontent.com/search?q=cache:" + # Default interface locale - leave blank to detect from browser information or + # use codes from the 'locales' config section + default_locale: "" + # Open result links in a new tab by default + # results_on_new_tab: false + theme_args: + # style of simple theme: auto, light, dark, black + simple_style: auto + # Perform search immediately if a category selected. + # Disable to select multiple categories at once and start the search manually. + search_on_category_select: true + # Hotkeys: default or vim + hotkeys: default + # URL formatting: pretty, full or host + url_formatting: full + +# Lock arbitrary settings on the preferences page. +# +# preferences: +# lock: +# - categories +# - language +# - autocomplete +# - favicon +# - safesearch +# - method +# - doi_resolver +# - locale +# - theme +# - results_on_new_tab +# - search_on_category_select +# - method +# - image_proxy +# - query_in_title + +# communication with search engines +# +outgoing: + # default timeout in seconds, can be override by engine + request_timeout: 3.0 + # the maximum timeout in seconds + # max_request_timeout: 10.0 + # suffix of searxng_useragent, could contain information like an email address + # to the administrator + useragent_suffix: "" + # The maximum number of concurrent connections that may be established. + pool_connections: 100 + # Allow the connection pool to maintain keep-alive connections below this + # point. + pool_maxsize: 20 + # See https://www.python-httpx.org/http2/ + enable_http2: true + # uncomment below section if you want to use a custom server certificate + # see https://www.python-httpx.org/advanced/#changing-the-verification-defaults + # and https://www.python-httpx.org/compatibility/#ssl-configuration + # verify: ~/.mitmproxy/mitmproxy-ca-cert.cer + # + # uncomment below section if you want to use a proxyq see: SOCKS proxies + # https://2.python-requests.org/en/latest/user/advanced/#proxies + # are also supported: see + # https://2.python-requests.org/en/latest/user/advanced/#socks + # + # proxies: + # all://: + # - http://proxy1:8080 + # - http://proxy2:8080 + # + # using_tor_proxy: true + # + # Extra seconds to add in order to account for the time taken by the proxy + # + # extra_proxy_timeout: 10 + # + # uncomment below section only if you have more than one network interface + # which can be the source of outgoing search requests + # + # source_ips: + # - 1.1.1.1 + # - 1.1.1.2 + # - fe80::/126 + + +# Plugin configuration, for more details see +# https://docs.searxng.org/admin/settings/settings_plugins.html +# +plugins: + + searx.plugins.calculator.SXNGPlugin: + active: false + + #searx.plugins.infinite_scroll.SXNGPlugin: + # active: false + + searx.plugins.hash_plugin.SXNGPlugin: + active: true + + searx.plugins.self_info.SXNGPlugin: + active: true + + searx.plugins.unit_converter.SXNGPlugin: + active: true + + searx.plugins.ahmia_filter.SXNGPlugin: + active: true + + searx.plugins.hostnames.SXNGPlugin: + active: true + + searx.plugins.time_zone.SXNGPlugin: + active: true + + searx.plugins.oa_doi_rewrite.SXNGPlugin: + active: false + + searx.plugins.tor_check.SXNGPlugin: + active: false + + searx.plugins.tracker_url_remover.SXNGPlugin: + active: true + + +# Configuration of the "Hostnames plugin": +# +# hostnames: +# replace: +# '(.*\.)?youtube\.com$': 'yt.example.com' +# '(.*\.)?youtu\.be$': 'yt.example.com' +# '(.*\.)?reddit\.com$': 'teddit.example.com' +# '(.*\.)?redd\.it$': 'teddit.example.com' +# '(www\.)?twitter\.com$': 'nitter.example.com' +# remove: +# - '(.*\.)?facebook.com$' +# low_priority: +# - '(.*\.)?google(\..*)?$' +# high_priority: +# - '(.*\.)?wikipedia.org$' +# +# Alternatively you can use external files for configuring the "Hostnames plugin": +# +# hostnames: +# replace: 'rewrite-hosts.yml' +# +# Content of 'rewrite-hosts.yml' (place the file in the same directory as 'settings.yml'): +# '(.*\.)?youtube\.com$': 'yt.example.com' +# '(.*\.)?youtu\.be$': 'yt.example.com' +# + +checker: + # disable checker when in debug mode + off_when_debug: true + + # use "scheduling: {}" to disable scheduling + # scheduling: interval or int + + # to activate the scheduler: + # * uncomment "scheduling" section + # * add "cache2 = name=searxngcache,items=2000,blocks=2000,blocksize=4096,bitmap=1" + # to your uwsgi.ini + + # scheduling: + # start_after: [300, 1800] # delay to start the first run of the checker + # every: [86400, 90000] # how often the checker runs + + # additional tests: only for the YAML anchors (see the engines section) + # + additional_tests: + rosebud: &test_rosebud + matrix: + query: rosebud + lang: en + result_container: + - not_empty + - ['one_title_contains', 'citizen kane'] + test: + - unique_results + + android: &test_android + matrix: + query: ['android'] + lang: ['en', 'de'] + result_container: + - not_empty + - ['one_title_contains', 'google'] + test: + - unique_results + + # tests: only for the YAML anchors (see the engines section) + tests: + infobox: &tests_infobox + infobox: + matrix: + query: ["linux", "new york", "bbc"] + result_container: + - has_infobox + +categories_as_tabs: + general: + images: + videos: + #news: + map: + #music: + it: + science: + files: + social media: + +engines: + - name: 360search + engine: 360search + shortcut: 360so + disabled: true + + - name: 360search videos + engine: 360search_videos + shortcut: 360sov + disabled: true + + - name: 9gag + engine: 9gag + shortcut: 9g + disabled: true + + - name: acfun + engine: acfun + shortcut: acf + disabled: true + + - name: adobe stock + engine: adobe_stock + shortcut: asi + categories: ["images"] + # https://docs.searxng.org/dev/engines/online/adobe_stock.html + adobe_order: relevance + adobe_content_types: ["photo", "illustration", "zip_vector", "template", "3d", "image"] + timeout: 6 + disabled: true + + - name: adobe stock video + engine: adobe_stock + shortcut: asv + network: adobe stock + categories: ["videos"] + adobe_order: relevance + adobe_content_types: ["video"] + timeout: 6 + disabled: true + + - name: adobe stock audio + engine: adobe_stock + shortcut: asa + network: adobe stock + categories: ["music"] + adobe_order: relevance + adobe_content_types: ["audio"] + timeout: 6 + disabled: true + + - name: astrophysics data system + engine: astrophysics_data_system + shortcut: ads + # read https://docs.searxng.org/dev/engines/online/astrophysics_data_system.html + api_key: "" + inactive: true + + - name: alpine linux packages + engine: alpinelinux + disabled: true + shortcut: alp + + - name: annas archive + engine: annas_archive + disabled: true + shortcut: aa + timeout: 5 + + - name: ansa + engine: ansa + shortcut: ans + disabled: true + + # - name: annas articles + # engine: annas_archive + # shortcut: aaa + # # https://docs.searxng.org/dev/engines/online/annas_archive.html + # aa_content: 'magazine' # book_fiction, book_unknown, book_nonfiction, book_comic + # aa_ext: 'pdf' # pdf, epub, .. + # aa_sort: oldest' # newest, oldest, largest, smallest + + - name: apk mirror + engine: apkmirror + timeout: 4.0 + shortcut: apkm + disabled: true + + - name: apple app store + engine: apple_app_store + shortcut: aps + disabled: true + + # Requires Tor + - name: ahmia + engine: ahmia + categories: onions + enable_http: true + shortcut: ah + + - name: anaconda + engine: xpath + paging: true + first_page_num: 0 + search_url: https://anaconda.org/search?q={query}&page={pageno} + results_xpath: //tbody/tr + url_xpath: ./td/h5/a[last()]/@href + title_xpath: ./td/h5 + content_xpath: ./td[h5]/text() + categories: it + timeout: 6.0 + shortcut: conda + disabled: true + + - name: arch linux wiki + engine: archlinux + shortcut: al + + - name: nixos wiki + engine: mediawiki + shortcut: nixw + base_url: https://wiki.nixos.org/ + search_type: text + categories: [it, software wikis] + + - name: artic + engine: artic + shortcut: arc + timeout: 4.0 + disabled: true + + - name: arxiv + engine: arxiv + categories: "science" + shortcut: arx + + - name: ask + engine: ask + shortcut: ask + disabled: true + + # - name: azure + # engine: azure + # shortcut: az + # categories: [it, cloud] + # azure_tenant_id: "your_tenant_id" + # azure_client_id: "your_client_id" + # azure_client_secret: "your_client_secret" + # disabled: true + + # tmp suspended: dh key too small + # - name: base + # engine: base + # shortcut: bs + + - name: bandcamp + engine: bandcamp + shortcut: bc + categories: music + disabled: true + + - name: baidu + baidu_category: general + categories: [general] + engine: baidu + shortcut: bd + disabled: true + + - name: baidu images + baidu_category: images + categories: [images] + engine: baidu + shortcut: bdi + disabled: true + + - name: baidu kaifa + baidu_category: it + categories: [it] + engine: baidu + shortcut: bdk + disabled: true + + - name: wikipedia + engine: wikipedia + shortcut: wp + # add "list" to the array to get results in the results list + display_type: ["infobox"] + categories: [general] + + - name: bilibili + engine: bilibili + shortcut: bil + disabled: true + + - name: bing + engine: bing + shortcut: bi + disabled: true + + - name: bing images + engine: bing_images + shortcut: bii + + - name: bing news + engine: bing_news + shortcut: bin + disabled: true + + - name: bing videos + engine: bing_videos + shortcut: biv + disabled: true + + - name: bitchute + engine: bitchute + shortcut: bit + disabled: true + + - name: bitbucket + engine: xpath + paging: true + search_url: https://bitbucket.org/repo/all/{pageno}?name={query} + url_xpath: //article[@class="repo-summary"]//a[@class="repo-link"]/@href + title_xpath: //article[@class="repo-summary"]//a[@class="repo-link"] + content_xpath: //article[@class="repo-summary"]/p + categories: [it, repos] + timeout: 4.0 + disabled: true + shortcut: bb + about: + website: https://bitbucket.org/ + wikidata_id: Q2493781 + official_api_documentation: https://developer.atlassian.com/bitbucket + use_official_api: false + require_api_key: false + results: HTML + + - name: bpb + engine: bpb + shortcut: bpb + disabled: true + + - name: btdigg + engine: btdigg + shortcut: bt + disabled: true + + - name: openverse + engine: openverse + categories: images + shortcut: opv + + - name: media.ccc.de + engine: ccc_media + shortcut: c3tv + # We don't set language: de here because media.ccc.de is not just + # for a German audience. It contains many English videos and many + # German videos have English subtitles. + disabled: true + + - name: chefkoch + engine: chefkoch + shortcut: chef + # to show premium or plus results too: + # skip_premium: false + disabled: true + + # WARNING: links from chinaso.com voilate users privacy + # Before activate these engines its mandatory to read + # - https://github.com/searxng/searxng/issues/4694 + # - https://docs.searxng.org/dev/engines/online/chinaso.html + + - name: chinaso news + engine: chinaso + shortcut: chinaso + categories: [news] + chinaso_category: news + chinaso_news_source: all + disabled: true + inactive: true + + - name: chinaso images + engine: chinaso + network: chinaso news + shortcut: chinasoi + categories: [images] + chinaso_category: images + disabled: true + inactive: true + + - name: chinaso videos + engine: chinaso + network: chinaso news + shortcut: chinasov + categories: [videos] + chinaso_category: videos + disabled: true + inactive: true + + - name: cloudflareai + engine: cloudflareai + shortcut: cfai + # get api token and accont id from https://developers.cloudflare.com/workers-ai/get-started/rest-api/ + cf_account_id: 'your_cf_accout_id' + cf_ai_api: 'your_cf_api' + # create your ai gateway by https://developers.cloudflare.com/ai-gateway/get-started/creating-gateway/ + cf_ai_gateway: 'your_cf_ai_gateway_name' + # find the model name from https://developers.cloudflare.com/workers-ai/models/#text-generation + cf_ai_model: 'ai_model_name' + # custom your preferences + # cf_ai_model_display_name: 'Cloudflare AI' + # cf_ai_model_assistant: 'prompts_for_assistant_role' + # cf_ai_model_system: 'prompts_for_system_role' + timeout: 30 + disabled: true + + - name: core.ac.uk + engine: core + shortcut: cor + # read https://docs.searxng.org/dev/engines/online/core.html + api_key: "" + inactive: true + + - name: crossref + engine: crossref + shortcut: cr + timeout: 30 + disabled: true + + - name: crowdview + engine: json_engine + shortcut: cv + categories: general + paging: false + search_url: https://crowdview-next-js.onrender.com/api/search-v3?query={query} + results_query: results + url_query: link + title_query: title + content_query: snippet + title_html_to_text: true + content_html_to_text: true + disabled: true + about: + website: https://crowdview.ai/ + + - name: yep + engine: yep + shortcut: yep + categories: general + search_type: web + timeout: 5 + disabled: true + + - name: yep images + engine: yep + shortcut: yepi + categories: images + search_type: images + disabled: true + + - name: yep news + engine: yep + shortcut: yepn + categories: news + search_type: news + disabled: true + + - name: currency + engine: currency_convert + shortcut: cc + + - name: deezer + engine: deezer + shortcut: dz + disabled: true + + - name: destatis + engine: destatis + shortcut: destat + disabled: true + + - name: deviantart + engine: deviantart + shortcut: da + timeout: 3.0 + disabled: true + + - name: devicons + engine: devicons + shortcut: di + timeout: 3.0 + + - name: ddg definitions + engine: duckduckgo_definitions + shortcut: ddd + weight: 2 + disabled: true + tests: *tests_infobox + + # cloudflare protected + # - name: digbt + # engine: digbt + # shortcut: dbt + # timeout: 6.0 + # disabled: true + + - name: docker hub + engine: docker_hub + shortcut: dh + categories: [it, packages] + + - name: encyclosearch + engine: json_engine + shortcut: es + categories: general + paging: true + search_url: https://encyclosearch.org/encyclosphere/search?q={query}&page={pageno}&resultsPerPage=15 + results_query: Results + url_query: SourceURL + title_query: Title + content_query: Description + disabled: true + about: + website: https://encyclosearch.org + official_api_documentation: https://encyclosearch.org/docs/#/rest-api + use_official_api: true + require_api_key: false + results: JSON + + - name: erowid + engine: xpath + paging: true + first_page_num: 0 + page_size: 30 + search_url: https://www.erowid.org/search.php?q={query}&s={pageno} + url_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/@href + title_xpath: //dl[@class="results-list"]/dt[@class="result-title"]/a/text() + content_xpath: //dl[@class="results-list"]/dd[@class="result-details"] + categories: [] + shortcut: ew + disabled: true + about: + website: https://www.erowid.org/ + wikidata_id: Q1430691 + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + # - name: elasticsearch + # shortcut: els + # engine: elasticsearch + # base_url: http://localhost:9200 + # username: elastic + # password: changeme + # index: my-index + # enable_http: true + # # available options: match, simple_query_string, term, terms, custom + # query_type: match + # # if query_type is set to custom, provide your query here + # # custom_query_json: {"query":{"match_all": {}}} + # # show_metadata: false + # disabled: true + + - name: wikidata + engine: wikidata + shortcut: wd + timeout: 3.0 + weight: 2 + # add "list" to the array to get results in the results list + display_type: ["infobox"] + tests: *tests_infobox + categories: [general] + + - name: duckduckgo + engine: duckduckgo + shortcut: ddg + + - name: duckduckgo images + engine: duckduckgo_extra + categories: [images, web] + ddg_category: images + shortcut: ddi + disabled: true + + - name: duckduckgo videos + engine: duckduckgo_extra + categories: [videos, web] + ddg_category: videos + shortcut: ddv + disabled: true + + - name: duckduckgo news + engine: duckduckgo_extra + categories: [news, web] + ddg_category: news + shortcut: ddn + disabled: true + + - name: duckduckgo weather + engine: duckduckgo_weather + shortcut: ddw + disabled: true + + - name: apple maps + engine: apple_maps + shortcut: apm + disabled: true + timeout: 5.0 + + - name: emojipedia + engine: emojipedia + timeout: 4.0 + shortcut: em + disabled: true + + - name: tineye + engine: tineye + shortcut: tin + timeout: 9.0 + disabled: true + + - name: etymonline + engine: xpath + paging: true + search_url: https://etymonline.com/search?page={pageno}&q={query} + url_xpath: //a[contains(@class, "word__name--")]/@href + title_xpath: //a[contains(@class, "word__name--")] + content_xpath: //section[contains(@class, "word__defination")] + first_page_num: 1 + shortcut: et + categories: [dictionaries] + about: + website: https://www.etymonline.com/ + wikidata_id: Q1188617 + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + # - name: ebay + # engine: ebay + # shortcut: eb + # base_url: 'https://www.ebay.com' + # disabled: true + # timeout: 5 + + - name: 1x + engine: www1x + shortcut: 1x + timeout: 3.0 + disabled: true + + - name: fdroid + engine: fdroid + shortcut: fd + disabled: true + + - name: findthatmeme + engine: findthatmeme + shortcut: ftm + disabled: true + + - name: flickr + categories: images + shortcut: fl + # You can use the engine using the official stable API, but you need an API + # key, see: https://www.flickr.com/services/apps/create/ + # engine: flickr + # api_key: 'apikey' # required! + # Or you can use the html non-stable engine, activated by default + engine: flickr_noapi + + - name: free software directory + engine: mediawiki + shortcut: fsd + categories: [it, software wikis] + base_url: https://directory.fsf.org/ + search_type: title + timeout: 5.0 + disabled: true + about: + website: https://directory.fsf.org/ + wikidata_id: Q2470288 + + # - name: freesound + # engine: freesound + # shortcut: fnd + # disabled: true + # timeout: 15.0 + # API key required, see: https://freesound.org/docs/api/overview.html + # api_key: MyAPIkey + + - name: frinkiac + engine: frinkiac + shortcut: frk + disabled: true + + - name: fyyd + engine: fyyd + shortcut: fy + timeout: 8.0 + disabled: true + + - name: geizhals + engine: geizhals + shortcut: geiz + disabled: true + + - name: genius + engine: genius + shortcut: gen + disabled: true + + - name: gentoo + engine: mediawiki + shortcut: ge + categories: ["it", "software wikis"] + base_url: "https://wiki.gentoo.org/" + api_path: "api.php" + search_type: text + timeout: 10 + disabled: true + + - name: gitlab + engine: gitlab + base_url: https://gitlab.com + shortcut: gl + about: + website: https://gitlab.com/ + wikidata_id: Q16639197 + disabled: true + + # - name: gnome + # engine: gitlab + # base_url: https://gitlab.gnome.org + # shortcut: gn + # about: + # website: https://gitlab.gnome.org + # wikidata_id: Q44316 + + - name: github + engine: github + shortcut: gh + + - name: github code + engine: github_code + shortcut: ghc + disabled: true + ghc_auth: + # type is one of: + # * none + # * personal_access_token + # * bearer + # When none is passed, the token is not requried. + type: "none" + token: "token" + # specify whether to highlight the matching lines to the query + ghc_highlight_matching_lines: true + ghc_strip_new_lines: true + ghc_strip_whitespace: false + timeout: 10.0 + + - name: codeberg + # https://docs.searxng.org/dev/engines/online/gitea.html + engine: gitea + base_url: https://codeberg.org + shortcut: cb + disabled: true + + - name: gitea.com + engine: gitea + base_url: https://gitea.com + shortcut: gitea + disabled: true + + - name: goodreads + engine: goodreads + shortcut: good + timeout: 4.0 + disabled: true + + - name: google + engine: google + shortcut: go + # additional_tests: + # android: *test_android + disabled: true + + - name: google images + engine: google_images + shortcut: goi + # additional_tests: + # android: *test_android + # dali: + # matrix: + # query: ['Dali Christ'] + # lang: ['en', 'de', 'fr', 'zh-CN'] + # result_container: + # - ['one_title_contains', 'Salvador'] + disabled: true + + - name: google news + engine: google_news + shortcut: gon + # additional_tests: + # android: *test_android + disabled: true + + - name: google videos + engine: google_videos + shortcut: gov + # additional_tests: + # android: *test_android + + - name: google scholar + engine: google_scholar + categories: "science" + shortcut: gos + + - name: google play apps + engine: google_play + categories: [files, apps] + shortcut: gpa + play_categ: apps + disabled: true + + - name: google play movies + engine: google_play + categories: videos + shortcut: gpm + play_categ: movies + disabled: true + + - name: grokipedia + engine: grokipedia + shortcut: gp + disabled: true + inactive: true + + - name: material icons + engine: material_icons + shortcut: mi + disabled: true + + - name: habrahabr + engine: xpath + paging: true + search_url: https://habr.com/en/search/page{pageno}/?q={query} + results_xpath: //article[contains(@class, "tm-articles-list__item")] + url_xpath: .//a[@class="tm-title__link"]/@href + title_xpath: .//a[@class="tm-title__link"] + content_xpath: .//div[contains(@class, "article-formatted-body")] + categories: it + timeout: 4.0 + disabled: true + shortcut: habr + about: + website: https://habr.com/ + wikidata_id: Q4494434 + official_api_documentation: https://habr.com/en/docs/help/api/ + use_official_api: false + require_api_key: false + results: HTML + + - name: hackernews + engine: hackernews + shortcut: hn + disabled: true + + - name: hex + engine: hex + shortcut: hex + disabled: true + # Valid values: name inserted_at updated_at total_downloads recent_downloads + sort_criteria: "recent_downloads" + page_size: 10 + + - name: crates.io + engine: crates + shortcut: crates + disabled: true + timeout: 6.0 + disabled: true + + - name: hoogle + engine: xpath + search_url: https://hoogle.haskell.org/?hoogle={query} + results_xpath: '//div[@class="result"]' + title_xpath: './/div[@class="ans"]//a' + url_xpath: './/div[@class="ans"]//a/@href' + content_xpath: './/div[@class="from"]' + page_size: 20 + categories: [it, packages] + shortcut: ho + about: + website: https://hoogle.haskell.org/ + wikidata_id: Q34010 + official_api_documentation: https://hackage.haskell.org/api + use_official_api: false + require_api_key: false + results: JSON + disabled: true + + - name: il post + engine: il_post + shortcut: pst + disabled: true + + - name: huggingface + engine: huggingface + shortcut: hf + disabled: true + + - name: huggingface datasets + huggingface_endpoint: datasets + engine: huggingface + shortcut: hfd + disabled: true + + - name: huggingface spaces + huggingface_endpoint: spaces + engine: huggingface + shortcut: hfs + disabled: true + + - name: imdb + engine: imdb + shortcut: imdb + timeout: 6.0 + disabled: true + + - name: imgur + engine: imgur + shortcut: img + disabled: true + + - name: ina + engine: ina + shortcut: in + timeout: 6.0 + disabled: true + + # - name: invidious + # engine: invidious + # # if you want to use invidious with SearXNG you should setup one locally + # # https://github.com/searxng/searxng/issues/2722#issuecomment-2884993248 + # base_url: + # - https://invidious.example1.com + # - https://invidious.example2.com + # shortcut: iv + # timeout: 3.0 + + - name: ipernity + engine: ipernity + shortcut: ip + disabled: true + + - name: iqiyi + engine: iqiyi + shortcut: iq + disabled: true + + - name: jisho + engine: jisho + shortcut: js + timeout: 3.0 + disabled: true + + - name: kickass + engine: kickass + base_url: + - https://kickasstorrents.to + - https://kickasstorrents.cr + - https://kickasstorrent.cr + - https://kickass.sx + - https://kat.am + shortcut: kc + timeout: 4.0 + disabled: true + + - name: lemmy communities + engine: lemmy + lemmy_type: Communities + shortcut: leco + + - name: lemmy users + engine: lemmy + network: lemmy communities + lemmy_type: Users + shortcut: leus + + - name: lemmy posts + engine: lemmy + network: lemmy communities + lemmy_type: Posts + shortcut: lepo + + - name: lemmy comments + engine: lemmy + network: lemmy communities + lemmy_type: Comments + shortcut: lecom + + - name: library genesis + engine: xpath + # search_url: https://libgen.is/search.php?req={query} + search_url: https://libgen.rs/search.php?req={query} + url_xpath: //a[contains(@href,"book/index.php?md5")]/@href + title_xpath: //a[contains(@href,"book/")]/text()[1] + content_xpath: //td/a[1][contains(@href,"=author")]/text() + categories: files + timeout: 7.0 + disabled: true + shortcut: lg + about: + website: https://libgen.fun/ + wikidata_id: Q22017206 + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + - name: z-library + engine: zlibrary + shortcut: zlib + timeout: 7.0 + disabled: true + # https://github.com/searxng/searxng/issues/3610 + inactive: true + + - name: library of congress + engine: loc + shortcut: loc + categories: images + disabled: true + + - name: libretranslate + engine: libretranslate + # https://github.com/LibreTranslate/LibreTranslate?tab=readme-ov-file#mirrors + base_url: + - https://libretranslate.com/translate + # api_key: abc123 + shortcut: lt + disabled: true + + - name: lingva + engine: lingva + shortcut: lv + # set lingva instance in url, by default it will use the official instance + # url: https://lingva.thedaviddelta.com + disabled: true + + - name: lobste.rs + engine: xpath + search_url: https://lobste.rs/search?q={query}&what=stories&order=relevance + results_xpath: //li[contains(@class, "story")] + url_xpath: .//a[@class="u-url"]/@href + title_xpath: .//a[@class="u-url"] + content_xpath: .//a[@class="domain"] + categories: it + shortcut: lo + timeout: 5.0 + disabled: true + about: + website: https://lobste.rs/ + wikidata_id: Q60762874 + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + - name: lucide + engine: lucide + shortcut: luc + timeout: 3.0 + disabled: true + + - name: marginalia + engine: marginalia + shortcut: mar + # To get an API key, please follow the instructions at + # - https://about.marginalia-search.com/article/api/ + # api_key: ... + disabled: true + inactive: true + + - name: mastodon users + engine: mastodon + mastodon_type: accounts + base_url: https://mastodon.social + shortcut: mau + disabled: true + + - name: mastodon hashtags + engine: mastodon + mastodon_type: hashtags + base_url: https://mastodon.social + shortcut: mah + disabled: true + + # - name: matrixrooms + # engine: mrs + # # https://docs.searxng.org/dev/engines/online/mrs.html + # # base_url: https://mrs-api-host + # shortcut: mtrx + # disabled: true + + - name: mdn + shortcut: mdn + engine: json_engine + categories: [it] + paging: true + search_url: https://developer.mozilla.org/api/v1/search?q={query}&page={pageno} + results_query: documents + url_query: mdn_url + url_prefix: https://developer.mozilla.org + title_query: title + content_query: summary + about: + website: https://developer.mozilla.org + wikidata_id: Q3273508 + official_api_documentation: null + use_official_api: false + require_api_key: false + results: JSON + + - name: metacpan + engine: metacpan + shortcut: cpan + disabled: true + number_of_results: 20 + disabled: true + + # https://docs.searxng.org/dev/engines/offline/search-indexer-engines.html#module-searx.engines.meilisearch + # - name: meilisearch + # engine: meilisearch + # shortcut: mes + # enable_http: true + # base_url: http://localhost:7700 + # index: my-index + # auth_key: Bearer XXXX + + - name: microsoft learn + engine: microsoft_learn + shortcut: msl + disabled: true + + - name: mixcloud + engine: mixcloud + shortcut: mc + disabled: true + + # MongoDB engine + # Required dependency: pymongo + # - name: mymongo + # engine: mongodb + # shortcut: md + # exact_match_only: false + # host: '127.0.0.1' + # port: 27017 + # enable_http: true + # results_per_page: 20 + # database: 'business' + # collection: 'reviews' # name of the db collection + # key: 'name' # key in the collection to search for + + - name: mozhi + engine: mozhi + base_url: + - https://mozhi.aryak.me + - https://translate.bus-hit.me + - https://nyc1.mz.ggtyler.dev + # mozhi_engine: google - see https://mozhi.aryak.me for supported engines + timeout: 4.0 + shortcut: mz + disabled: true + + - name: mwmbl + engine: mwmbl + # api_url: https://api.mwmbl.org + shortcut: mwm + disabled: true + + - name: niconico + engine: niconico + shortcut: nico + disabled: true + + - name: npm + engine: npm + shortcut: npm + timeout: 5.0 + disabled: true + + - name: nyaa + engine: nyaa + shortcut: nt + disabled: true + + - name: mankier + engine: json_engine + search_url: https://www.mankier.com/api/v2/mans/?q={query} + results_query: results + url_query: url + title_query: name + content_query: description + categories: it + shortcut: man + about: + website: https://www.mankier.com/ + official_api_documentation: https://www.mankier.com/api + use_official_api: true + require_api_key: false + results: JSON + disabled: true + + - name: odysee + engine: odysee + shortcut: od + disabled: true + + - name: ollama + engine: ollama + shortcut: ollama + disabled: true + + - name: openairedatasets + engine: json_engine + paging: true + search_url: https://api.openaire.eu/search/datasets?format=json&page={pageno}&size=10&title={query} + results_query: response/results/result + url_query: metadata/oaf:entity/oaf:result/children/instance/webresource/url/$ + title_query: metadata/oaf:entity/oaf:result/title/$ + content_query: metadata/oaf:entity/oaf:result/description/$ + content_html_to_text: true + categories: "science" + shortcut: oad + timeout: 5.0 + about: + website: https://www.openaire.eu/ + wikidata_id: Q25106053 + official_api_documentation: https://api.openaire.eu/ + use_official_api: false + require_api_key: false + results: JSON + + - name: openairepublications + engine: json_engine + paging: true + search_url: https://api.openaire.eu/search/publications?format=json&page={pageno}&size=10&title={query} + results_query: response/results/result + url_query: metadata/oaf:entity/oaf:result/children/instance/webresource/url/$ + title_query: metadata/oaf:entity/oaf:result/title/$ + content_query: metadata/oaf:entity/oaf:result/description/$ + content_html_to_text: true + categories: science + shortcut: oap + timeout: 5.0 + about: + website: https://www.openaire.eu/ + wikidata_id: Q25106053 + official_api_documentation: https://api.openaire.eu/ + use_official_api: false + require_api_key: false + results: JSON + disabled: true + + - name: openalex + engine: openalex + shortcut: oa + # https://docs.searxng.org/dev/engines/online/openalex.html + # Recommended by OpenAlex: join the polite pool with an email address + # mailto: "[email protected]" + timeout: 5.0 + disabled: true + + - name: openclipart + engine: openclipart + shortcut: ocl + inactive: true + disabled: true + timeout: 30 + + - name: openlibrary + engine: openlibrary + shortcut: ol + timeout: 10 + disabled: true + + - name: openmeteo + engine: open_meteo + shortcut: om + disabled: true + + # - name: opensemanticsearch + # engine: opensemantic + # shortcut: oss + # base_url: 'http://localhost:8983/solr/opensemanticsearch/' + + - name: openstreetmap + engine: openstreetmap + shortcut: osm + + - name: openrepos + engine: xpath + paging: true + search_url: https://openrepos.net/search/node/{query}?page={pageno} + url_xpath: //li[@class="search-result"]//h3[@class="title"]/a/@href + title_xpath: //li[@class="search-result"]//h3[@class="title"]/a + content_xpath: //li[@class="search-result"]//div[@class="search-snippet-info"]//p[@class="search-snippet"] + categories: files + timeout: 4.0 + disabled: true + shortcut: or + about: + website: https://openrepos.net/ + wikidata_id: + official_api_documentation: + use_official_api: false + require_api_key: false + results: HTML + + - name: packagist + engine: json_engine + paging: true + search_url: https://packagist.org/search.json?q={query}&page={pageno} + results_query: results + url_query: url + title_query: name + content_query: description + categories: [it, packages] + disabled: true + timeout: 5.0 + shortcut: pack + about: + website: https://packagist.org + wikidata_id: Q108311377 + official_api_documentation: https://packagist.org/apidoc + use_official_api: true + require_api_key: false + results: JSON + + - name: pdbe + engine: pdbe + categories: "science" + shortcut: pdb + # Hide obsolete PDB entries. Default is not to hide obsolete structures + # hide_obsolete: false + + - name: photon + engine: photon + shortcut: ph + disabled: true + + - name: pinterest + engine: pinterest + shortcut: pin + + - name: piped + engine: piped + shortcut: ppd + categories: videos + piped_filter: videos + timeout: 3.0 + inactive: true + disabled: true + # URL to use as link and for embeds + frontend_url: https://srv.piped.video + # Instance will be selected randomly, for more see https://piped-instances.kavin.rocks/ + backend_url: + - https://pipedapi.ducks.party + - https://api.piped.private.coffee + + - name: piped.music + engine: piped + network: piped + shortcut: ppdm + categories: music + piped_filter: music_songs + timeout: 3.0 + inactive: true + disabled: true + + - name: piratebay + engine: piratebay + shortcut: tpb + # You may need to change this URL to a proxy if piratebay is blocked in your + # country + url: https://thepiratebay.org/ + timeout: 3.0 + + - name: pixabay images + engine: pixabay + pixabay_type: images + categories: images + shortcut: pixi + disabled: true + + - name: pixabay videos + engine: pixabay + pixabay_type: videos + categories: videos + shortcut: pixv + disabled: true + + - name: pixiv + shortcut: pv + engine: pixiv + disabled: true + inactive: true + remove_ai_images: false + pixiv_image_proxies: + - https://pximg.example.org + # A proxy is required to load the images. Hosting an image proxy server + # for Pixiv: + # --> https://pixivfe.pages.dev/hosting-image-proxy-server/ + # Proxies from public instances. Ask the public instances owners if they + # agree to receive traffic from SearXNG! + # --> https://codeberg.org/VnPower/PixivFE#instances + # --> https://github.com/searxng/searxng/pull/3192#issuecomment-1941095047 + # image proxy of https://pixiv.cat + # - https://i.pixiv.cat + # image proxy of https://www.pixiv.pics + # - https://pximg.cocomi.eu.org + # image proxy of https://pixivfe.exozy.me + # - https://pximg.exozy.me + # image proxy of https://pixivfe.ducks.party + # - https://pixiv.ducks.party + # image proxy of https://pixiv.perennialte.ch + # - https://pximg.perennialte.ch + + - name: podcastindex + engine: podcastindex + shortcut: podcast + disabled: true + + # Required dependency: psychopg2 + # - name: postgresql + # engine: postgresql + # database: postgres + # username: postgres + # password: postgres + # limit: 10 + # query_str: 'SELECT * from my_table WHERE my_column = %(query)s' + # shortcut : psql + + - name: presearch + engine: presearch + search_type: search + categories: [general, web] + shortcut: ps + timeout: 4.0 + disabled: true + + - name: presearch images + engine: presearch + network: presearch + search_type: images + categories: [images, web] + timeout: 4.0 + shortcut: psimg + disabled: true + + - name: presearch videos + engine: presearch + network: presearch + search_type: videos + categories: [general, web] + timeout: 4.0 + shortcut: psvid + disabled: true + + - name: presearch news + engine: presearch + network: presearch + search_type: news + categories: [news, web] + timeout: 4.0 + shortcut: psnews + disabled: true + + - name: pub.dev + engine: xpath + shortcut: pd + search_url: https://pub.dev/packages?q={query}&page={pageno} + paging: true + results_xpath: //div[contains(@class,"packages-item")] + url_xpath: ./div/h3/a/@href + title_xpath: ./div/h3/a + content_xpath: ./div/div/div[contains(@class,"packages-description")]/span + categories: [packages, it] + timeout: 3.0 + disabled: true + first_page_num: 1 + about: + website: https://pub.dev/ + official_api_documentation: https://pub.dev/help/api + use_official_api: false + require_api_key: false + results: HTML + + - name: public domain image archive + engine: public_domain_image_archive + shortcut: pdia + disabled: true + + - name: pubmed + engine: pubmed + categories: "science" + shortcut: pub + disabled: true + + - name: pypi + shortcut: pypi + engine: pypi + + - name: quark + quark_category: general + categories: [general] + engine: quark + shortcut: qk + disabled: true + + - name: quark images + quark_category: images + categories: [images] + engine: quark + shortcut: qki + disabled: true + + - name: qwant + qwant_categ: web + engine: qwant + shortcut: qw + categories: [general, web] + additional_tests: + rosebud: *test_rosebud + disabled: true + + - name: qwant news + qwant_categ: news + engine: qwant + shortcut: qwn + categories: news + network: qwant + + - name: qwant images + qwant_categ: images + engine: qwant + shortcut: qwi + categories: [images, web] + network: qwant + disabled: true + + - name: qwant videos + qwant_categ: videos + engine: qwant + shortcut: qwv + categories: [videos, web] + network: qwant + disabled: true + + # - name: library + # engine: recoll + # shortcut: lib + # base_url: 'https://recoll.example.org/' + # search_dir: '' + # mount_prefix: /export + # dl_prefix: 'https://download.example.org' + # timeout: 30.0 + # categories: files + # disabled: true + + # - name: recoll library reference + # engine: recoll + # base_url: 'https://recoll.example.org/' + # search_dir: reference + # mount_prefix: /export + # dl_prefix: 'https://download.example.org' + # shortcut: libr + # timeout: 30.0 + # categories: files + # disabled: true + + - name: radio browser + engine: radio_browser + shortcut: rb + disabled: true + + - name: reddit + engine: reddit + shortcut: re + page_size: 25 + + - name: reuters + engine: reuters + shortcut: reu + # https://docs.searxng.org/dev/engines/online/reuters.html + # sort_order = "relevance" + disabled: true + + - name: right dao + engine: xpath + paging: true + page_size: 12 + search_url: https://rightdao.com/search?q={query}&start={pageno} + results_xpath: //div[contains(@class, "description")] + url_xpath: ../div[contains(@class, "title")]/a/@href + title_xpath: ../div[contains(@class, "title")] + content_xpath: . + categories: general + shortcut: rd + disabled: true + about: + website: https://rightdao.com/ + use_official_api: false + require_api_key: false + results: HTML + + - name: rottentomatoes + engine: rottentomatoes + shortcut: rt + disabled: true + + # Required dependency: valkey + # - name: myvalkey + # shortcut : rds + # engine: valkey_server + # exact_match_only: false + # host: '127.0.0.1' + # port: 6379 + # enable_http: true + # password: '' + # db: 0 + + # tmp suspended: bad certificate + # - name: scanr structures + # shortcut: scs + # engine: scanr_structures + # disabled: true + + - name: searchmysite + engine: xpath + shortcut: sms + categories: general + paging: true + search_url: https://searchmysite.net/search/?q={query}&page={pageno} + results_xpath: //div[contains(@class,'search-result')] + url_xpath: .//a[contains(@class,'result-link')]/@href + title_xpath: .//span[contains(@class,'result-title-txt')]/text() + content_xpath: ./p[@id='result-hightlight'] + disabled: true + about: + website: https://searchmysite.net + + - name: selfhst icons + engine: selfhst + shortcut: si + disabled: true + + - name: sepiasearch + engine: sepiasearch + shortcut: sep + + - name: sogou + engine: sogou + shortcut: sogou + disabled: true + + - name: sogou images + engine: sogou_images + shortcut: sogoui + disabled: true + + - name: sogou videos + engine: sogou_videos + shortcut: sogouv + disabled: true + + - name: sogou wechat + engine: sogou_wechat + shortcut: sogouw + disabled: true + + - name: soundcloud + engine: soundcloud + shortcut: sc + disabled: true + + - name: stackoverflow + engine: stackexchange + shortcut: st + api_site: 'stackoverflow' + categories: [it, q&a] + + - name: askubuntu + engine: stackexchange + shortcut: ubuntu + api_site: 'askubuntu' + categories: [it, q&a] + + - name: superuser + engine: stackexchange + shortcut: su + api_site: 'superuser' + categories: [it, q&a] + + - name: discuss.python + engine: discourse + shortcut: dpy + base_url: 'https://discuss.python.org' + categories: [it, q&a] + disabled: true + + - name: caddy.community + engine: discourse + shortcut: caddy + base_url: 'https://caddy.community' + categories: [it, q&a] + disabled: true + + - name: pi-hole.community + engine: discourse + shortcut: pi + categories: [it, q&a] + base_url: 'https://discourse.pi-hole.net' + disabled: true + + - name: searchcode code + engine: searchcode_code + shortcut: scc + disabled: true + inactive: true + + # - name: searx + # engine: searx_engine + # shortcut: se + # instance_urls : + # - http://127.0.0.1:8888/ + # - ... + # disabled: true + + - name: semantic scholar + engine: semantic_scholar + categories: "science" + shortcut: se + disabled: true + + # Spotify needs API credentials + # - name: spotify + # engine: spotify + # shortcut: stf + # api_client_id: ******* + # api_client_secret: ******* + + # - name: solr + # engine: solr + # shortcut: slr + # base_url: http://localhost:8983 + # collection: collection_name + # sort: '' # sorting: asc or desc + # field_list: '' # comma separated list of field names to display on the UI + # default_fields: '' # default field to query + # query_fields: '' # query fields + # enable_http: true + + - name: springer nature + engine: springer + shortcut: springer + timeout: 5 + # read https://docs.searxng.org/dev/engines/online/springer.html + api_key: "" + inactive: true + disabled: true + + - name: startpage + engine: startpage + shortcut: sp + startpage_categ: web + categories: [general, web] + additional_tests: + rosebud: *test_rosebud + + - name: startpage news + engine: startpage + startpage_categ: news + categories: [news, web] + shortcut: spn + disabled: true + + - name: startpage images + engine: startpage + startpage_categ: images + categories: [images, web] + shortcut: spi + disabled: true + + - name: steam + engine: steam + shortcut: stm + disabled: true + + - name: tokyotoshokan + engine: tokyotoshokan + shortcut: tt + timeout: 6.0 + disabled: true + + - name: solidtorrents + engine: solidtorrents + shortcut: solid + timeout: 4.0 + base_url: + - https://solidtorrents.to + - https://bitsearch.to + disabled: true + + # For this demo of the sqlite engine download: + # https://liste.mediathekview.de/filmliste-v2.db.bz2 + # and unpack into searx/data/filmliste-v2.db + # Query to test: "!mediathekview concert" + # + # - name: mediathekview + # engine: sqlite + # shortcut: mediathekview + # categories: [general, videos] + # result_type: MainResult + # database: searx/data/filmliste-v2.db + # query_str: >- + # SELECT title || ' (' || time(duration, 'unixepoch') || ')' AS title, + # COALESCE( NULLIF(url_video_hd,''), NULLIF(url_video_sd,''), url_video) AS url, + # description AS content + # FROM film + # WHERE title LIKE :wildcard OR description LIKE :wildcard + # ORDER BY duration DESC + + - name: tagesschau + engine: tagesschau + # when set to false, display URLs from Tagesschau, and not the actual source + # (e.g. NDR, WDR, SWR, HR, ...) + use_source_url: true + shortcut: ts + disabled: true + + - name: tmdb + engine: xpath + paging: true + categories: movies + search_url: https://www.themoviedb.org/search?page={pageno}&query={query} + results_xpath: //div[contains(@class,"movie") or contains(@class,"tv")]//div[contains(@class,"card")] + url_xpath: .//div[contains(@class,"poster")]/a/@href + thumbnail_xpath: .//img/@src + title_xpath: .//div[contains(@class,"title")]//h2 + content_xpath: .//div[contains(@class,"overview")] + shortcut: tm + disabled: true + + # Requires Tor + - name: torch + engine: xpath + paging: true + search_url: + http://xmh57jrknzkhv6y3ls3ubitzfqnkrwxhopf5aygthi7d6rplyvk3noyd.onion/cgi-bin/omega/omega?P={query}&DEFAULTOP=and + results_xpath: //table//tr + url_xpath: ./td[2]/a + title_xpath: ./td[2]/b + content_xpath: ./td[2]/small + categories: onions + enable_http: true + shortcut: tch + + # TubeArchivist is a self-hosted Youtube archivist software. + # https://docs.searxng.org/dev/engines/online/tubearchivist.html + # + # - name: tubearchivist + # engine: tubearchivist + # shortcut: tuba + # base_url: + # ta_token: + # ta_link_to_mp4: false + + # torznab engine lets you query any torznab compatible indexer. Using this + # engine in combination with Jackett opens the possibility to query a lot of + # public and private indexers directly from SearXNG. More details at: + # https://docs.searxng.org/dev/engines/online/torznab.html + # + # - name: Torznab EZTV + # engine: torznab + # shortcut: eztv + # base_url: http://localhost:9117/api/v2.0/indexers/eztv/results/torznab + # enable_http: true # if using localhost + # api_key: xxxxxxxxxxxxxxx + # show_magnet_links: true + # show_torrent_files: false + # # https://github.com/Jackett/Jackett/wiki/Jackett-Categories + # torznab_categories: # optional + # - 2000 + # - 5000 + + # tmp suspended - too slow, too many errors + # - name: urbandictionary + # engine : xpath + # search_url : https://www.urbandictionary.com/define.php?term={query} + # url_xpath : //*[@class="word"]/@href + # title_xpath : //*[@class="def-header"] + # content_xpath: //*[@class="meaning"] + # shortcut: ud + + - name: unsplash + engine: unsplash + shortcut: us + disabled: true + + - name: yandex + engine: yandex + categories: general + search_type: web + shortcut: yd + + - name: yandex images + engine: yandex + network: yandex + categories: images + search_type: images + shortcut: ydi + disabled: true + + - name: yandex music + engine: yandex_music + network: yandex + shortcut: ydm + disabled: true + # https://yandex.com/support/music/access.html + + - name: yahoo + engine: yahoo + shortcut: yh + + - name: yahoo news + engine: yahoo_news + shortcut: yhn + disabled: true + + - name: youtube + shortcut: yt + # You can use the engine using the official stable API, but you need an API + # key See: https://console.developers.google.com/project + # + # engine: youtube_api + # api_key: 'apikey' # required! + # + # Or you can use the html non-stable engine, activated by default + engine: youtube_noapi + + - name: dailymotion + engine: dailymotion + shortcut: dm + + - name: vimeo + engine: vimeo + shortcut: vm + disabled: true + + - name: wiby + engine: json_engine + paging: true + search_url: https://wiby.me/json/?q={query}&p={pageno} + url_query: URL + title_query: Title + content_query: Snippet + categories: [general, web] + shortcut: wib + disabled: true + about: + website: https://wiby.me/ + + - name: wikibooks + engine: mediawiki + weight: 0.5 + shortcut: wb + categories: [general, wikimedia] + base_url: "https://{language}.wikibooks.org/" + search_type: text + disabled: true + about: + website: https://www.wikibooks.org/ + wikidata_id: Q367 + + - name: wikinews + engine: mediawiki + shortcut: wn + categories: [news, wikimedia] + base_url: "https://{language}.wikinews.org/" + search_type: text + srsort: create_timestamp_desc + about: + website: https://www.wikinews.org/ + wikidata_id: Q964 + + - name: wikiquote + engine: mediawiki + weight: 0.5 + shortcut: wq + categories: [general, wikimedia] + base_url: "https://{language}.wikiquote.org/" + search_type: text + disabled: true + additional_tests: + rosebud: *test_rosebud + about: + website: https://www.wikiquote.org/ + wikidata_id: Q369 + + - name: wikisource + engine: mediawiki + weight: 0.5 + shortcut: ws + categories: [general, wikimedia] + base_url: "https://{language}.wikisource.org/" + search_type: text + disabled: true + about: + website: https://www.wikisource.org/ + wikidata_id: Q263 + + - name: wikispecies + engine: mediawiki + shortcut: wsp + categories: [general, science, wikimedia] + base_url: "https://species.wikimedia.org/" + search_type: text + disabled: true + about: + website: https://species.wikimedia.org/ + wikidata_id: Q13679 + tests: + wikispecies: + matrix: + query: "Campbell, L.I. et al. 2011: MicroRNAs" + lang: en + result_container: + - not_empty + - ['one_title_contains', 'Tardigrada'] + test: + - unique_results + + - name: wiktionary + engine: mediawiki + shortcut: wt + categories: [dictionaries, wikimedia] + base_url: "https://{language}.wiktionary.org/" + search_type: text + about: + website: https://www.wiktionary.org/ + wikidata_id: Q151 + + - name: wikiversity + engine: mediawiki + weight: 0.5 + shortcut: wv + categories: [general, wikimedia] + base_url: "https://{language}.wikiversity.org/" + search_type: text + disabled: true + about: + website: https://www.wikiversity.org/ + wikidata_id: Q370 + + - name: wikivoyage + engine: mediawiki + weight: 0.5 + shortcut: wy + categories: [general, wikimedia] + base_url: "https://{language}.wikivoyage.org/" + search_type: text + disabled: true + about: + website: https://www.wikivoyage.org/ + wikidata_id: Q373 + + - name: wikicommons.images + engine: wikicommons + shortcut: wci + categories: images + wc_search_type: image + + - name: wikicommons.videos + engine: wikicommons + shortcut: wcv + categories: videos + wc_search_type: video + + - name: wikicommons.audio + engine: wikicommons + shortcut: wca + categories: music + wc_search_type: audio + + - name: wikicommons.files + engine: wikicommons + shortcut: wcf + categories: files + wc_search_type: file + + - name: wolframalpha + shortcut: wa + # You can use the engine using the official stable API, but you need an API + # key. See: https://products.wolframalpha.com/api/ + # + # engine: wolframalpha_api + # api_key: '' + # + # Or you can use the html non-stable engine, activated by default + engine: wolframalpha_noapi + timeout: 6.0 + categories: general + disabled: true + + - name: dictzone + engine: dictzone + shortcut: dc + + - name: mymemory translated + engine: translated + shortcut: tl + timeout: 5.0 + disabled: true + # You can use without an API key, but you are limited to 1000 words/day + # See: https://mymemory.translated.net/doc/usagelimits.php + # api_key: '' + + # Required dependency: mysql-connector-python + # - name: mysql + # engine: mysql_server + # database: mydatabase + # username: user + # password: pass + # limit: 10 + # query_str: 'SELECT * from mytable WHERE fieldname=%(query)s' + # shortcut: mysql + + # Required dependency: mariadb + # - name: mariadb + # engine: mariadb_server + # database: mydatabase + # username: user + # password: pass + # limit: 10 + # query_str: 'SELECT * from mytable WHERE fieldname=%(query)s' + # shortcut: mdb + + - name: 1337x + engine: 1337x + shortcut: 1337x + disabled: true + + - name: duden + engine: duden + shortcut: du + + - name: seznam + shortcut: szn + engine: seznam + disabled: true + + # - name: deepl + # engine: deepl + # shortcut: dpl + # # You can use the engine using the official stable API, but you need an API key + # # See: https://www.deepl.com/pro-api?cta=header-pro-api + # api_key: '' # required! + # timeout: 5.0 + # disabled: true + + - name: mojeek + shortcut: mjk + engine: mojeek + categories: [general, web] + disabled: true + + - name: mojeek images + shortcut: mjkimg + engine: mojeek + categories: [images, web] + search_type: images + paging: false + disabled: true + + - name: mojeek news + shortcut: mjknews + engine: mojeek + categories: [news, web] + search_type: news + paging: false + disabled: true + + - name: moviepilot + engine: moviepilot + shortcut: mp + disabled: true + + - name: naver + categories: [general, web] + engine: naver + shortcut: nvr + disabled: true + + - name: naver images + naver_category: images + categories: [images] + engine: naver + shortcut: nvri + disabled: true + + - name: naver news + naver_category: news + categories: [news] + engine: naver + shortcut: nvrn + disabled: true + + - name: naver videos + naver_category: videos + categories: [videos] + engine: naver + shortcut: nvrv + disabled: true + + - name: rubygems + shortcut: rbg + engine: xpath + paging: true + search_url: https://rubygems.org/search?page={pageno}&query={query} + results_xpath: /html/body/main/div/a[@class="gems__gem"] + url_xpath: ./@href + title_xpath: ./span/h2 + content_xpath: ./span/p + suggestion_xpath: /html/body/main/div/div[@class="search__suggestions"]/p/a + first_page_num: 1 + categories: [it, packages] + disabled: true + about: + website: https://rubygems.org/ + wikidata_id: Q1853420 + official_api_documentation: https://guides.rubygems.org/rubygems-org-api/ + use_official_api: false + require_api_key: false + results: HTML + + - name: peertube + engine: peertube + shortcut: ptb + paging: true + # alternatives see: https://instances.joinpeertube.org/instances + # base_url: https://tube.4aem.com + categories: videos + disabled: true + timeout: 6.0 + + - name: mediathekviewweb + engine: mediathekviewweb + shortcut: mvw + disabled: true + + - name: yacy + # https://docs.searxng.org/dev/engines/online/yacy.html + engine: yacy + categories: general + search_type: text + # see https://github.com/searxng/searxng/pull/3631#issuecomment-2240903027 + base_url: + - https://yacy.searchlab.eu + shortcut: ya + disabled: true + # if you aren't using HTTPS for your local yacy instance disable https + # enable_http: false + search_mode: 'global' + # timeout can be reduced in 'local' search mode + timeout: 5.0 + + - name: yacy images + engine: yacy + network: yacy + categories: images + search_type: image + shortcut: yai + disabled: true + # timeout can be reduced in 'local' search mode + timeout: 5.0 + + - name: rumble + engine: rumble + shortcut: ru + base_url: https://rumble.com/ + paging: true + categories: videos + disabled: true + + - name: repology + engine: repology + shortcut: rep + disabled: true + inactive: true + + - name: livespace + engine: livespace + shortcut: ls + categories: videos + disabled: true + timeout: 5.0 + + - name: wordnik + engine: wordnik + shortcut: wnik + timeout: 5.0 + disabled: true + + - name: woxikon.de synonyme + engine: xpath + shortcut: woxi + categories: [dictionaries] + timeout: 5.0 + disabled: true + search_url: https://synonyme.woxikon.de/synonyme/{query}.php + url_xpath: //div[@class="upper-synonyms"]/a/@href + content_xpath: //div[@class="synonyms-list-group"] + title_xpath: //div[@class="upper-synonyms"]/a + no_result_for_http_status: [404] + about: + website: https://www.woxikon.de/ + wikidata_id: # No Wikidata ID + use_official_api: false + require_api_key: false + results: HTML + language: de + + - name: seekr news + engine: seekr + shortcut: senews + categories: news + seekr_category: news + disabled: true + + - name: seekr images + engine: seekr + network: seekr news + shortcut: seimg + categories: images + seekr_category: images + disabled: true + + - name: seekr videos + engine: seekr + network: seekr news + shortcut: sevid + categories: videos + seekr_category: videos + disabled: true + + - name: stract + engine: stract + shortcut: str + disabled: true + + - name: svgrepo + engine: svgrepo + shortcut: svg + timeout: 10.0 + disabled: true + + - name: tootfinder + engine: tootfinder + shortcut: toot + disabled: true + + - name: uxwing + engine: uxwing + shortcut: ux + disabled: true + + - name: voidlinux + engine: voidlinux + shortcut: void + disabled: true + + - name: wallhaven + engine: wallhaven + # api_key: abcdefghijklmnopqrstuvwxyz + shortcut: wh + disabled: true + + # wikimini: online encyclopedia for children + # The fulltext and title parameter is necessary for Wikimini because + # sometimes it will not show the results and redirect instead + - name: wikimini + engine: xpath + shortcut: wkmn + search_url: https://fr.wikimini.org/w/index.php?search={query}&title=Sp%C3%A9cial%3ASearch&fulltext=Search + url_xpath: //li/div[@class="mw-search-result-heading"]/a/@href + title_xpath: //li//div[@class="mw-search-result-heading"]/a + content_xpath: //li/div[@class="searchresult"] + categories: general + disabled: true + about: + website: https://wikimini.org/ + wikidata_id: Q3568032 + use_official_api: false + require_api_key: false + results: HTML + language: fr + + - name: wttr.in + engine: wttr + shortcut: wttr + timeout: 9.0 + disabled: true + + - name: brave + engine: brave + shortcut: br + time_range_support: true + paging: true + categories: [general, web] + brave_category: search + disabled: true + # brave_spellcheck: true + + - name: brave.images + engine: brave + network: brave + shortcut: brimg + categories: [images, web] + brave_category: images + disabled: true + + - name: brave.videos + engine: brave + network: brave + shortcut: brvid + categories: [videos, web] + brave_category: videos + + - name: brave.news + engine: brave + network: brave + shortcut: brnews + categories: news + brave_category: news + + # - name: brave.goggles + # engine: brave + # network: brave + # shortcut: brgog + # time_range_support: true + # paging: true + # categories: [general, web] + # brave_category: goggles + # Goggles: # required! This should be a URL ending in .goggle + + - name: lib.rs + shortcut: lrs + engine: lib_rs + disabled: true + + - name: sourcehut + shortcut: srht + engine: sourcehut + # https://docs.searxng.org/dev/engines/online/sourcehut.html + # sourcehut_sort_order: longest-active + disabled: true + + - name: bt4g + engine: bt4g + shortcut: bt4g + + - name: pkg.go.dev + engine: pkg_go_dev + shortcut: pgo + disabled: true + + - name: senscritique + engine: senscritique + shortcut: scr + timeout: 4.0 + disabled: true + + - name: minecraft wiki + engine: mediawiki + shortcut: mcw + categories: ["software wikis"] + base_url: https://minecraft.wiki/ + api_path: "api.php" + search_type: text + disabled: true + about: + website: https://minecraft.wiki/ + wikidata_id: Q105533483 + +# Doku engine lets you access to any Doku wiki instance: +# A public one or a privete/corporate one. +# - name: ubuntuwiki +# engine: doku +# shortcut: uw +# base_url: 'https://doc.ubuntu-fr.org' + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: git grep +# engine: command +# command: ['git', 'grep', '{{QUERY}}'] +# shortcut: gg +# tokens: [] +# disabled: true +# delimiter: +# chars: ':' +# keys: ['filepath', 'code'] + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: locate +# engine: command +# command: ['locate', '{{QUERY}}'] +# shortcut: loc +# tokens: [] +# disabled: true +# delimiter: +# chars: ' ' +# keys: ['line'] + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: find +# engine: command +# command: ['find', '.', '-name', '{{QUERY}}'] +# query_type: path +# shortcut: fnd +# tokens: [] +# disabled: true +# delimiter: +# chars: ' ' +# keys: ['line'] + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: pattern search in files +# engine: command +# command: ['fgrep', '{{QUERY}}'] +# shortcut: fgr +# tokens: [] +# disabled: true +# delimiter: +# chars: ' ' +# keys: ['line'] + +# Be careful when enabling this engine if you are +# running a public instance. Do not expose any sensitive +# information. You can restrict access by configuring a list +# of access tokens under tokens. +# - name: regex search in files +# engine: command +# command: ['grep', '{{QUERY}}'] +# shortcut: gr +# tokens: [] +# disabled: true +# delimiter: +# chars: ' ' +# keys: ['line'] + +doi_resolvers: + oadoi.org: 'https://oadoi.org/' + doi.org: 'https://doi.org/' + sci-hub.se: 'https://sci-hub.se/' + sci-hub.st: 'https://sci-hub.st/' + sci-hub.ru: 'https://sci-hub.ru/' + +default_doi_resolver: 'oadoi.org' \ No newline at end of file diff --git a/nix/modules/security.nix b/nix/modules/security.nix new file mode 100644 index 0000000..cb53492 --- /dev/null +++ b/nix/modules/security.nix @@ -0,0 +1,12 @@ +{ config, pkgs, device, ... }: + +{ + security = { + polkit.enable = true; + + sudo = { + enable = true; + wheelNeedsPassword = false; + }; + }; +} \ No newline at end of file diff --git a/nix/modules/sish.nix b/nix/modules/sish.nix new file mode 100644 index 0000000..e69de29 diff --git a/nix/modules/sshfs.nix b/nix/modules/sshfs.nix new file mode 100644 index 0000000..c4078cb --- /dev/null +++ b/nix/modules/sshfs.nix @@ -0,0 +1,18 @@ +{ config, pkgs, device, ... }: + +{ + fileSystems."/mnt/box" = { + device = "bug@box.bug.tools:/"; + fsType = "fuse.sshfs"; + options = [ + "identityfile=/home/bug/.ssh/id_ed25519" + "idmap=user" + "x-systemd.automount" + "allow_other" + "user" + "_netdev" + ]; + }; + + boot.supportedFilesystems."fuse.sshfs" = true; +} \ No newline at end of file diff --git a/nix/modules/stylix.nix b/nix/modules/stylix.nix new file mode 100644 index 0000000..d7980f2 --- /dev/null +++ b/nix/modules/stylix.nix @@ -0,0 +1,41 @@ +{ config, pkgs, device, ... }: + +{ + stylix = { + enable = true; + autoEnable = true; + polarity = "dark"; + + # catppuccin mocha + base16Scheme = { + base00 = "1E1E2E"; + base01 = "181825"; + base02 = "313244"; + base03 = "45475A"; + base04 = "585B70"; + base05 = "CDD6F4"; + base06 = "F5E0DC"; + base07 = "B4BEFE"; + base08 = "F38BA8"; + base09 = "FAB387"; + base0A = "F9E2AF"; + base0B = "A6E3A1"; + base0C = "94E2D5"; + base0D = "89B4FA"; + base0E = "CBA6F7"; + base0F = "F2CDCD"; + }; + + fonts.emoji = { + name = "Twitter Color Emoji"; + package = pkgs.twitter-color-emoji; + }; + + targets = { + vesktop.enable = true; + gnome.enable = true; + gtk.enable = true; + firefox.enable = true; + }; + }; +} \ No newline at end of file diff --git a/nix/modules/swap.nix b/nix/modules/swap.nix new file mode 100644 index 0000000..c7c0f3f --- /dev/null +++ b/nix/modules/swap.nix @@ -0,0 +1,17 @@ +{ config, pkgs, device, ... }: + +{ + boot.kernel.sysctl = { + "fs.file-max" = 524288; + }; + + swapDevices = [{ + device = "/var/lib/swapfile"; + size = 8 * 1024; + }]; + + zramSwap = { + enable = true; + memoryMax = 64 * 1024 * 1024 * 1024; + }; +} \ No newline at end of file diff --git a/nix/modules/syncthing.nix b/nix/modules/syncthing.nix new file mode 100644 index 0000000..28b955b --- /dev/null +++ b/nix/modules/syncthing.nix @@ -0,0 +1,73 @@ +{ config, pkgs, device, ... }: + +{ + services.syncthing = { + enable = true; + + overrideDevices = true; + overrideFolders = true; + + key = "/home/bug/.syncthing/key.pem"; + cert = "/home/bug/.syncthing/cert.pem"; + + settings = { + devices = { + desktop.id = "VEZXY3W-U6UXWTP-6BHANIG-O5EKNZY-XNV5YOX-4V4O3HB-ETECIUX-T2DK7AV"; + laptop.id = "I6NW53P-IJMMT73-7O53TXY-3GAHS2U-4EAADM7-ZNB5ZPB-62QHKVW-H7DYXQ2"; + server.id = "KJECAIP-Y2Y3FHV-NOJKIQV-LWIDMMZ-5ITEAZ4-LQCQL72-3BGW6T7-BFPFJQA"; + }; + + folders = { + "Documents" = { + path = "/home/bug/Documents"; + devices = ["desktop" "laptop" "server"]; + }; + + "Downloads" = { + path = "/home/bug/Downloads"; + devices = ["desktop" "laptop" "server"]; + }; + + "Pictures" = { + path = "/home/bug/Pictures"; + devices = ["desktop" "laptop" "server"]; + }; + + "Videos" = { + path = "/home/bug/Videos"; + devices = ["desktop" "laptop" "server"]; + }; + + "nix" = { + path = "/home/bug/nix"; + devices = ["desktop" "laptop" "server"]; + + ignorePatterns = [ + "device.nix" + "hardware-configuration.nix" + ]; + }; + + "hytale" = { + path = "/home/bug/.local/share/Hytale/UserData/Saves"; + devices = ["desktop" "laptop"]; + }; + + "ssh" = { + path = "/home/bug/.ssh"; + devices = ["desktop" "laptop" "server"]; + }; + + "cloudflared" = { + path = "/home/bug/.cloudflared"; + devices = ["desktop" "laptop" "server"]; + }; + + "Music" = { + path = (if (device == "desktop") then "/home/bug/Music" else "/run/media/bug/Music/"); + devices = ["desktop" "laptop"]; + }; + }; + }; + }; +} \ No newline at end of file diff --git a/nix/modules/users.nix b/nix/modules/users.nix new file mode 100644 index 0000000..c657fc7 --- /dev/null +++ b/nix/modules/users.nix @@ -0,0 +1,19 @@ +{ config, pkgs, device, ... }: + +{ + users.users = { + bug = { + isNormalUser = true; + description = "bug"; + extraGroups = [ "networkmanager" "wheel" "audio" "video" "libvirtd" "ydotool" "dialout" ]; + }; + } // (if (device == "server") then { + levi = { + isNormalUser = true; + description = "levi"; + extraGroups = []; + + hashedPasswordFile = "/home/bug/users/levi.passwd"; + }; + } else {}); +} \ No newline at end of file diff --git a/nix/modules/virtualisation.nix b/nix/modules/virtualisation.nix new file mode 100644 index 0000000..e64709e --- /dev/null +++ b/nix/modules/virtualisation.nix @@ -0,0 +1,9 @@ +{ config, pkgs, device, ... }: + +{ + virtualisation = { + libvirtd.enable = true; + + spiceUSBRedirection.enable = true; + }; +} \ No newline at end of file diff --git a/nix/modules/vscode-server.nix b/nix/modules/vscode-server.nix new file mode 100644 index 0000000..4af3615 --- /dev/null +++ b/nix/modules/vscode-server.nix @@ -0,0 +1,7 @@ +{ config, pkgs, device, ... }: + +{ + services = { + vscode-server.enable = true; + }; +} \ No newline at end of file diff --git a/nix/nix.ans b/nix/nix.ans new file mode 100755 index 0000000..64a7b5d --- /dev/null +++ b/nix/nix.ans @@ -0,0 +1,16 @@ + ◢██◣ ◥███◣ ◢██◣ + ◥███◣ ◥███◣◢███◤ + ◥███◣ ◥██████◤ + ◢████████████◣████◤ ◢◣ + ◢██████████████◣███◣ ◢██◣ + ◢███◤ ◥███◣◢███◤ + ◢███◤ ◥██◤███◤ +◢█████████◤ ◥◤████████◣ +◥████████◤◣ ◢█████████◤ + ◢███◤██◣ ◢███◤ + ◢███◤◥███◣ ◢███◤ + ◥██◤ ◥███◣██████████████◤ + ◥◤ ◢████◣████████████◤ + ◢██████◣ ◥███◣ + ◢███◤◥███◣ ◥███◣ + ◥██◤ ◥███◣ ◥██◤ diff --git a/nix/nix.png b/nix/nix.png new file mode 100644 index 0000000..fffa63c Binary files /dev/null and b/nix/nix.png differ diff --git a/resources/nix.ans b/resources/nix.ans new file mode 100755 index 0000000..64a7b5d --- /dev/null +++ b/resources/nix.ans @@ -0,0 +1,16 @@ + ◢██◣ ◥███◣ ◢██◣ + ◥███◣ ◥███◣◢███◤ + ◥███◣ ◥██████◤ + ◢████████████◣████◤ ◢◣ + ◢██████████████◣███◣ ◢██◣ + ◢███◤ ◥███◣◢███◤ + ◢███◤ ◥██◤███◤ +◢█████████◤ ◥◤████████◣ +◥████████◤◣ ◢█████████◤ + ◢███◤██◣ ◢███◤ + ◢███◤◥███◣ ◢███◤ + ◥██◤ ◥███◣██████████████◤ + ◥◤ ◢████◣████████████◤ + ◢██████◣ ◥███◣ + ◢███◤◥███◣ ◥███◣ + ◥██◤ ◥███◣ ◥██◤ diff --git a/resources/nix.png b/resources/nix.png new file mode 100644 index 0000000..fffa63c Binary files /dev/null and b/resources/nix.png differ