From bca6b60a3e5c389053c8463f231bc89140c41a93 Mon Sep 17 00:00:00 2001 From: 4DBug <4DBug@github.com> Date: Wed, 18 Feb 2026 22:44:11 -0600 Subject: [PATCH] push --- .stignore | 2 - device.nix | 1 - flake.lock | 476 ++---- flake.nix | 108 +- home.nix | 42 - main.nix | 119 -- modules/audio.nix | 24 - modules/beets.nix | 52 - modules/boot.nix | 23 - modules/cloudflared.nix | 28 - modules/copyparty.nix | 48 - modules/cosmic.nix | 62 - modules/firefox.nix | 90 -- modules/glances.nix | 44 - modules/graphics.nix | 88 -- modules/invidious.nix | 56 - modules/locale.nix | 21 - modules/mailserver.nix | 45 - modules/mpd.nix | 37 - modules/network.nix | 25 - modules/packages.nix | 360 ----- modules/redlib.nix | 35 - modules/searxng.nix | 23 - modules/searxng.yml | 2826 ------------------------------------ modules/security.nix | 12 - modules/sish.nix | 0 modules/sshfs.nix | 18 - modules/stylix.nix | 41 - modules/swap.nix | 17 - modules/syncthing.nix | 73 - modules/users.nix | 19 - modules/virtualisation.nix | 9 - modules/vscode-server.nix | 7 - nix.ans | 16 - nix.png | Bin 79494 -> 0 bytes 35 files changed, 116 insertions(+), 4731 deletions(-) delete mode 100644 .stignore delete mode 100644 device.nix delete mode 100644 home.nix delete mode 100644 main.nix delete mode 100644 modules/audio.nix delete mode 100644 modules/beets.nix delete mode 100644 modules/boot.nix delete mode 100644 modules/cloudflared.nix delete mode 100644 modules/copyparty.nix delete mode 100644 modules/cosmic.nix delete mode 100644 modules/firefox.nix delete mode 100644 modules/glances.nix delete mode 100644 modules/graphics.nix delete mode 100644 modules/invidious.nix delete mode 100644 modules/locale.nix delete mode 100644 modules/mailserver.nix delete mode 100644 modules/mpd.nix delete mode 100644 modules/network.nix delete mode 100644 modules/packages.nix delete mode 100644 modules/redlib.nix delete mode 100755 modules/searxng.nix delete mode 100644 modules/searxng.yml delete mode 100644 modules/security.nix delete mode 100644 modules/sish.nix delete mode 100644 modules/sshfs.nix delete mode 100644 modules/stylix.nix delete mode 100644 modules/swap.nix delete mode 100644 modules/syncthing.nix delete mode 100644 modules/users.nix delete mode 100644 modules/virtualisation.nix delete mode 100644 modules/vscode-server.nix delete mode 100755 nix.ans delete mode 100644 nix.png diff --git a/.stignore b/.stignore deleted file mode 100644 index 27f2bde..0000000 --- a/.stignore +++ /dev/null @@ -1,2 +0,0 @@ -device.nix -hardware-configuration.nix \ No newline at end of file diff --git a/device.nix b/device.nix deleted file mode 100644 index 4a699cd..0000000 --- a/device.nix +++ /dev/null @@ -1 +0,0 @@ -{ device = "desktop"; } \ No newline at end of file diff --git a/flake.lock b/flake.lock index 986cb65..dacb5d2 100644 --- a/flake.lock +++ b/flake.lock @@ -74,11 +74,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1770758715, - "narHash": "sha256-FlRSDJ8OlCiWX+tIAZJkQnkBAAwbO125aUdAC6VJlOk=", + "lastModified": 1771354440, + "narHash": "sha256-WuwTJAZh1Sot89h63kKWIMhy8ComS+sv1BsijvYhX5E=", "owner": "9001", "repo": "copyparty", - "rev": "d44ea245307c06eb060b6e6f5c2cba91a759c940", + "rev": "f1a433a61718947853162043d3dd66905adc2657", "type": "github" }, "original": { @@ -87,6 +87,21 @@ "type": "github" } }, + "den": { + "locked": { + "lastModified": 1771364340, + "narHash": "sha256-i6IoHdOqdJHjJHuTIZqPJVDn6VVOG1nyRXR70qYQej4=", + "owner": "vic", + "repo": "den", + "rev": "f8cb8c618e1680e99c165d2bf826600170abb5a2", + "type": "github" + }, + "original": { + "owner": "vic", + "repo": "den", + "type": "github" + } + }, "firefox-gnome-theme": { "flake": false, "locked": { @@ -103,27 +118,40 @@ "type": "github" } }, - "flake-compat": { - "flake": false, + "flake-aspects": { "locked": { - "lastModified": 1746162366, - "narHash": "sha256-5SSSZ/oQkwfcAz/o/6TlejlVGqeK08wyREBQ5qFFPhM=", - "owner": "nix-community", - "repo": "flake-compat", - "rev": "0f158086a2ecdbb138cd0429410e44994f1b7e4b", + "lastModified": 1771395573, + "narHash": "sha256-bcCOG2CW23/Eww/zULJf1xd0Shz2zS4c2AJWwLALyJ8=", + "owner": "vic", + "repo": "flake-aspects", + "rev": "8297f3bc41ad79b9f01d56d0dd92f7aac51bacfb", "type": "github" }, "original": { - "owner": "nix-community", - "repo": "flake-compat", + "owner": "vic", + "repo": "flake-aspects", + "type": "github" + } + }, + "flake-file": { + "locked": { + "lastModified": 1771017549, + "narHash": "sha256-n68HeYEQJ67hMH2LPI0cERD2pkpNe5dyeOGg11uZ7rc=", + "owner": "vic", + "repo": "flake-file", + "rev": "9d89918faacdbd2ce26d0aa7298da0fecad8b437", + "type": "github" + }, + "original": { + "owner": "vic", + "repo": "flake-file", "type": "github" } }, "flake-parts": { "inputs": { "nixpkgs-lib": [ - "nix-citizen", - "nixpkgs" + "nixpkgs-lib" ] }, "locked": { @@ -141,24 +169,6 @@ } }, "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", @@ -194,40 +204,6 @@ "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": { @@ -264,124 +240,53 @@ } }, "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=", + "lastModified": 1771422582, + "narHash": "sha256-xK5kl3OBZaF1VwziVMX+SZ2LT9Fbu5o8vRDt78uR7no=", "owner": "nix-community", - "repo": "nix-github-actions", - "rev": "f4158fa080ef4503c8f4c820967d946c2af31ec9", + "repo": "home-manager", + "rev": "b3ccd4bb262f4e6d3248b46cede92b90c4a42094", "type": "github" }, "original": { "owner": "nix-community", - "repo": "nix-github-actions", + "repo": "home-manager", "type": "github" } }, - "nixos-cosmic": { - "inputs": { - "flake-compat": "flake-compat", - "nixpkgs": "nixpkgs_6", - "nixpkgs-stable": "nixpkgs-stable", - "rust-overlay": "rust-overlay" - }, + "import-tree": { "locked": { - "lastModified": 1751591814, - "narHash": "sha256-A4lgvuj4v+Pr8MniXz1FBG0DXOygi8tTECR+j53FMhM=", - "owner": "lilyinstarlight", - "repo": "nixos-cosmic", - "rev": "fef2d0c78c4e4d6c600a88795af193131ff51bdc", + "lastModified": 1771045967, + "narHash": "sha256-oYO4poyw0Sb/db2PigqugMlDwsvwLg6CSpFrMUWxA3Q=", + "owner": "vic", + "repo": "import-tree", + "rev": "c968d3b54d12cf5d9c13f16f7c545a06c9d1fde6", "type": "github" }, "original": { - "owner": "lilyinstarlight", - "repo": "nixos-cosmic", + "owner": "vic", + "repo": "import-tree", + "type": "github" + } + }, + "nix-flatpak": { + "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" } }, @@ -400,147 +305,22 @@ "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", + "lastModified": 1771177547, + "narHash": "sha256-trTtk3WTOHz7hSw89xIIvahkgoFJYQ0G43IlqprFoMA=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "00c21e4c93d963c50d4c0c89bfa84ed6e0694df2", + "rev": "ac055f38c798b0d87695240c7b761b82fc7e5bc2", "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", + "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": [ @@ -569,36 +349,19 @@ "root": { "inputs": { "copyparty": "copyparty", - "flatpaks": "flatpaks", + "den": "den", + "flake-aspects": "flake-aspects", + "flake-file": "flake-file", + "flake-parts": "flake-parts", "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", + "import-tree": "import-tree", + "nix-flatpak": "nix-flatpak", + "nixpkgs": "nixpkgs_2", + "nixpkgs-lib": [ "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": "stylix", + "systems": "systems_2" } }, "stylix": { @@ -608,13 +371,13 @@ "base16-helix": "base16-helix", "base16-vim": "base16-vim", "firefox-gnome-theme": "firefox-gnome-theme", - "flake-parts": "flake-parts_3", + "flake-parts": "flake-parts_2", "gnome-shell": "gnome-shell", "nixpkgs": [ "nixpkgs" ], "nur": "nur", - "systems": "systems_2", + "systems": "systems", "tinted-foot": "tinted-foot", "tinted-kitty": "tinted-kitty", "tinted-schemes": "tinted-schemes", @@ -622,11 +385,11 @@ "tinted-zed": "tinted-zed" }, "locked": { - "lastModified": 1770587906, - "narHash": "sha256-N9ZTG3ia7l4iQO+9JlOj+sX4yu6gl7a3aozrlhSIJwQ=", + "lastModified": 1771428844, + "narHash": "sha256-rTzo6bZEsdT7yHUZ0B4BYe32XQZzm8SiWKvWLJnxerE=", "owner": "nix-community", "repo": "stylix", - "rev": "72e6483a88d51471a6c55e1d43e7ed2bc47a76a4", + "rev": "801843d10e9e22d7a00f660d069e2de70aa2980a", "type": "github" }, "original": { @@ -665,21 +428,6 @@ "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": { @@ -760,46 +508,6 @@ "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", diff --git a/flake.nix b/flake.nix index 5b09114..edf6e14 100644 --- a/flake.nix +++ b/flake.nix @@ -1,90 +1,30 @@ { - inputs = { - # nixpkgs.follows = "nixos-cosmic/nixpkgs"; + outputs = inputs: inputs.flake-parts.lib.mkFlake { inherit inputs; } (inputs.import-tree ./modules); - nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; + inputs = { + den.url = "github:vic/den"; + flake-aspects.url = "github:vic/flake-aspects"; + flake-file.url = "github:vic/flake-file"; + flake-parts = { + inputs.nixpkgs-lib.follows = "nixpkgs-lib"; + url = "github:hercules-ci/flake-parts"; + }; + home-manager = { + inputs.nixpkgs.follows = "nixpkgs"; + url = "github:nix-community/home-manager"; + }; + import-tree.url = "github:vic/import-tree"; + nixpkgs.url = "github:nixos/nixpkgs/nixpkgs-unstable"; + nixpkgs-lib.follows = "nixpkgs"; + systems.url = "github:nix-systems/default"; - 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"; + stylix = { + url = "github:nix-community/stylix"; + inputs.nixpkgs.follows = "nixpkgs"; }; - 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; + nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=latest"; - 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 + copyparty.url = "github:9001/copyparty"; + }; +} diff --git a/home.nix b/home.nix deleted file mode 100644 index bc324aa..0000000 --- a/home.nix +++ /dev/null @@ -1,42 +0,0 @@ -{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/main.nix b/main.nix deleted file mode 100644 index 0ed3d00..0000000 --- a/main.nix +++ /dev/null @@ -1,119 +0,0 @@ -{ 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/modules/audio.nix b/modules/audio.nix deleted file mode 100644 index 4856538..0000000 --- a/modules/audio.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ 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/modules/beets.nix b/modules/beets.nix deleted file mode 100644 index 7e61d4a..0000000 --- a/modules/beets.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ 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/modules/boot.nix b/modules/boot.nix deleted file mode 100644 index d9192ba..0000000 --- a/modules/boot.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ 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/modules/cloudflared.nix b/modules/cloudflared.nix deleted file mode 100644 index 6cc71c3..0000000 --- a/modules/cloudflared.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ 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/modules/copyparty.nix b/modules/copyparty.nix deleted file mode 100644 index 088c8a8..0000000 --- a/modules/copyparty.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ 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/modules/cosmic.nix b/modules/cosmic.nix deleted file mode 100644 index 5d53d54..0000000 --- a/modules/cosmic.nix +++ /dev/null @@ -1,62 +0,0 @@ -{ 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/modules/firefox.nix b/modules/firefox.nix deleted file mode 100644 index 789302c..0000000 --- a/modules/firefox.nix +++ /dev/null @@ -1,90 +0,0 @@ -{ 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/modules/glances.nix b/modules/glances.nix deleted file mode 100644 index 75254c7..0000000 --- a/modules/glances.nix +++ /dev/null @@ -1,44 +0,0 @@ -{ 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/modules/graphics.nix b/modules/graphics.nix deleted file mode 100644 index 9789053..0000000 --- a/modules/graphics.nix +++ /dev/null @@ -1,88 +0,0 @@ -{ 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/modules/invidious.nix b/modules/invidious.nix deleted file mode 100644 index 41ca650..0000000 --- a/modules/invidious.nix +++ /dev/null @@ -1,56 +0,0 @@ -{ 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/modules/locale.nix b/modules/locale.nix deleted file mode 100644 index a7802f0..0000000 --- a/modules/locale.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ 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/modules/mailserver.nix b/modules/mailserver.nix deleted file mode 100644 index 5adc563..0000000 --- a/modules/mailserver.nix +++ /dev/null @@ -1,45 +0,0 @@ -{ 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/modules/mpd.nix b/modules/mpd.nix deleted file mode 100644 index a8c8293..0000000 --- a/modules/mpd.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ 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/modules/network.nix b/modules/network.nix deleted file mode 100644 index 230f9a3..0000000 --- a/modules/network.nix +++ /dev/null @@ -1,25 +0,0 @@ -{ 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/modules/packages.nix b/modules/packages.nix deleted file mode 100644 index 533a174..0000000 --- a/modules/packages.nix +++ /dev/null @@ -1,360 +0,0 @@ -{ 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/modules/redlib.nix b/modules/redlib.nix deleted file mode 100644 index 72c78ef..0000000 --- a/modules/redlib.nix +++ /dev/null @@ -1,35 +0,0 @@ -{ 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/modules/searxng.nix b/modules/searxng.nix deleted file mode 100755 index fe54f23..0000000 --- a/modules/searxng.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ 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/modules/searxng.yml b/modules/searxng.yml deleted file mode 100644 index cbeac08..0000000 --- a/modules/searxng.yml +++ /dev/null @@ -1,2826 +0,0 @@ -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/security.nix b/modules/security.nix deleted file mode 100644 index cb53492..0000000 --- a/modules/security.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ config, pkgs, device, ... }: - -{ - security = { - polkit.enable = true; - - sudo = { - enable = true; - wheelNeedsPassword = false; - }; - }; -} \ No newline at end of file diff --git a/modules/sish.nix b/modules/sish.nix deleted file mode 100644 index e69de29..0000000 diff --git a/modules/sshfs.nix b/modules/sshfs.nix deleted file mode 100644 index c4078cb..0000000 --- a/modules/sshfs.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ 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/modules/stylix.nix b/modules/stylix.nix deleted file mode 100644 index d7980f2..0000000 --- a/modules/stylix.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ 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/modules/swap.nix b/modules/swap.nix deleted file mode 100644 index c7c0f3f..0000000 --- a/modules/swap.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ 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/modules/syncthing.nix b/modules/syncthing.nix deleted file mode 100644 index 28b955b..0000000 --- a/modules/syncthing.nix +++ /dev/null @@ -1,73 +0,0 @@ -{ 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/modules/users.nix b/modules/users.nix deleted file mode 100644 index c657fc7..0000000 --- a/modules/users.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ 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/modules/virtualisation.nix b/modules/virtualisation.nix deleted file mode 100644 index e64709e..0000000 --- a/modules/virtualisation.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ config, pkgs, device, ... }: - -{ - virtualisation = { - libvirtd.enable = true; - - spiceUSBRedirection.enable = true; - }; -} \ No newline at end of file diff --git a/modules/vscode-server.nix b/modules/vscode-server.nix deleted file mode 100644 index 4af3615..0000000 --- a/modules/vscode-server.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ config, pkgs, device, ... }: - -{ - services = { - vscode-server.enable = true; - }; -} \ No newline at end of file diff --git a/nix.ans b/nix.ans deleted file mode 100755 index 64a7b5d..0000000 --- a/nix.ans +++ /dev/null @@ -1,16 +0,0 @@ - ◢██◣ ◥███◣ ◢██◣ - ◥███◣ ◥███◣◢███◤ - ◥███◣ ◥██████◤ - ◢████████████◣████◤ ◢◣ - ◢██████████████◣███◣ ◢██◣ - ◢███◤ ◥███◣◢███◤ - ◢███◤ ◥██◤███◤ -◢█████████◤ ◥◤████████◣ -◥████████◤◣ ◢█████████◤ - ◢███◤██◣ ◢███◤ - ◢███◤◥███◣ ◢███◤ - ◥██◤ ◥███◣██████████████◤ - ◥◤ ◢████◣████████████◤ - ◢██████◣ ◥███◣ - ◢███◤◥███◣ ◥███◣ - ◥██◤ ◥███◣ ◥██◤ diff --git a/nix.png b/nix.png deleted file mode 100644 index fffa63c48c9f039e8089eac60dd05bdee2dfc39b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 79494 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

&aES?T& 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

es$JLw37;)uc+f?&7#ErPpkb5-BG_Fuul zu;vDXhHm9?X!d1dRfU^twHB0Sd}5)gfnkA3^^*&>@Is_^FU(rTA1fBE`FDQ%{eR`q z$#n*XWY0J^vA%T+x;i{JRtviYS1c8p#we~Kuj(GZ=GW;R#ohm8`(aZl3{$3U>kEo7 zYRZga^Yy>85L^k^@qXFe^zT{ZMexjfK($yhEV>z7*M_~`B0pVceF}?Ue|_CEwN_9K z_$_n6{%sL=meejcYx=f-tt_m)#Nevhzi7+U9)-8PpKq_66zM z3zH+y`(Afo{+Y3$@mud@2YoT~*SB|TP3Jq+KlRvO*y0F=hDM7_o~U3WFTFWVOjkwg z-W*&nd4Tnl`?^-~)rX(X+jr%>y44<)dHb^bTgojUs|OeuG}K=^Zo9C0i}|_y{r`;4 z|6ViQ;#@BG;zB-?3;WKUYy9SLV&|VX9k9kJ!<66!k6S>EsoX=K!s=lT?*=U&IsdfX zwWNNPEo1_lAwdK*+_vD?OhJ+CNH4dOt-&4(b{*=sUBS@EJ>`7j`uH_s-LnrX_{V!L zGif?({_ExHZ!SBg!3xI)r%CGld=pbyTJvR|J23yWV3*2>?^-V6%F)BO$aU=><})2Z?~0(VVxFCWuWzh@zpp&$=x0=R(|1npe& z)A?ucTTV!^&)_@*G%V*}vvt+nuwD1kYa+Z&;+W zfIVpQUbt@=H0nN2dlI`SoeS1zW{@n-2Rg!TFv9NZQu zt;pNG^St32HmMWtpwjr+Z^th_p|Iqkz;pXmLF3)L*_kO&huoi$@9%Qn1YRzHdRw=G z8{UA21?D(H!@=B-MW<>Rtl`R_Aih;8CIM9baXp6xXz3jm>o+rDeP{-T1<|QlqEJiX z{cAV8n5hAeB_6W}k_X{qB>P;Uwut||+x22*0bH3_p|#%%jgr#k(BR+>=eK?{^8!Nt zlp<)33hdGKeC_SxFIpuKnlbnUEY!+V*XUHW!PfdQFf1@%`xP|l z1~#$TRSsWRf?i_cbe!`f@1;vH zugB$r*17oC9g2hnwS!lc0%#NwoUZQ&Kh>#fdyPo*+P%|3y*IF9j@5@YBND;xBaEOX z4s;dDWQaQ$6X4s?6=pJ8`|Y?l zpq|u~d52oP&c#5QcMkP%-*-PMn-g%+=6$yRL#Otc+29nyZ~?abhhf42P&${`{oWEhD};vmxJbm4P>AyZo#v^-bV0(r$>R?o`RMaff7M8+*hj5na10B@3Q?DibDOj z1vaF>a3y?GOiLcP!;{egjR{|P-I0zM($Ba6n$&Cs9o7H}^9y{ipeQhN<%5>kf1%L@ zAL?UZ=vbceOd3>LdNK1dzz3@sroOa5DyF}=Kx5+-+})KWa|#%LMkPWWd<7mJ=adgJ zf|mz@E_#C}3kH_pO|N-t4|q;m`$;s$t<{5u z>nV6qkbdC~gJ32ki3Pys$Qf2FOX=sht1;(hsWa3z*n$iO2UGBn%Za?LQP<}&{a@6` zw&~aZw|6%B9X1eYyLd4uOyK?hu$~D^rwYte3O&Up9UUEX|MfAu=ZtUaPkjO19_|4z z^WUjHYnF|RyC3EMpr1{OV`(E>gA6>SSoEB!*dBf||2(7*&)}f|E9Y-rC^TvcTDFT_ z?fCA!UZAb3pw>5o3*1lT7Yh&ZE!wgiw3Y*upr=3w*cf(nZ(w`T1GUNmVO87b%sktL z=JVy>pZ*?xs}$0mU}%CD3T!2FdKOGs`L6MH*~)5#{ntuQ?(u^bWbn*VFuPB_q+j-X}NgnyXxnh1ar)>gQCq*bamG{1SXVAB5!9~wd30!H|FEdztiZjf&h6;4(z zg7oPdj>D>xh7c>i8;Q5|)~fe_)^>p|`axtO)1^M8{8tK%m~6AzO)fZS@R~5#z?(HO y%F`L!py8Q-s4;A|g6)ct%21fXCdKgWC!@=|y$cpyzrP#Q{`GYAb6Mw<&;$S;M;Vd;