From 893ea11e1dc05fe1a2a34e66d4ebcfdffda34720 Mon Sep 17 00:00:00 2001 From: aethrvmn Date: Sun, 30 Nov 2025 22:59:43 +0100 Subject: huge restructure of modules --- flake.nix | 72 +- hosts/pad/default.nix | 14 +- hosts/station/boot.nix | 2 - hosts/station/default.nix | 14 +- modules/1password/default.nix | 26 + modules/adguard/default.nix | 88 +++ modules/amd/default.nix | 42 + modules/bluetooth/default.nix | 3 + modules/calibre/default.nix | 39 + modules/cgit/default.nix | 76 ++ modules/cgit/static/cgit.css | 1346 ++++++++++++++++++++++++++++++++ modules/cgit/static/favicon.png | Bin 0 -> 2535629 bytes modules/cgit/static/logo.png | Bin 0 -> 2535629 bytes modules/cinnamon/default.nix | 48 ++ modules/client/1password/default.nix | 22 - modules/client/bluetooth/default.nix | 3 - modules/client/cinnamon/default.nix | 48 -- modules/client/default.nix | 9 - modules/client/flatpak/default.nix | 48 -- modules/client/thunar/default.nix | 24 - modules/client/waybar/default.nix | 5 - modules/client/xserver/default.nix | 14 - modules/common/adguard/default.nix | 88 --- modules/common/default.nix | 49 -- modules/common/doas/default.nix | 13 - modules/common/fonts/default.nix | 11 - modules/common/gnupg/default.nix | 5 - modules/common/i18n/default.nix | 20 - modules/common/nh/default.nix | 9 - modules/common/pipewire/default.nix | 17 - modules/common/searx/default.nix | 126 --- modules/common/ssh/default.nix | 5 - modules/common/sudo/default.nix | 5 - modules/common/users/default.nix | 28 - modules/doas/default.nix | 17 + modules/flatpak/default.nix | 48 ++ modules/fonts/default.nix | 11 + modules/forgejo/default.nix | 57 ++ modules/gemini/default.nix | 57 ++ modules/gnupg/default.nix | 5 + modules/grafana/default.nix | 23 + modules/i18n/default.nix | 20 + modules/immich/default.nix | 28 + modules/intel/default.nix | 8 + modules/jellyfin/default.nix | 27 + modules/monero/default.nix | 64 ++ modules/nginx/default.nix | 40 + modules/nh/default.nix | 9 + modules/nvidia/default.nix | 56 ++ modules/ollama/default.nix | 21 + modules/open-webui/default.nix | 24 + modules/pipewire/default.nix | 17 + modules/searx/default.nix | 126 +++ modules/server/calibre/default.nix | 39 - modules/server/cgit/default.nix | 76 -- modules/server/cgit/static/cgit.css | 1346 -------------------------------- modules/server/cgit/static/favicon.png | Bin 2535629 -> 0 bytes modules/server/cgit/static/logo.png | Bin 2535629 -> 0 bytes modules/server/default.nix | 52 -- modules/server/forgejo/default.nix | 57 -- modules/server/gemini/default.nix | 57 -- modules/server/grafana/default.nix | 23 - modules/server/immich/default.nix | 28 - modules/server/jellyfin/default.nix | 27 - modules/server/monero/default.nix | 64 -- modules/server/ollama/default.nix | 70 -- modules/ssh/default.nix | 5 + modules/thunar/default.nix | 24 + modules/users/default.nix | 34 + modules/waybar/default.nix | 5 + modules/winapps/default.nix | 7 + 71 files changed, 2445 insertions(+), 2446 deletions(-) create mode 100644 modules/1password/default.nix create mode 100644 modules/adguard/default.nix create mode 100644 modules/amd/default.nix create mode 100644 modules/bluetooth/default.nix create mode 100644 modules/calibre/default.nix create mode 100644 modules/cgit/default.nix create mode 100644 modules/cgit/static/cgit.css create mode 100755 modules/cgit/static/favicon.png create mode 100755 modules/cgit/static/logo.png create mode 100644 modules/cinnamon/default.nix delete mode 100644 modules/client/1password/default.nix delete mode 100644 modules/client/bluetooth/default.nix delete mode 100644 modules/client/cinnamon/default.nix delete mode 100644 modules/client/default.nix delete mode 100644 modules/client/flatpak/default.nix delete mode 100644 modules/client/thunar/default.nix delete mode 100644 modules/client/waybar/default.nix delete mode 100644 modules/client/xserver/default.nix delete mode 100644 modules/common/adguard/default.nix delete mode 100644 modules/common/default.nix delete mode 100644 modules/common/doas/default.nix delete mode 100644 modules/common/fonts/default.nix delete mode 100644 modules/common/gnupg/default.nix delete mode 100644 modules/common/i18n/default.nix delete mode 100644 modules/common/nh/default.nix delete mode 100644 modules/common/pipewire/default.nix delete mode 100644 modules/common/searx/default.nix delete mode 100644 modules/common/ssh/default.nix delete mode 100644 modules/common/sudo/default.nix delete mode 100644 modules/common/users/default.nix create mode 100644 modules/doas/default.nix create mode 100644 modules/flatpak/default.nix create mode 100644 modules/fonts/default.nix create mode 100644 modules/forgejo/default.nix create mode 100644 modules/gemini/default.nix create mode 100644 modules/gnupg/default.nix create mode 100644 modules/grafana/default.nix create mode 100644 modules/i18n/default.nix create mode 100644 modules/immich/default.nix create mode 100644 modules/intel/default.nix create mode 100644 modules/jellyfin/default.nix create mode 100644 modules/monero/default.nix create mode 100644 modules/nginx/default.nix create mode 100644 modules/nh/default.nix create mode 100644 modules/nvidia/default.nix create mode 100644 modules/ollama/default.nix create mode 100644 modules/open-webui/default.nix create mode 100644 modules/pipewire/default.nix create mode 100644 modules/searx/default.nix delete mode 100644 modules/server/calibre/default.nix delete mode 100644 modules/server/cgit/default.nix delete mode 100644 modules/server/cgit/static/cgit.css delete mode 100755 modules/server/cgit/static/favicon.png delete mode 100755 modules/server/cgit/static/logo.png delete mode 100644 modules/server/default.nix delete mode 100644 modules/server/forgejo/default.nix delete mode 100644 modules/server/gemini/default.nix delete mode 100644 modules/server/grafana/default.nix delete mode 100644 modules/server/immich/default.nix delete mode 100644 modules/server/jellyfin/default.nix delete mode 100644 modules/server/monero/default.nix delete mode 100644 modules/server/ollama/default.nix create mode 100644 modules/ssh/default.nix create mode 100644 modules/thunar/default.nix create mode 100644 modules/users/default.nix create mode 100644 modules/waybar/default.nix create mode 100644 modules/winapps/default.nix diff --git a/flake.nix b/flake.nix index a9b396c..b2a93f2 100644 --- a/flake.nix +++ b/flake.nix @@ -47,7 +47,6 @@ libssh libxml2 libz - musl openssl util-linux xz @@ -69,28 +68,15 @@ backupFileExtension = "backup"; }; } - ./modules/common - ]; - - ClientModules = [ - flatpaks.nixosModules.nix-flatpak - ./modules/client - ]; - - ServerModules = [ - ./modules/server - ( - { - pkgs, - ... - }: - { - environment.systemPackages = with pkgs; [ - winapps.packages."x86_64-linux".winapps - winapps.packages."x86_64-linux".winapps-launcher # optional - ]; - } - ) + ./modules/bluetooth + ./modules/doas + ./modules/fonts + ./modules/gnupg + ./modules/i18n + ./modules/nh + ./modules/pipewire + ./modules/ssh + ./modules/users ]; mkHost = { hostPath, extraModules }: @@ -103,17 +89,34 @@ nixosConfigurations = { pad = mkHost { hostPath = ./hosts/pad; - extraModules = commonModules ++ ClientModules; + extraModules = commonModules ++ [ ]; }; station = mkHost { hostPath = ./hosts/station; - extraModules = commonModules ++ ClientModules ++ ServerModules; + extraModules = commonModules ++ [ ]; + }; + + work = mkHost { + hostPath = ./hosts/work; + extraModules = commonModules ++ [ + flatpaks.nixosModules.nix-flatpak + ./modules/1password + ./modules/adguard + ./modules/cinnamon + ./modules/flatpak + ./modules/monero + ./modules/nginx + ./modules/nvidia + ./modules/ollama + ./modules/searx + ./modules/open-webui + ]; }; server = mkHost { hostPath = ./hosts/server; - extraModules = commonModules ++ ServerModules; + extraModules = commonModules ++ [ ]; }; }; @@ -132,9 +135,8 @@ shellHook = '' echo "$(python --version)" - echo "" echo "$(poetry --version)" - echo "" + echo "$(pylsp --version)" ''; env.LD_LIBRARY_PATH = commonLibs; @@ -143,7 +145,6 @@ nim = pkgs.mkShell { name = "nim"; packages = with pkgs; [ - musl nim nimble nimlangserver @@ -160,19 +161,6 @@ env.LD_LIBRARY_PATH = commonLibs; }; - - js = pkgs.mkShell { - name = "js"; - packages = with pkgs; [ - bun - ]; - - shellHook = '' - echo "$(bun --version)" - ''; - - env.LD_LIBRARY_PATH = commonLibs; - }; }; }; } diff --git a/hosts/pad/default.nix b/hosts/pad/default.nix index 738e407..575f8e9 100644 --- a/hosts/pad/default.nix +++ b/hosts/pad/default.nix @@ -5,14 +5,14 @@ { imports = [ - # Include the results of the hardware scan. - ./hardware-configuration.nix + # Include the results of the hardware scan. + ./hardware-configuration.nix - # Base modules - ./boot.nix - ./hardware.nix - ./network.nix - ]; + # Base modules + ../../modules/intel + ./boot.nix + ./network.nix + ]; system = { autoUpgrade = { diff --git a/hosts/station/boot.nix b/hosts/station/boot.nix index 603ebf7..0d643ea 100644 --- a/hosts/station/boot.nix +++ b/hosts/station/boot.nix @@ -13,8 +13,6 @@ initrd = { luks.devices."luks-4d8ffefc-fb74-4628-9779-abc535146374".device = "/dev/disk/by-uuid/4d8ffefc-fb74-4628-9779-abc535146374"; - - kernelModules = ["amdgpu"]; }; }; } diff --git a/hosts/station/default.nix b/hosts/station/default.nix index bcd4615..628c43a 100644 --- a/hosts/station/default.nix +++ b/hosts/station/default.nix @@ -5,14 +5,14 @@ { imports = [ - # Include the results of the hardware scan. - ./hardware-configuration.nix + # Include the results of the hardware scan. + ./hardware-configuration.nix - # Base modules - ./boot.nix - ./hardware.nix - ./network.nix - ]; + # Base modules + ../../modules/amd + ./boot.nix + ./network.nix + ]; system = { autoUpgrade = { diff --git a/modules/1password/default.nix b/modules/1password/default.nix new file mode 100644 index 0000000..5e650cd --- /dev/null +++ b/modules/1password/default.nix @@ -0,0 +1,26 @@ +{ config, lib, ... }: + +{ + environment.etc ={ + "1password/custom_allowed_browsers" = { + text = '' + firefox + librewolf + ''; + mode = "0755"; + }; + }; + + nixpkgs.config = { + allowUnfree = lib.mkForce true; + }; + + programs = { + _1password.enable = true; + _1password-gui = { + enable = true; + polkitPolicyOwners = [ "aethrvmn" ]; + }; + }; +} + diff --git a/modules/adguard/default.nix b/modules/adguard/default.nix new file mode 100644 index 0000000..9cb7cc2 --- /dev/null +++ b/modules/adguard/default.nix @@ -0,0 +1,88 @@ +{ config, lib, ... }: +{ + services = { + adguardhome = { + enable = true; + openFirewall = false; + mutableSettings = false; + + settings = { + http = { + address = "127.0.0.1:3000"; + }; + + dns = { + bind_hosts = [ "127.0.0.1" ]; + port = 53; + + upstream_dns = [ + "https://de-fra-dns-001.mullvad.net/dns-query" + "https://gb-lon-dns-001.mullvad.net/dns-query" + "https://gb-lon-dns-301.mullvad.net/dns-query" + ]; + fallback_dns = [ + "9.9.9.9" + "149.112.112.112" + ]; + bootstrap_dns = [ + "9.9.9.9" + "149.112.112.112" + ]; + }; + + filtering = { + rewrites = [ + # searxng + { + domain = "search.internal"; + answer = "127.0.0.1"; + } + # adguard + { + domain = "dns.internal"; + answer = "127.0.0.1"; + } + ]; + + protection_enabled = true; + filtering_enabled = true; + + parental_enabled = false; # Parental control-based DNS requests filtering. + + safe_search = { + enabled = false; # Enforcing "Safe search" option for search engines, when possible. + }; + }; + }; + }; + + nginx ={ + enable = true; + recommendedGzipSettings = true; + recommendedOptimisation = true; + recommendedProxySettings = true; + + virtualHosts = { + "dns.internal" = { + locations."/" = { + proxyPass = "http://127.0.0.1:3000"; + proxyWebsockets = true; + }; + }; + }; + }; + }; + + networking = { + nameservers = [ + "127.0.0.1" + ]; + + hosts = { + "127.0.0.1" = [ + "dns.internal" + "search.internal" + ]; + }; + }; +} diff --git a/modules/amd/default.nix b/modules/amd/default.nix new file mode 100644 index 0000000..c4842e6 --- /dev/null +++ b/modules/amd/default.nix @@ -0,0 +1,42 @@ +{ config, pkgs, lib, ... }: +{ + boot = { + initrd = { + kernelModules = [ "amdgpu" ]; + }; + }; + + environment.systemPackages = with pkgs; [ + rocmPackages.rocminfo + rocm.Packages.rocm-smi + rocmPackages.hipcc + ]; + + hardware = { + graphics = { + enable = true; + extraPackages = with pkgs; [ + rocmPackages.clr + ]; + }; + }; + + nixpkgs.config = { + allowUnfree = lib.mkForce true; + rocmSupport = true; + rocmTargets = [ "gfx1031" ]; + }; + + services = { + ollama = { + environmentVariables = { + HCC_AMDGPU_TARGET = "gfx1031"; + }; + rocmOverrideGfx = "10.3.0"; + }; + + xserver.videoDrivers = [ + "amdgpu" + ]; + }; +} diff --git a/modules/bluetooth/default.nix b/modules/bluetooth/default.nix new file mode 100644 index 0000000..6550349 --- /dev/null +++ b/modules/bluetooth/default.nix @@ -0,0 +1,3 @@ +{ + services.blueman.enable = false; +} diff --git a/modules/calibre/default.nix b/modules/calibre/default.nix new file mode 100644 index 0000000..d177ac1 --- /dev/null +++ b/modules/calibre/default.nix @@ -0,0 +1,39 @@ +{ config, pkgs, ... }: +let + libDir = "/var/lib/calibre-web/library"; +in { + services = { + calibre-web = { + enable = true; + + listen = { + ip = "127.0.0.1"; + port = 3020; + }; + + options = { + calibreLibrary = libDir; + enableBookUploading = true; + }; + }; + + nginx = { + virtualHosts."library.internal" = { + locations."/" = { + proxyPass = "http://127.0.0.1:3020"; + proxyWebsockets = true; + }; + }; + }; + }; + + systemd.services.calibre-web = { + preStart = '' + if [ ! -f "${libDir}/metadata.db" ]; then + mkdir -p "${libDir}" + ${pkgs.calibre}/bin/calibredb add --empty \ + --with-library "${libDir}" + fi + ''; + }; +} diff --git a/modules/cgit/default.nix b/modules/cgit/default.nix new file mode 100644 index 0000000..08784fe --- /dev/null +++ b/modules/cgit/default.nix @@ -0,0 +1,76 @@ +{ config, pkgs, lib, ... }: +let + cgitWithAssets = pkgs.cgit.overrideAttrs (old: { + pname = "cgit-with-assets"; + + postInstall = (old.postInstall or "") + '' + # overwrite the stock files that the module aliases + install -Dm444 ${./static/cgit.css} $out/cgit/cgit.css + install -Dm444 ${./static/logo.png} $out/cgit/cgit.png # keep the name! + install -Dm444 ${./static/favicon.png} $out/cgit/favicon.ico + ''; + }); +in { + services = { + cgit."code" = { + enable = true; + scanPath = "/srv/git"; + package = cgitWithAssets; + + settings = { + cache-size = 0; + cache-scanrc-ttl = 0; + enable-log-filecount = 1; + enable-log-linecount = 1; + enable-git-config = 1; + + localtime = 1; + + noplainemail = 1; + + root-title = "code.aethrvmn.gr"; + root-desc = "αpothēke of aethrvmn"; + clone-url = "https://code.aethrvmn.gr/$CGIT_REPO_URL"; + + logo-link = "https://aethrvmn.gr/"; + + about-filter = "${pkgs.cgit}/lib/cgit/filters/about-formatting.sh"; + source-filter = "${pkgs.cgit}/lib/cgit/filters/syntax-highlighting.py"; + }; + + nginx.virtualHost = "code.internal"; + }; + }; + + users = { + groups.git = { }; + + users = { + git = { + isSystemUser = true; + description = "aethrvmn"; + group = "git"; + home = "/srv/git"; + homeMode = "0755"; + createHome = true; + shell = "${pkgs.git}/bin/git-shell"; + + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFTRmMBlTFJbOWQBLI9XS2HMdUSlsAcaQ6vWjLpfweEo aethrvmn@apotheke.earth" + ]; + }; + + cgit = { + isSystemUser = true; + extraGroups = [ "git" ]; + }; + }; + }; + + systemd = { + tmpfiles.rules = [ + # type path mode uid gid age target + "L /srv/git/static - git git - /home/aethrvmn/.nix/modules/server/cgit/static" + ]; + }; +} diff --git a/modules/cgit/static/cgit.css b/modules/cgit/static/cgit.css new file mode 100644 index 0000000..d2ee006 --- /dev/null +++ b/modules/cgit/static/cgit.css @@ -0,0 +1,1346 @@ +@import url(source-code-pro/source-code-pro.css); + +div#cgit { + padding: 0em; + margin: 0em; + font-family: sans-serif; + font-size: 10pt; + color: #333; + background: white; + padding: 4px; +} + +div#cgit a { + color: blue; + text-decoration: none; +} + +div#cgit a:hover { + text-decoration: underline; +} + +div#cgit table { + border-collapse: collapse; +} + +div#cgit table#header { + width: 100%; + margin-bottom: 1em; +} + +div#cgit table#header td.logo { + width: 96px; + vertical-align: top; + + img { + width: 96px; + } +} + +div#cgit table#header td.main { + font-size: 250%; + padding-left: 10px; + white-space: nowrap; +} + +div#cgit table#header td.main a { + color: #000; +} + +div#cgit table#header td.form { + text-align: right; + vertical-align: bottom; + padding-right: 1em; + padding-bottom: 2px; + white-space: nowrap; +} + +div#cgit table#header td.form form, +div#cgit table#header td.form input, +div#cgit table#header td.form select { + font-size: 90%; +} + +div#cgit table#header td.sub { + color: #777; + border-top: solid 1px #ccc; + padding-left: 10px; +} + +div#cgit table.tabs { + border-bottom: solid 3px #ccc; + border-collapse: collapse; + margin-top: 2em; + margin-bottom: 0px; + width: 100%; +} + +div#cgit table.tabs td { + padding: 0px 1em; + vertical-align: bottom; +} + +div#cgit table.tabs td a { + padding: 2px 0.75em; + color: #777; + font-size: 110%; +} + +div#cgit table.tabs td a.active { + color: #000; + background-color: #ccc; +} + +div#cgit table.tabs a[href^="http://"]:after, div#cgit table.tabs a[href^="https://"]:after +{ + content: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAQAAAAnOwc2AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfgAhcJDQY+gm2TAAAAHWlUWHRDb21tZW50AAAAAABDcmVhdGVkIHdpdGggR0lNUGQuZQcAAABbSURBVAhbY2BABs4MU4CwhYHBh2Erww4wrGFQZHjI8B8IgUIscJWyDHcggltQhI4zGDCcRwhChPggHIggP1QoAVmQkSETrGoHsiAEsACtBYN0oDAMbgU6EBcAAL2eHUt4XUU4AAAAAElFTkSuQmCC); + opacity: 0.5; + margin: 0 0 0 5px; +} + +div#cgit table.tabs td.form { + text-align: right; +} + +div#cgit table.tabs td.form form { + padding-bottom: 2px; + font-size: 90%; + white-space: nowrap; +} + +div#cgit table.tabs td.form input, +div#cgit table.tabs td.form select { + font-size: 90%; +} + +div#cgit div.path { + margin: 0px; + padding: 5px 2em 2px 2em; + color: #000; + background-color: #eee; +} + +div#cgit div.content { + margin: 0px; + padding: 2em; + border-bottom: solid 3px #ccc; +} + +div#cgit table.list { + width: 100%; + border: none; + border-collapse: collapse; +} + +div#cgit table.list tr { + background: white; +} + +div#cgit table.list tr.logheader { + background: #eee; +} + +div#cgit table.list tr:nth-child(even) { + background: #f7f7f7; +} + +div#cgit table.list tr:nth-child(odd) { + background: white; +} + +div#cgit table.list tr:hover { + background: #eee; +} + +div#cgit table.list tr.nohover { + background: white; +} + +div#cgit table.list tr.nohover:hover { + background: white; +} + +div#cgit table.list tr.nohover-highlight:hover:nth-child(even) { + background: #f7f7f7; +} + +div#cgit table.list tr.nohover-highlight:hover:nth-child(odd) { + background: white; +} + +div#cgit table.list th { + font-weight: bold; + /* color: #888; + border-top: dashed 1px #888; + border-bottom: dashed 1px #888; + */ + padding: 0.1em 0.5em 0.05em 0.5em; + vertical-align: baseline; +} + +div#cgit table.list td { + border: none; + padding: 0.1em 0.5em 0.1em 0.5em; +} + +div#cgit table.list td.commitgraph { + font-family: "Source Code Pro", "Courier New", monospace; + white-space: pre; +} +div#cgit pre { + font-family: "Source Code Pro", "Courier New", monospace; +} + +div#cgit table.list td.commitgraph .column1 { + color: #a00; +} + +div#cgit table.list td.commitgraph .column2 { + color: #0a0; +} + +div#cgit table.list td.commitgraph .column3 { + color: #aa0; +} + +div#cgit table.list td.commitgraph .column4 { + color: #00a; +} + +div#cgit table.list td.commitgraph .column5 { + color: #a0a; +} + +div#cgit table.list td.commitgraph .column6 { + color: #0aa; +} + +div#cgit table.list td.logsubject { + font-family: "Source Code Pro", "Courier New", monospace; + font-weight: bold; +} + +div#cgit table.list td.logmsg { + font-family: "Source Code Pro", "Courier New", monospace; + white-space: pre; + padding: 0 0.5em; +} + +div#cgit table.list td a { + color: black; +} + +div#cgit table.list td a.ls-dir { + font-weight: bold; + color: #00f; +} + +div#cgit table.list td a:hover { + color: #00f; +} + +div#cgit img { + border: none; +} + +div#cgit input#switch-btn { + margin: 2px 0px 0px 0px; +} + +div#cgit td#sidebar input.txt { + width: 100%; + margin: 2px 0px 0px 0px; +} + +div#cgit table#grid { + margin: 0px; +} + +div#cgit td#content { + vertical-align: top; + padding: 1em 2em 1em 1em; + border: none; +} + +div#cgit div#summary { + vertical-align: top; + margin-bottom: 1em; +} + +div#cgit table#downloads { + float: right; + border-collapse: collapse; + border: solid 1px #777; + margin-left: 0.5em; + margin-bottom: 0.5em; +} + +div#cgit table#downloads th { + background-color: #ccc; +} + +div#cgit div#blob { + border: solid 1px black; +} + +div#cgit div.error { + color: red; + font-weight: bold; + margin: 1em 2em; +} + +div#cgit a.ls-blob, +div#cgit a.ls-dir, +div#cgit .ls-mod { + font-family: "Source Code Pro", "Courier New", monospace; +} + +div#cgit td.ls-size { + text-align: right; + font-family: "Source Code Pro", "Courier New", monospace; + width: 10em; +} + +div#cgit td.ls-mode { + font-family: "Source Code Pro", "Courier New", monospace; + width: 10em; +} + +div#cgit table.blob { + margin-top: 0.5em; + border-top: solid 1px black; +} + +div#cgit table.blob td.hashes, +div#cgit table.blob td.lines { + margin: 0; + padding: 0 0 0 0.5em; + vertical-align: top; + color: black; +} + +div#cgit table.blob td.linenumbers { + margin: 0; + padding: 0 0.5em 0 0.5em; + vertical-align: top; + text-align: right; + border-right: 1px solid gray; +} + +div#cgit table.blob pre { + padding: 0; + margin: 0; +} + +div#cgit table.blob td.linenumbers a, +div#cgit table.ssdiff td.lineno a { + color: gray; + text-align: right; + text-decoration: none; +} + +div#cgit table.blob td.linenumbers a:hover, +div#cgit table.ssdiff td.lineno a:hover { + color: black; +} + +div#cgit table.blame td.hashes, +div#cgit table.blame td.lines, +div#cgit table.blame td.linenumbers { + padding: 0; +} + +div#cgit table.blame td.hashes div.alt, +div#cgit table.blame td.lines div.alt { + padding: 0 0.5em 0 0.5em; +} + +div#cgit table.blame td.linenumbers div.alt { + padding: 0 0.5em 0 0; +} + +div#cgit table.blame div.alt:nth-child(even) { + background: #eee; +} + +div#cgit table.blame div.alt:nth-child(odd) { + background: white; +} + +div#cgit table.blame td.lines > div { + position: relative; +} + +div#cgit table.blame td.lines > div > pre { + padding: 0 0 0 0.5em; + position: absolute; + top: 0; +} + +div#cgit table.blame .oid { + font-size: 100%; +} + +div#cgit table.bin-blob { + margin-top: 0.5em; + border: solid 1px black; +} + +div#cgit table.bin-blob th { + font-family: "Source Code Pro", "Courier New", monospace; + white-space: pre; + border: solid 1px #777; + padding: 0.5em 1em; +} + +div#cgit table.bin-blob td { + font-family: "Source Code Pro", "Courier New", monospace; + white-space: pre; + border-left: solid 1px #777; + padding: 0em 1em; +} + +div#cgit table.nowrap td { + white-space: nowrap; +} + +div#cgit table.commit-info { + border-collapse: collapse; + margin-top: 1.5em; +} + +div#cgit div.cgit-panel { + float: right; + margin-top: 1.5em; +} + +div#cgit div.cgit-panel table { + border-collapse: collapse; + border: solid 1px #aaa; + background-color: #eee; +} + +div#cgit div.cgit-panel th { + text-align: center; +} + +div#cgit div.cgit-panel td { + padding: 0.25em 0.5em; +} + +div#cgit div.cgit-panel td.label { + padding-right: 0.5em; +} + +div#cgit div.cgit-panel td.ctrl { + padding-left: 0.5em; +} + +div#cgit table.commit-info th { + text-align: left; + font-weight: normal; + padding: 0.1em 1em 0.1em 0.1em; + vertical-align: top; +} + +div#cgit table.commit-info td { + font-weight: normal; + padding: 0.1em 1em 0.1em 0.1em; +} + +div#cgit div.commit-subject { + font-weight: bold; + font-size: 125%; + margin: 1.5em 0em 0.5em 0em; + padding: 0em; +} + +div#cgit div.commit-msg { + white-space: pre; + font-family: "Source Code Pro", "Courier New", monospace; +} + +div#cgit div.notes-header { + font-weight: bold; + padding-top: 1.5em; +} + +div#cgit div.notes { + white-space: pre; + font-family: "Source Code Pro", "Courier New", monospace; + border: solid 1px #ee9; + background-color: #ffd; + padding: 0.3em 2em 0.3em 1em; + float: left; +} + +div#cgit div.notes-footer { + clear: left; +} + +div#cgit div.diffstat-header { + font-weight: bold; + padding-top: 1.5em; +} + +div#cgit table.diffstat { + border-collapse: collapse; + border: solid 1px #aaa; + background-color: #eee; +} + +div#cgit table.diffstat th { + font-weight: normal; + text-align: left; + text-decoration: underline; + padding: 0.1em 1em 0.1em 0.1em; + font-size: 100%; +} + +div#cgit table.diffstat td { + padding: 0.2em 0.2em 0.1em 0.1em; + font-size: 100%; + border: none; +} + +div#cgit table.diffstat td.mode { + white-space: nowrap; +} + +div#cgit table.diffstat td span.modechange { + padding-left: 1em; + color: red; +} + +div#cgit table.diffstat td.add a { + color: green; +} + +div#cgit table.diffstat td.del a { + color: red; +} + +div#cgit table.diffstat td.upd a { + color: blue; +} + +div#cgit table.diffstat td.graph { + width: 500px; + vertical-align: middle; +} + +div#cgit table.diffstat td.graph table { + border: none; +} + +div#cgit table.diffstat td.graph td { + padding: 0px; + border: 0px; + height: 7pt; +} + +div#cgit table.diffstat td.graph td.add { + background-color: #5c5; +} + +div#cgit table.diffstat td.graph td.rem { + background-color: #c55; +} + +div#cgit div.diffstat-summary { + color: #888; + padding-top: 0.5em; +} + +div#cgit table.diff { + width: 100%; +} + +div#cgit table.diff td { + font-family: "Source Code Pro", "Courier New", monospace; + white-space: pre; +} + +div#cgit table.diff td div.head { + font-weight: bold; + margin-top: 1em; + color: black; +} + +div#cgit table.diff td div.hunk { + color: #009; +} + +div#cgit table.diff td div.add { + color: green; +} + +div#cgit table.diff td div.del { + color: red; +} + +div#cgit .oid { + font-family: "Source Code Pro", "Courier New", monospace; + font-size: 90%; +} + +div#cgit .left { + text-align: left; +} + +div#cgit .right { + text-align: right; +} + +div#cgit table.list td.reposection { + font-style: italic; + color: #888; +} + +div#cgit a.button { + font-size: 80%; + padding: 0em 0.5em; +} + +div#cgit a.primary { + font-size: 100%; +} + +div#cgit a.secondary { + font-size: 90%; +} + +div#cgit td.toplevel-repo { +} + +div#cgit table.list td.sublevel-repo { + padding-left: 1.5em; +} + +div#cgit ul.pager { + list-style-type: none; + text-align: center; + margin: 1em 0em 0em 0em; + padding: 0; +} + +div#cgit ul.pager li { + display: inline-block; + margin: 0.25em 0.5em; +} + +div#cgit ul.pager a { + color: #777; +} + +div#cgit ul.pager .current { + font-weight: bold; +} + +div#cgit span.age-mins { + font-weight: bold; + color: #080; +} + +div#cgit span.age-hours { + color: #080; +} + +div#cgit span.age-days { + color: #040; +} + +div#cgit span.age-weeks { + color: #444; +} + +div#cgit span.age-months { + color: #888; +} + +div#cgit span.age-years { + color: #bbb; +} + +div#cgit span.insertions { + color: #080; +} + +div#cgit span.deletions { + color: #800; +} + +div#cgit div.footer { + margin-top: 0.5em; + text-align: center; + font-size: 80%; + color: #ccc; +} + +div#cgit div.footer a { + color: #ccc; + text-decoration: none; +} + +div#cgit div.footer a:hover { + text-decoration: underline; +} + +div#cgit a.branch-deco { + color: #000; + margin: 0px 0.5em; + padding: 0px 0.25em; + background-color: #88ff88; + border: solid 1px #007700; +} + +div#cgit a.tag-deco { + color: #000; + margin: 0px 0.5em; + padding: 0px 0.25em; + background-color: #ffff88; + border: solid 1px #777700; +} + +div#cgit a.tag-annotated-deco { + color: #000; + margin: 0px 0.5em; + padding: 0px 0.25em; + background-color: #ffcc88; + border: solid 1px #777700; +} + +div#cgit a.remote-deco { + color: #000; + margin: 0px 0.5em; + padding: 0px 0.25em; + background-color: #ccccff; + border: solid 1px #000077; +} + +div#cgit a.deco { + color: #000; + margin: 0px 0.5em; + padding: 0px 0.25em; + background-color: #ff8888; + border: solid 1px #770000; +} + +div#cgit div.commit-subject a.branch-deco, +div#cgit div.commit-subject a.tag-deco, +div#cgit div.commit-subject a.tag-annotated-deco, +div#cgit div.commit-subject a.remote-deco, +div#cgit div.commit-subject a.deco { + margin-left: 1em; + font-size: 75%; +} + +div#cgit table.stats { + border: solid 1px black; + border-collapse: collapse; +} + +div#cgit table.stats th { + text-align: left; + padding: 1px 0.5em; + background-color: #eee; + border: solid 1px black; +} + +div#cgit table.stats td { + text-align: right; + padding: 1px 0.5em; + border: solid 1px black; +} + +div#cgit table.stats td.total { + font-weight: bold; + text-align: left; +} + +div#cgit table.stats td.sum { + color: #c00; + font-weight: bold; + /* background-color: #eee; */ +} + +div#cgit table.stats td.left { + text-align: left; +} + +div#cgit table.vgraph { + border-collapse: separate; + border: solid 1px black; + height: 200px; +} + +div#cgit table.vgraph th { + background-color: #eee; + font-weight: bold; + border: solid 1px white; + padding: 1px 0.5em; +} + +div#cgit table.vgraph td { + vertical-align: bottom; + padding: 0px 10px; +} + +div#cgit table.vgraph div.bar { + background-color: #eee; +} + +div#cgit table.hgraph { + border: solid 1px black; + width: 800px; +} + +div#cgit table.hgraph th { + background-color: #eee; + font-weight: bold; + border: solid 1px black; + padding: 1px 0.5em; +} + +div#cgit table.hgraph td { + vertical-align: middle; + padding: 2px 2px; +} + +div#cgit table.hgraph div.bar { + background-color: #eee; + height: 1em; +} + +div#cgit table.ssdiff { + width: 100%; +} + +div#cgit table.ssdiff td { + font-size: 75%; + font-family: "Source Code Pro", "Courier New", monospace; + white-space: pre; + padding: 1px 4px 1px 4px; + border-left: solid 1px #aaa; + border-right: solid 1px #aaa; +} + +div#cgit table.ssdiff td.add { + color: black; + background: #cfc; + min-width: 50%; +} + +div#cgit table.ssdiff td.add_dark { + color: black; + background: #aca; + min-width: 50%; +} + +div#cgit table.ssdiff span.add { + background: #cfc; + font-weight: bold; +} + +div#cgit table.ssdiff td.del { + color: black; + background: #fcc; + min-width: 50%; +} + +div#cgit table.ssdiff td.del_dark { + color: black; + background: #caa; + min-width: 50%; +} + +div#cgit table.ssdiff span.del { + background: #fcc; + font-weight: bold; +} + +div#cgit table.ssdiff td.changed { + color: black; + background: #ffc; + min-width: 50%; +} + +div#cgit table.ssdiff td.changed_dark { + color: black; + background: #cca; + min-width: 50%; +} + +div#cgit table.ssdiff td.lineno { + color: black; + background: #eee; + text-align: right; + width: 3em; + min-width: 3em; +} + +div#cgit table.ssdiff td.hunk { + color: black; + background: #ccf; + border-top: solid 1px #aaa; + border-bottom: solid 1px #aaa; +} + +div#cgit table.ssdiff td.head { + border-top: solid 1px #aaa; + border-bottom: solid 1px #aaa; +} + +div#cgit table.ssdiff td.head div.head { + font-weight: bold; + color: black; +} + +div#cgit table.ssdiff td.foot { + border-top: solid 1px #aaa; + border-left: none; + border-right: none; + border-bottom: none; +} + +div#cgit table.ssdiff td.space { + border: none; +} + +div#cgit table.ssdiff td.space div { + min-height: 3em; +} +div#cgit span.libravatar img.onhover { + display: none; + border: 1px solid gray; + padding: 0px; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + width: 128px; + height: 128px; +} + +div#cgit span.libravatar img.inline { + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + border-radius: 3px; + width: 13px; + height: 13px; + margin-right: 0.2em; + opacity: 0.6; +} + +div#cgit span.libravatar:hover > img.onhover { + display: block; + position: absolute; + margin-left: 1.5em; + background-color: #eeeeee; + box-shadow: 2px 2px 7px rgba(100, 100, 100, 0.75); +} + +/* + Color overrides for browsers running in dark mode. + "only all and ..." forces very old browsers to ignore the media query: + https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries#improving_compatibility_with_older_browsers +*/ +:root { + color-scheme: light dark; +} +@media only all and (prefers-color-scheme: dark) { + html, + div#cgit { + color: #eee; + background: #171717; + } + div#cgit a { + color: #3af; + } + div#cgit .diffstat-header a { + color: #28d; + } + div#cgit table#header td.main a { + color: #eee; + } + div#cgit table#header td.sub { + color: #999; + } + div#cgit table.tabs { + border-bottom-color: #444; + } + div#cgit table.tabs td a { + color: #888; + } + div#cgit table.tabs td a.active { + color: #fff; + background-color: #444; + } + div#cgit div.path { + color: #eee; + background-color: #333; + } + div#cgit div.content { + border-bottom-color: #bbb; + } + div#cgit table.list tr { + background: #171717; + } + div#cgit table.list tr.logheader { + background: #171717; + } + div#cgit table.list tr:nth-child(even) { + background: #171717; + } + div#cgit table.list tr:nth-child(odd) { + background: #1f1f1f; + } + div#cgit table.list tr:hover { + background: #333; + } + div#cgit table.list tr.nohover { + background: #171717; + } + div#cgit table.list tr.nohover:hover { + background: #171717; + } + div#cgit table.list tr.nohover-highlight:hover:nth-child(even) { + background: #171717; + } + div#cgit table.list tr.nohover-highlight:hover:nth-child(odd) { + background: #1f1f1f; + } + div#cgit table.list td.commitgraph .column1 { + color: #f55; + } + div#cgit table.list td.commitgraph .column2 { + color: #5f5; + } + div#cgit table.list td.commitgraph .column3 { + color: #ff5; + } + div#cgit table.list td.commitgraph .column4 { + color: #55f; + } + div#cgit table.list td.commitgraph .column5 { + color: #f5f; + } + div#cgit table.list td.commitgraph .column6 { + color: #5ff; + } + div#cgit table.list td a { + color: #eee; + } + div#cgit table.list td a.ls-dir { + color: #28d; + } + div#cgit table.list td a:hover { + color: #3af; + } + div#cgit table#downloads { + border-color: #888; + } + div#cgit table#downloads th { + background-color: #333; + } + div#cgit div#blob { + border-color: #eee; + } + div#cgit table.blob { + border-top-color: #eee; + } + div#cgit table.blob td.hashes, + div#cgit table.blob td.lines { + color: #eee; + } + div#cgit table.blob td.linenumbers { + border-right-color: gray; + } + div#cgit table.blob td.linenumbers a, + div#cgit table.ssdiff td.lineno a { + color: gray; + } + div#cgit table.blob td.linenumbers a:hover, + div#cgit table.ssdiff td.lineno a:hover { + color: #eee; + } + div#cgit table.blame div.alt:nth-child(even) { + background: #171717; + } + div#cgit table.blame div.alt:nth-child(odd) { + background: #1f1f1f; + } + div#cgit table.bin-blob { + border-color: #eee; + } + div#cgit table.bin-blob th { + border-color: #888; + } + div#cgit table.bin-blob td { + border-left-color: #888; + } + div#cgit div.cgit-panel table { + border-color: #555; + background-color: #282828; + } + div#cgit div.notes { + border-color: #661; + background-color: #220; + } + div#cgit table.diffstat { + border-color: #555; + background-color: #282828; + } + div#cgit table.diffstat td span.modechange { + color: #c66; + } + div#cgit table.diffstat td.add a { + color: #6c6; + } + div#cgit table.diffstat td.del a { + color: #c66; + } + div#cgit table.diffstat td.upd a { + color: #3af; + } + div#cgit table.diffstat td.graph td.add { + background-color: #3a3; + } + div#cgit table.diffstat td.graph td.rem { + background-color: #a33; + } + div#cgit div.diffstat-summary { + color: #777; + } + div#cgit table.diff td div.head { + color: #eee; + } + div#cgit table.diff td div.hunk { + color: #28d; + } + div#cgit table.diff td div.add { + color: #6c6; + } + div#cgit table.diff td div.del { + color: #c66; + } + div#cgit table.list td.reposection { + color: #777; + } + div#cgit ul.pager a { + color: #888; + } + div#cgit span.age-mins { + color: #7f7; + } + div#cgit span.age-hours { + color: #7f7; + } + div#cgit span.age-days { + color: #9d9; + } + div#cgit span.age-weeks { + color: #bbb; + } + div#cgit span.age-months { + color: #888; + } + div#cgit span.age-years { + color: #666; + } + div#cgit span.insertions { + color: #7f7; + } + div#cgit span.deletions { + color: #e33; + } + div#cgit div.footer { + color: #555; + } + div#cgit div.footer a { + color: #555; + } + div#cgit a.branch-deco { + color: #fff; + background-color: #361; + border-color: #3b2; + } + div#cgit a.tag-deco { + color: #fff; + background-color: #650; + border-color: #ba3; + } + div#cgit a.tag-annotated-deco { + color: #fff; + background-color: #840; + border-color: #b96; + } + div#cgit a.remote-deco { + color: #fff; + background-color: #348; + border-color: #67c; + } + div#cgit a.deco { + color: #fff; + background-color: #922; + border-color: #d55; + } + div#cgit a.branch-deco:hover, + div#cgit table.list td a.branch-deco:hover, + div#cgit a.tag-deco:hover, + div#cgit table.list td a.tag-deco:hover, + div#cgit a.tag-annotated-deco:hover, + div#cgit table.list td a.tag-annotated-deco:hover, + div#cgit a.remote-deco:hover, + div#cgit table.list td a.remote-deco:hover, + div#cgit a.deco:hover, + div#cgit table.list td a.deco:hover { + color: #fff; + } + div#cgit table.stats { + border-color: #555; + } + div#cgit table.stats th { + background-color: #333; + border-color: #555; + } + div#cgit table.stats td { + border-color: #555; + } + div#cgit table.stats td.sum { + color: #5c7e9b; + } + div#cgit table.vgraph { + border-color: #eee; + } + div#cgit table.vgraph th { + background-color: #1f1f1f; + border-color: black; + } + div#cgit table.vgraph div.bar { + background-color: #1f1f1f; + } + div#cgit table.hgraph { + border-color: #eee; + } + div#cgit table.hgraph th { + background-color: #1f1f1f; + border-color: #eee; + } + div#cgit table.hgraph div.bar { + background-color: #1f1f1f; + } + div#cgit table.ssdiff td { + border-left-color: #555; + border-right-color: #555; + } + div#cgit table.ssdiff td.add { + color: #eee; + background: #353; + } + div#cgit table.ssdiff td.add_dark { + color: #eee; + background: #030; + } + div#cgit table.ssdiff span.add { + background: #030; + } + div#cgit table.ssdiff td.del { + color: #eee; + background: #533; + } + div#cgit table.ssdiff td.del_dark { + color: #eee; + background: #411; + } + div#cgit table.ssdiff span.del { + background: #300; + } + div#cgit table.ssdiff td.changed { + color: #eee; + background: #553; + } + div#cgit table.ssdiff td.changed_dark { + color: #eee; + background: #330; + } + div#cgit table.ssdiff td.lineno { + color: #eee; + background: #1f1f1f; + } + div#cgit table.ssdiff td.hunk { + color: #eee; + background: #0d3d64; + border-top-color: #555; + border-bottom-color: #555; + } + div#cgit table.ssdiff td.head { + border-top-color: #555; + border-bottom-color: #555; + } + div#cgit table.ssdiff td.head div.head { + color: #eee; + } + div#cgit table.ssdiff td.foot { + border-top-color: #555; + } +} +/* Style definition file generated by highlight 3.13, http://www.andre-simon.de/ */ + +/* Highlighting theme: Kwrite Editor */ + +body.hl { + background-color: #e0eaee; +} +pre.hl { + color: #000000; + background-color: #e0eaee; + font-size: 10pt; + font-family: "Courier New", monospace; +} +.hl.num { + color: #b07e00; +} +.hl.esc { + color: #ff00ff; +} +.hl.str { + color: #bf0303; +} +.hl.pps { + color: #818100; +} +.hl.slc { + color: #838183; + font-style: italic; +} +.hl.com { + color: #838183; + font-style: italic; +} +.hl.ppc { + color: #008200; +} +.hl.opt { + color: #000000; +} +.hl.ipl { + color: #0057ae; +} +.hl.lin { + color: #555555; +} +.hl.kwa { + color: #000000; + font-weight: bold; +} +.hl.kwb { + color: #0057ae; +} +.hl.kwc { + color: #000000; + font-weight: bold; +} +.hl.kwd { + color: #010181; +} + diff --git a/modules/cgit/static/favicon.png b/modules/cgit/static/favicon.png new file mode 100755 index 0000000..a9c1396 Binary files /dev/null and b/modules/cgit/static/favicon.png differ diff --git a/modules/cgit/static/logo.png b/modules/cgit/static/logo.png new file mode 100755 index 0000000..a9c1396 Binary files /dev/null and b/modules/cgit/static/logo.png differ diff --git a/modules/cinnamon/default.nix b/modules/cinnamon/default.nix new file mode 100644 index 0000000..c75cf0d --- /dev/null +++ b/modules/cinnamon/default.nix @@ -0,0 +1,48 @@ +{ pkgs, lib, ... }: +{ + services = { + ## Just in case this needs to be enabled + # cinnamon.apps.enable = true; + + gnome = { + gnome-keyring.enable = true; + }; + + xserver = { + desktopManager.cinnamon = { + enable = true; + }; + + displayManager = { + sessionCommands = '' + eval $(gnome-keyring-daemon --start --daemonize --components=secrets) + ''; + + lightdm = { + enable = true; + }; + }; + + wacom.enable = true; + + xkb = { + layout = "us, gr"; + options = "grp:alt_shift_toggle"; + }; + }; + }; + + security.pam = { + services = { + lightdm = { + enableGnomeKeyring = true; + }; + }; + }; + + # Exclude specific packages + environment.cinnamon.excludePackages = with pkgs; [ + orca + ]; + +} diff --git a/modules/client/1password/default.nix b/modules/client/1password/default.nix deleted file mode 100644 index 7d01e3d..0000000 --- a/modules/client/1password/default.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ config, pkgs, ... }: - -{ - programs = { - _1password.enable = true; - _1password-gui = { - enable = true; - polkitPolicyOwners = [ "aethrvmn" ]; - }; - }; - - environment.etc ={ - "1password/custom_allowed_browsers" = { - text = '' - firefox - librewolf - ''; - mode = "0755"; - }; - }; -} - diff --git a/modules/client/bluetooth/default.nix b/modules/client/bluetooth/default.nix deleted file mode 100644 index 2dfd66d..0000000 --- a/modules/client/bluetooth/default.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - services.blueman.enable = true; -} diff --git a/modules/client/cinnamon/default.nix b/modules/client/cinnamon/default.nix deleted file mode 100644 index b73cda5..0000000 --- a/modules/client/cinnamon/default.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ pkgs, lib, ... }: -{ - imports = [ - ../xserver - ]; - - services = { - xserver = { - - desktopManager.cinnamon = { - enable = true; - }; - - displayManager = { - sessionCommands = '' - eval $(gnome-keyring-daemon --start --daemonize --components=secrets) - ''; - - lightdm = { - enable = true; - }; - }; - }; - - ## Just in case this needs to be enabled - # cinnamon.apps.enable = true; - - gnome = { - gnome-keyring.enable = true; - # disable gNOME's "usecase?" ssh-agent - gcr-ssh-agent.enable = lib.mkForce false; - }; - }; - - security.pam = { - services = { - lightdm = { - enableGnomeKeyring = true; - }; - }; - }; - - # Exclude specific packages - environment.cinnamon.excludePackages = with pkgs; [ - orca - ]; - -} diff --git a/modules/client/default.nix b/modules/client/default.nix deleted file mode 100644 index ea3f803..0000000 --- a/modules/client/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - imports = [ - ./1password - ./bluetooth - ./cinnamon - ./flatpak - # ./labwc - ]; -} diff --git a/modules/client/flatpak/default.nix b/modules/client/flatpak/default.nix deleted file mode 100644 index e5a636f..0000000 --- a/modules/client/flatpak/default.nix +++ /dev/null @@ -1,48 +0,0 @@ -{ pkgs, lib, ...}: -{ - services.flatpak = { - enable = true; - - remotes = [ - { - name = "flathub"; - location = "https://flathub.org/repo/flathub.flatpakrepo"; - } - ]; - - packages = [ - "app.grayjay.Grayjay" - "com.github.tchx84.Flatseal" - "com.obsproject.Studio" - "fi.skyjake.Lagrange" - "media.emby.EmbyTheater" - "net.lutris.Lutris" - "org.gimp.GIMP" - "org.inkscape.Inkscape" - "org.localsend.localsend_app" - "org.musicbrainz.Picard" - "org.nickvision.money" - "org.nicotine_plus.Nicotine" - ]; - - update = { - auto = { - enable = true; - onCalendar = "weekly"; # Default value - }; - onActivation = true; - }; - - overrides = { - global = { - # Enable for both wayland and x11 - Context.sockets = [ "wayland" "x11" "!fallback-x11" ]; - - Environment = { - # Fix un-themed cursor in some Wayland apps - XCURSOR_PATH = "/run/host/user-share/icons:/run/host/share/icons"; - }; - }; - }; - }; -} diff --git a/modules/client/thunar/default.nix b/modules/client/thunar/default.nix deleted file mode 100644 index 0caaabf..0000000 --- a/modules/client/thunar/default.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ config, pkgs, ... }: -{ - services = { - gvfs.enable = true; - # TODO: Check if I need these - # udisks2.enable = true; - # devmon.enable = true; - tumbler.enable = true; - }; - - programs = { - thunar = { - enable = true; - - plugins = with pkgs.xfce; [ - thunar-archive-plugin - thunar-media-tags-plugin - thunar-volman - ]; - }; - - file-roller.enable = true; - }; -} diff --git a/modules/client/waybar/default.nix b/modules/client/waybar/default.nix deleted file mode 100644 index ec27a77..0000000 --- a/modules/client/waybar/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - programs.waybar = { - enable = true; - }; -} diff --git a/modules/client/xserver/default.nix b/modules/client/xserver/default.nix deleted file mode 100644 index 6cd0252..0000000 --- a/modules/client/xserver/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ config, pkgs, lib, ... }: - -# XServer -{ - services.xserver = { - enable = lib.mkForce true; - xkb = { - layout = "us, gr"; - options = "grp:alt_shift_toggle"; - }; - - wacom.enable = true; - }; -} diff --git a/modules/common/adguard/default.nix b/modules/common/adguard/default.nix deleted file mode 100644 index 9cb7cc2..0000000 --- a/modules/common/adguard/default.nix +++ /dev/null @@ -1,88 +0,0 @@ -{ config, lib, ... }: -{ - services = { - adguardhome = { - enable = true; - openFirewall = false; - mutableSettings = false; - - settings = { - http = { - address = "127.0.0.1:3000"; - }; - - dns = { - bind_hosts = [ "127.0.0.1" ]; - port = 53; - - upstream_dns = [ - "https://de-fra-dns-001.mullvad.net/dns-query" - "https://gb-lon-dns-001.mullvad.net/dns-query" - "https://gb-lon-dns-301.mullvad.net/dns-query" - ]; - fallback_dns = [ - "9.9.9.9" - "149.112.112.112" - ]; - bootstrap_dns = [ - "9.9.9.9" - "149.112.112.112" - ]; - }; - - filtering = { - rewrites = [ - # searxng - { - domain = "search.internal"; - answer = "127.0.0.1"; - } - # adguard - { - domain = "dns.internal"; - answer = "127.0.0.1"; - } - ]; - - protection_enabled = true; - filtering_enabled = true; - - parental_enabled = false; # Parental control-based DNS requests filtering. - - safe_search = { - enabled = false; # Enforcing "Safe search" option for search engines, when possible. - }; - }; - }; - }; - - nginx ={ - enable = true; - recommendedGzipSettings = true; - recommendedOptimisation = true; - recommendedProxySettings = true; - - virtualHosts = { - "dns.internal" = { - locations."/" = { - proxyPass = "http://127.0.0.1:3000"; - proxyWebsockets = true; - }; - }; - }; - }; - }; - - networking = { - nameservers = [ - "127.0.0.1" - ]; - - hosts = { - "127.0.0.1" = [ - "dns.internal" - "search.internal" - ]; - }; - }; -} diff --git a/modules/common/default.nix b/modules/common/default.nix deleted file mode 100644 index b2c7196..0000000 --- a/modules/common/default.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ config, pkgs, lib, ... }: -{ - imports =[ - # names are self explanatory - ./adguard - ./doas - ./fonts - ./gnupg - ./i18n - ./nh - ./pipewire - ./searx - ./ssh - ./sudo - ./users - ]; - - nix = { - settings = { - # Enable flakes - experimental-features = [ "nix-command" "flakes" ]; - - # Optimize storage - auto-optimise-store = true; - - # substituters = lib.mkForce [ ]; - # trusted-substituters = lib.mkForce [ ]; - # require-sigs = false; - }; - }; - - # Allow unfree packages - nixpkgs = { - config.allowUnfree = true; - }; - - # List packages installed in system profile. - # These should be tools in case user tools brake. - # To search, run: - # $ nix search - # or - # $ nh search - environment.systemPackages = with pkgs; [ - alacritty - git - helix - xdg-utils - ]; -} diff --git a/modules/common/doas/default.nix b/modules/common/doas/default.nix deleted file mode 100644 index bc528d1..0000000 --- a/modules/common/doas/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ - security.doas = { - enable = true; - - extraRules = [ - { - users = [ "aethrvmn" ]; - keepEnv = true; - persist = true; - } - ]; - }; -} diff --git a/modules/common/fonts/default.nix b/modules/common/fonts/default.nix deleted file mode 100644 index d8696e7..0000000 --- a/modules/common/fonts/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ config, pkgs, ... }: -{ - fonts.packages = with pkgs; [ - font-awesome - font-awesome_5 - maple-mono.NF-CN - noto-fonts - noto-fonts-cjk-sans - noto-fonts-color-emoji - ]; -} diff --git a/modules/common/gnupg/default.nix b/modules/common/gnupg/default.nix deleted file mode 100644 index fc6e537..0000000 --- a/modules/common/gnupg/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - programs.gnupg.agent = { - enable = true; - }; -} diff --git a/modules/common/i18n/default.nix b/modules/common/i18n/default.nix deleted file mode 100644 index 786332c..0000000 --- a/modules/common/i18n/default.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ config, ... }: - -# Locale generation -{ - i18n = { - defaultLocale = "en_US.UTF-8"; - - extraLocaleSettings = { - LC_ADDRESS = "el_GR.UTF-8"; - LC_IDENTIFICATION = "el_GR.UTF-8"; - LC_MEASUREMENT = "el_GR.UTF-8"; - LC_MONETARY = "el_GR.UTF-8"; - LC_NAME = "el_GR.UTF-8"; - LC_NUMERIC = "el_GR.UTF-8"; - LC_PAPER = "el_GR.UTF-8"; - LC_TELEPHONE = "el_GR.UTF-8"; - LC_TIME = "el_GR.UTF-8"; - }; - }; -} diff --git a/modules/common/nh/default.nix b/modules/common/nh/default.nix deleted file mode 100644 index a5e09ac..0000000 --- a/modules/common/nh/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ config, pkgs, ... }: -{ - programs.nh = { - enable = true; - clean.enable = true; - - flake = "/home/aethrvmn/.nix/"; - }; -} diff --git a/modules/common/pipewire/default.nix b/modules/common/pipewire/default.nix deleted file mode 100644 index 3c65b82..0000000 --- a/modules/common/pipewire/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - security.rtkit.enable = true; - - services ={ - pipewire = { - enable = true; - - alsa.enable = true; - audio.enable = true; - jack.enable = true; - pulse.enable = true; - wireplumber.enable = true; - }; - - pulseaudio.enable = false; - }; -} diff --git a/modules/common/searx/default.nix b/modules/common/searx/default.nix deleted file mode 100644 index e8b3873..0000000 --- a/modules/common/searx/default.nix +++ /dev/null @@ -1,126 +0,0 @@ -{ config, pkgs, lib, ... }: -{ - services = { - searx = { - enable = true; - package = pkgs.searxng; - - settings = { - server = { - port = 4000; - bind_address = "127.0.0.1"; - secret_key = "secret_key"; - }; - - general = { - debug = false; - instance_name = "SearXNG"; - donation_url = false; - contact_url = false; - privacypolicy_url = false; - enable_metrics = false; - autocomplete = "startpage"; - }; - - # Search engines - engines = lib.mapAttrsToList (name: value: { inherit name; } // value) { - # main boys - "brave" = { - disabled = false; - weight = 0.7; - }; - "duckduckgo" = { - disabled = false; - weight = 0.7; - }; - "ecosia" = { - disabled = false; - weight = 0.6; - }; - "mojeek" = { - disabled = true; - weight = 0.4; - }; - "qwant" = { - disabled = false; - weight = 0.4; - }; - "startpage" = { - disabled = false; - weight = 1; - }; - "wiby" = { - disabled = false; - weight = 0.4; - }; - - # - "openverse".disabled = false; - - # repos - "bitbucket".disabled = false; - "codeberg".disabled = false; - "gitea.com".disabled = false; - "github".disabled = false; - "gitlab".disabled = false; - "huggingface".disabled = false; - "huggingface datasets".disabled = false; - "huggingface spaces".disabled = false; - "ollama".disabled = false; - "sourcehut".disabled = false; - - # software wikis - "gentoo".disabled = false; - "nixos wiki".disabled = false; - "arch linux wiki".disabled = false; - "free software directory".disabled = false; - - # IT etc - "mankier".disabled = false; - "searchcode code".disabled = false; - - # translate - "mozhi".disabled = false; - "lingva".disabled = false; - "dictzone".disabled = false; - "libretranslate".disabled = false; - - # # scams/don't trusts - "bing".disabled = true; - "yahoo".disabled = true; - "google".disabled = true; - }; - - # Outgoing requests - outgoing = { - request_timeout = 15.0; - max_request_timeout = 25.0; - pool_connections = 100; - pool_maxsize = 15; - useragent_suffix = "me@aethrvmn.gr"; - retries = 5; - }; - - # Enabled plugins - enabled_plugins = [ - "Basic Calculator" - "Hash plugin" - "Tor check plugin" - "Open Access DOI rewrite" - "Hostnames plugin" - "Unit converter plugin" - "Tracker URL remover" - ]; - }; - }; - - nginx.virtualHosts = { - "search.internal" = { - locations."/" = { - proxyPass = "http://127.0.0.1:4000"; - proxyWebsockets = true; - }; - }; - }; - }; -} diff --git a/modules/common/ssh/default.nix b/modules/common/ssh/default.nix deleted file mode 100644 index 70b67e2..0000000 --- a/modules/common/ssh/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - programs.ssh = { - startAgent = true; - }; -} diff --git a/modules/common/sudo/default.nix b/modules/common/sudo/default.nix deleted file mode 100644 index 8ad7bf9..0000000 --- a/modules/common/sudo/default.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - security.sudo = { - enable = false; - }; -} diff --git a/modules/common/users/default.nix b/modules/common/users/default.nix deleted file mode 100644 index 460fb8a..0000000 --- a/modules/common/users/default.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ config, pkgs, ... }: - -# User configuration -{ - users = { - defaultUserShell = pkgs.zsh; - - users.aethrvmn = { - isNormalUser = true; - extraGroups = [ - "audio" - "networkmanager" - "video" - "wheel" - ]; - password = "gg"; - - openssh.authorizedKeys.keys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIF3R0qrWQ9omz87lt4YRCdI+QV55KxMqxU+Vz1mUM4ye me@aethrvmn.gr" - ]; - }; - }; - - programs = { - zsh.enable = true; - fish.enable = true; - }; -} diff --git a/modules/doas/default.nix b/modules/doas/default.nix new file mode 100644 index 0000000..938377c --- /dev/null +++ b/modules/doas/default.nix @@ -0,0 +1,17 @@ +{ + security = { + doas = { + enable = true; + + extraRules = [ + { + users = [ "aethrvmn" ]; + keepEnv = true; + persist = true; + } + ]; + }; + + sudo.enable = false; + }; +} diff --git a/modules/flatpak/default.nix b/modules/flatpak/default.nix new file mode 100644 index 0000000..e5a636f --- /dev/null +++ b/modules/flatpak/default.nix @@ -0,0 +1,48 @@ +{ pkgs, lib, ...}: +{ + services.flatpak = { + enable = true; + + remotes = [ + { + name = "flathub"; + location = "https://flathub.org/repo/flathub.flatpakrepo"; + } + ]; + + packages = [ + "app.grayjay.Grayjay" + "com.github.tchx84.Flatseal" + "com.obsproject.Studio" + "fi.skyjake.Lagrange" + "media.emby.EmbyTheater" + "net.lutris.Lutris" + "org.gimp.GIMP" + "org.inkscape.Inkscape" + "org.localsend.localsend_app" + "org.musicbrainz.Picard" + "org.nickvision.money" + "org.nicotine_plus.Nicotine" + ]; + + update = { + auto = { + enable = true; + onCalendar = "weekly"; # Default value + }; + onActivation = true; + }; + + overrides = { + global = { + # Enable for both wayland and x11 + Context.sockets = [ "wayland" "x11" "!fallback-x11" ]; + + Environment = { + # Fix un-themed cursor in some Wayland apps + XCURSOR_PATH = "/run/host/user-share/icons:/run/host/share/icons"; + }; + }; + }; + }; +} diff --git a/modules/fonts/default.nix b/modules/fonts/default.nix new file mode 100644 index 0000000..d8696e7 --- /dev/null +++ b/modules/fonts/default.nix @@ -0,0 +1,11 @@ +{ config, pkgs, ... }: +{ + fonts.packages = with pkgs; [ + font-awesome + font-awesome_5 + maple-mono.NF-CN + noto-fonts + noto-fonts-cjk-sans + noto-fonts-color-emoji + ]; +} diff --git a/modules/forgejo/default.nix b/modules/forgejo/default.nix new file mode 100644 index 0000000..0294279 --- /dev/null +++ b/modules/forgejo/default.nix @@ -0,0 +1,57 @@ +{ + services = { + forgejo = { + enable = true; + + dump.enable = true; + # useWizard = true; + + settings = { + DEFAULT = { + APP_NAME = "apothēke"; + RUN_MODE = "prod"; + APP_SLOGAN = "a place for storing objects."; + RUN_USER = "forgejo"; + }; + + server = { + HTTP_PORT = 3040; + DOMAIN = "forge.internal"; + ROOT_URL = "http://forge.internal/"; + SSH_DOMAIN = "forge.internal"; + SSH_PORT = 22; + DISABLE_SSH = false; + }; + + database = { + DB_TYPE = "sqlite3"; + }; + + service = { + DISABLE_REGISTRATION = false; + DEFAULT_KEEP_EMAIL_PRIVATE = true; + REQUIRE_SIGNIN_VIEW = false; + REGISTER_EMAIL_CONFIRM = false; + ENABLE_NOTIFY_MAIL = false; + ALLOW_ONLY_EXTERNAL_REGISTRATION = false; + ENABLE_CAPTCHA = false; + DEFAULT_ALLOW_CREATE_ORGANIZATION = true; + DEFAULT_ENABLE_TIMETRACKING = true; + }; + + lfs = { + enable = true; + }; + }; + }; + + nginx = { + virtualHosts."forge.internal" = { + locations."/" = { + proxyPass = "http://127.0.0.1:3040"; + proxyWebsockets = true; + }; + }; + }; + }; +} diff --git a/modules/gemini/default.nix b/modules/gemini/default.nix new file mode 100644 index 0000000..d59f65f --- /dev/null +++ b/modules/gemini/default.nix @@ -0,0 +1,57 @@ +{ config, pkgs, lib, ... }: +{ + services.agate = { + enable = true; + + hostnames = [ "aethrvmn.gr" ]; + addresses = [ "0.0.0.0:1965" ]; + language = "en"; + contentDir = "/srv/gemini"; + }; + + networking.firewall.allowedTCPPorts = [ 1965 ]; + + users = { + groups.agate = { }; + users = { + agate = { + isSystemUser = true; + description = "gemini user"; + group = "agate"; + home = "/srv/gemini"; + createHome = true; + shell = "${pkgs.git}/bin/git-shell"; + }; + }; + }; + + systemd = { + # set service + services."gemini" = { + description = "Update Gemini site from repo"; + + script = '' + if [ -d /srv/gemini/.git ]; then + ${pkgs.git}/bin/git -C /srv/gemini pull + else + ${pkgs.git}/bin/git clone https://apo.theke.ml/aethrvmn/gemini.git /srv/gemini + fi + ''; + + serviceConfig = { + Type = "oneshot"; + User = "agate"; + }; + }; + + timers."gemini" = { + description = "Hourly Gemini-site update"; + wantedBy = [ "timers.target" ]; + + timerConfig = { + OnCalendar = "hourly"; + Persistent = true; + }; + }; + }; +} diff --git a/modules/gnupg/default.nix b/modules/gnupg/default.nix new file mode 100644 index 0000000..fc6e537 --- /dev/null +++ b/modules/gnupg/default.nix @@ -0,0 +1,5 @@ +{ + programs.gnupg.agent = { + enable = true; + }; +} diff --git a/modules/grafana/default.nix b/modules/grafana/default.nix new file mode 100644 index 0000000..41905cd --- /dev/null +++ b/modules/grafana/default.nix @@ -0,0 +1,23 @@ +{ config, pkgs, ... }: +{ + services = { + grafana = { + enable = true; + settings.server = { + domain = "monitor.internal"; + http_port = 3050; + http_addr = "127.0.0.1"; + }; + }; + + nginx = { + virtualHosts."monitor.internal" = { + locations."/" = { + proxyPass = "http://127.0.0.1:3050"; + proxyWebsockets = true; + }; + }; + }; + }; +} + diff --git a/modules/i18n/default.nix b/modules/i18n/default.nix new file mode 100644 index 0000000..786332c --- /dev/null +++ b/modules/i18n/default.nix @@ -0,0 +1,20 @@ +{ config, ... }: + +# Locale generation +{ + i18n = { + defaultLocale = "en_US.UTF-8"; + + extraLocaleSettings = { + LC_ADDRESS = "el_GR.UTF-8"; + LC_IDENTIFICATION = "el_GR.UTF-8"; + LC_MEASUREMENT = "el_GR.UTF-8"; + LC_MONETARY = "el_GR.UTF-8"; + LC_NAME = "el_GR.UTF-8"; + LC_NUMERIC = "el_GR.UTF-8"; + LC_PAPER = "el_GR.UTF-8"; + LC_TELEPHONE = "el_GR.UTF-8"; + LC_TIME = "el_GR.UTF-8"; + }; + }; +} diff --git a/modules/immich/default.nix b/modules/immich/default.nix new file mode 100644 index 0000000..fac75f9 --- /dev/null +++ b/modules/immich/default.nix @@ -0,0 +1,28 @@ +{ config, lib, ... }: +{ + services = { + # Immich setup + immich = { + enable = true; + openFirewall = false; + + host = "127.0.0.1"; + port = 3010; + }; + + nginx = { + virtualHosts."photos.internal" = { + locations."/" = { + proxyPass = "http://127.0.0.1:3010"; + proxyWebsockets = true; + }; + }; + }; + }; + + hardware.graphics.enable = lib.mkForce true; + + users.users.immich = { + extraGroups = [ "video" "render" ]; + }; +} diff --git a/modules/intel/default.nix b/modules/intel/default.nix new file mode 100644 index 0000000..f500dde --- /dev/null +++ b/modules/intel/default.nix @@ -0,0 +1,8 @@ +{ config, pkgs, lib, ... } +{ + hardware = { + graphics = { + enable = lib.mkForce = true; + }; + }; +} diff --git a/modules/jellyfin/default.nix b/modules/jellyfin/default.nix new file mode 100644 index 0000000..424b4d8 --- /dev/null +++ b/modules/jellyfin/default.nix @@ -0,0 +1,27 @@ +{ config, pkgs, lib, ...}: +{ + environment.systemPackages = with pkgs; [ + jellyfin + jellyfin-web + jellyfin-ffmpeg + logrotate + ]; + + services = { + jellyfin = { + enable = true; + openFirewall = false; + }; + + logrotate.enable = true; + + nginx = { + virtualHosts."media.internal" = { + locations."/" = { + proxyPass = "http://127.0.0.1:8096"; + proxyWebsockets = true; + }; + }; + }; + }; +} diff --git a/modules/monero/default.nix b/modules/monero/default.nix new file mode 100644 index 0000000..d8631ef --- /dev/null +++ b/modules/monero/default.nix @@ -0,0 +1,64 @@ +{ config, pkgs, ... }: +{ + services = { + monero = { + enable = true; + dataDir = "/var/lib/monero"; + # prune option exists in unstable/25.11+ + # prune = false; + + rpc = { + address = "127.0.0.1"; + port = 18081; + }; + + extraConfig = '' + zmq-pub=tcp://127.0.0.1:18083 + ''; + }; + + xmrig = { + enable = true; + + settings = { + autosave = false; + cpu = { + rx = { + enabled = true; + threads = 12; + }; + }; + + pools = [ + { + url = "127.0.0.1:3333"; + user = "4BD1gWVaMxdTqVnQdFW6m4j9wBj8UkoBtXuPdRqdoMypjQAzvvXwTZ8AvkeUbKhspdCJazj3bYyS855cpzj3ZG1FB9DNqqF"; + keepalive = true; + tls = false; + } + ]; + }; + }; + }; + + systemd.services.p2pool = { + description = "P2Pool for XMR"; + wantedBy = [ "multi-user.target" ]; + after = [ "network-online.target" "monero.service" ]; + wants = [ "network-online.target" "monero.service" ]; + + serviceConfig = { + ExecStart = '' + ${pkgs.p2pool}/bin/p2pool \ + --mini \ + --host 127.0.0.1 \ + --rpc-port 18081 \ + --wallet 4BD1gWVaMxdTqVnQdFW6m4j9wBj8UkoBtXuPdRqdoMypjQAzvvXwTZ8AvkeUbKhspdCJazj3bYyS855cpzj3ZG1FB9DNqqF \ + --stratum 127.0.0.1:3333 \ + --p2p 127.0.0.1:37889 \ + ''; + Restart = "always"; + RestartSec = "5s"; + }; + }; +} diff --git a/modules/nginx/default.nix b/modules/nginx/default.nix new file mode 100644 index 0000000..151a934 --- /dev/null +++ b/modules/nginx/default.nix @@ -0,0 +1,40 @@ +{ + services = { + nginx = { + enable = true; + recommendedGzipSettings = true; + recommendedOptimisation = true; + recommendedProxySettings = true; + }; + + sshguard.enable = true; + + openssh = { + enable = false; + settings = { + PermitRootLogin = false; + PasswordAuthentication = false; + AllowTcpForwarding = false; + X11Forwarding = false; + }; + }; + }; + + networking = { + firewall.allowedTCPPorts = [ 80 ]; + + hosts = { + "127.0.0.1" = [ + "library.internal" + "media.internal" + "photos.internal" + "chat.internal" + "ollama.internal" + "code.internal" + "forge.internal" + "search.internal" + "monitor.internal" + ]; + }; + }; +} diff --git a/modules/nh/default.nix b/modules/nh/default.nix new file mode 100644 index 0000000..a5e09ac --- /dev/null +++ b/modules/nh/default.nix @@ -0,0 +1,9 @@ +{ config, pkgs, ... }: +{ + programs.nh = { + enable = true; + clean.enable = true; + + flake = "/home/aethrvmn/.nix/"; + }; +} diff --git a/modules/nvidia/default.nix b/modules/nvidia/default.nix new file mode 100644 index 0000000..77678c1 --- /dev/null +++ b/modules/nvidia/default.nix @@ -0,0 +1,56 @@ +{ config, pkgs, lib, ... }: +{ + environment.systemPackages = with pkgs; [ + linuxPackages.nvidia_x11 + cudaPackages.cudnn + cudaPackages.cudatoolkit + ]; + + hardware = { + graphics = { + enable = lib.mkForce true; + }; + + nvidia = { + open = true; + prime = { + sync.enable = true; + intelBusId = "PCI:0:2:0"; + nvidiaBusId = "PCI:2:0:0"; + }; + }; + }; + + nix = { + settings = { + substituters = [ + # "https://cache.nixos.org/" # set by default + "https://cache.nixos-cuda.org" + ]; + + trusted-public-keys = [ + # "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" # set by default + "cache.nixos-cuda.org:74DUi4Ye579gUqzH4ziL9IyiJBlDpMRn9MBN8oNan9M=" + ]; + }; + }; + + nixpkgs.config = { + allowUnfree = lib.mkForce true; + cudaSupport = true; + cudaForwardCompat = true; + }; + + services = { + ollama = { + acceleration = "cuda"; + }; + + xserver = { + enable = true; + videoDrivers =[ + "nvidia" + ]; + }; + }; +} diff --git a/modules/ollama/default.nix b/modules/ollama/default.nix new file mode 100644 index 0000000..9f966af --- /dev/null +++ b/modules/ollama/default.nix @@ -0,0 +1,21 @@ +{ config, pkgs, lib, ... }: +{ + services = { + ollama = { + enable = true; + loadModels = [ + "gemma3:12b" + "qwen3-coder:30b" + ]; + }; + + nginx.virtualHosts = { + "ollama.internal" = { + locations."/" = { + proxyPass = "http://127.0.0.1:11434"; + proxyWebsockets = true; + }; + }; + }; + }; +} diff --git a/modules/open-webui/default.nix b/modules/open-webui/default.nix new file mode 100644 index 0000000..b8c0938 --- /dev/null +++ b/modules/open-webui/default.nix @@ -0,0 +1,24 @@ +{ + services = { + open-webui = { + enable = false; + port = 3030; + environment = { + ANONYMIZED_TELEMETRY = "False"; + DO_NOT_TRACK = "True"; + SCARF_NO_ANALYTICS = "True"; + WEBUI_AUTH = "False"; + OLLAMA_API_BASE_URL = "http://localhost:11434"; + }; + }; + + nginx.virtualHosts = { + "chat.internal" = { + locations."/" = { + proxyPass = "http://127.0.0.1:3030"; + proxyWebsockets = true; + }; + }; + }; + }; +} diff --git a/modules/pipewire/default.nix b/modules/pipewire/default.nix new file mode 100644 index 0000000..3c65b82 --- /dev/null +++ b/modules/pipewire/default.nix @@ -0,0 +1,17 @@ +{ + security.rtkit.enable = true; + + services ={ + pipewire = { + enable = true; + + alsa.enable = true; + audio.enable = true; + jack.enable = true; + pulse.enable = true; + wireplumber.enable = true; + }; + + pulseaudio.enable = false; + }; +} diff --git a/modules/searx/default.nix b/modules/searx/default.nix new file mode 100644 index 0000000..e8b3873 --- /dev/null +++ b/modules/searx/default.nix @@ -0,0 +1,126 @@ +{ config, pkgs, lib, ... }: +{ + services = { + searx = { + enable = true; + package = pkgs.searxng; + + settings = { + server = { + port = 4000; + bind_address = "127.0.0.1"; + secret_key = "secret_key"; + }; + + general = { + debug = false; + instance_name = "SearXNG"; + donation_url = false; + contact_url = false; + privacypolicy_url = false; + enable_metrics = false; + autocomplete = "startpage"; + }; + + # Search engines + engines = lib.mapAttrsToList (name: value: { inherit name; } // value) { + # main boys + "brave" = { + disabled = false; + weight = 0.7; + }; + "duckduckgo" = { + disabled = false; + weight = 0.7; + }; + "ecosia" = { + disabled = false; + weight = 0.6; + }; + "mojeek" = { + disabled = true; + weight = 0.4; + }; + "qwant" = { + disabled = false; + weight = 0.4; + }; + "startpage" = { + disabled = false; + weight = 1; + }; + "wiby" = { + disabled = false; + weight = 0.4; + }; + + # + "openverse".disabled = false; + + # repos + "bitbucket".disabled = false; + "codeberg".disabled = false; + "gitea.com".disabled = false; + "github".disabled = false; + "gitlab".disabled = false; + "huggingface".disabled = false; + "huggingface datasets".disabled = false; + "huggingface spaces".disabled = false; + "ollama".disabled = false; + "sourcehut".disabled = false; + + # software wikis + "gentoo".disabled = false; + "nixos wiki".disabled = false; + "arch linux wiki".disabled = false; + "free software directory".disabled = false; + + # IT etc + "mankier".disabled = false; + "searchcode code".disabled = false; + + # translate + "mozhi".disabled = false; + "lingva".disabled = false; + "dictzone".disabled = false; + "libretranslate".disabled = false; + + # # scams/don't trusts + "bing".disabled = true; + "yahoo".disabled = true; + "google".disabled = true; + }; + + # Outgoing requests + outgoing = { + request_timeout = 15.0; + max_request_timeout = 25.0; + pool_connections = 100; + pool_maxsize = 15; + useragent_suffix = "me@aethrvmn.gr"; + retries = 5; + }; + + # Enabled plugins + enabled_plugins = [ + "Basic Calculator" + "Hash plugin" + "Tor check plugin" + "Open Access DOI rewrite" + "Hostnames plugin" + "Unit converter plugin" + "Tracker URL remover" + ]; + }; + }; + + nginx.virtualHosts = { + "search.internal" = { + locations."/" = { + proxyPass = "http://127.0.0.1:4000"; + proxyWebsockets = true; + }; + }; + }; + }; +} diff --git a/modules/server/calibre/default.nix b/modules/server/calibre/default.nix deleted file mode 100644 index d177ac1..0000000 --- a/modules/server/calibre/default.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ config, pkgs, ... }: -let - libDir = "/var/lib/calibre-web/library"; -in { - services = { - calibre-web = { - enable = true; - - listen = { - ip = "127.0.0.1"; - port = 3020; - }; - - options = { - calibreLibrary = libDir; - enableBookUploading = true; - }; - }; - - nginx = { - virtualHosts."library.internal" = { - locations."/" = { - proxyPass = "http://127.0.0.1:3020"; - proxyWebsockets = true; - }; - }; - }; - }; - - systemd.services.calibre-web = { - preStart = '' - if [ ! -f "${libDir}/metadata.db" ]; then - mkdir -p "${libDir}" - ${pkgs.calibre}/bin/calibredb add --empty \ - --with-library "${libDir}" - fi - ''; - }; -} diff --git a/modules/server/cgit/default.nix b/modules/server/cgit/default.nix deleted file mode 100644 index 08784fe..0000000 --- a/modules/server/cgit/default.nix +++ /dev/null @@ -1,76 +0,0 @@ -{ config, pkgs, lib, ... }: -let - cgitWithAssets = pkgs.cgit.overrideAttrs (old: { - pname = "cgit-with-assets"; - - postInstall = (old.postInstall or "") + '' - # overwrite the stock files that the module aliases - install -Dm444 ${./static/cgit.css} $out/cgit/cgit.css - install -Dm444 ${./static/logo.png} $out/cgit/cgit.png # keep the name! - install -Dm444 ${./static/favicon.png} $out/cgit/favicon.ico - ''; - }); -in { - services = { - cgit."code" = { - enable = true; - scanPath = "/srv/git"; - package = cgitWithAssets; - - settings = { - cache-size = 0; - cache-scanrc-ttl = 0; - enable-log-filecount = 1; - enable-log-linecount = 1; - enable-git-config = 1; - - localtime = 1; - - noplainemail = 1; - - root-title = "code.aethrvmn.gr"; - root-desc = "αpothēke of aethrvmn"; - clone-url = "https://code.aethrvmn.gr/$CGIT_REPO_URL"; - - logo-link = "https://aethrvmn.gr/"; - - about-filter = "${pkgs.cgit}/lib/cgit/filters/about-formatting.sh"; - source-filter = "${pkgs.cgit}/lib/cgit/filters/syntax-highlighting.py"; - }; - - nginx.virtualHost = "code.internal"; - }; - }; - - users = { - groups.git = { }; - - users = { - git = { - isSystemUser = true; - description = "aethrvmn"; - group = "git"; - home = "/srv/git"; - homeMode = "0755"; - createHome = true; - shell = "${pkgs.git}/bin/git-shell"; - - openssh.authorizedKeys.keys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFTRmMBlTFJbOWQBLI9XS2HMdUSlsAcaQ6vWjLpfweEo aethrvmn@apotheke.earth" - ]; - }; - - cgit = { - isSystemUser = true; - extraGroups = [ "git" ]; - }; - }; - }; - - systemd = { - tmpfiles.rules = [ - # type path mode uid gid age target - "L /srv/git/static - git git - /home/aethrvmn/.nix/modules/server/cgit/static" - ]; - }; -} diff --git a/modules/server/cgit/static/cgit.css b/modules/server/cgit/static/cgit.css deleted file mode 100644 index d2ee006..0000000 --- a/modules/server/cgit/static/cgit.css +++ /dev/null @@ -1,1346 +0,0 @@ -@import url(source-code-pro/source-code-pro.css); - -div#cgit { - padding: 0em; - margin: 0em; - font-family: sans-serif; - font-size: 10pt; - color: #333; - background: white; - padding: 4px; -} - -div#cgit a { - color: blue; - text-decoration: none; -} - -div#cgit a:hover { - text-decoration: underline; -} - -div#cgit table { - border-collapse: collapse; -} - -div#cgit table#header { - width: 100%; - margin-bottom: 1em; -} - -div#cgit table#header td.logo { - width: 96px; - vertical-align: top; - - img { - width: 96px; - } -} - -div#cgit table#header td.main { - font-size: 250%; - padding-left: 10px; - white-space: nowrap; -} - -div#cgit table#header td.main a { - color: #000; -} - -div#cgit table#header td.form { - text-align: right; - vertical-align: bottom; - padding-right: 1em; - padding-bottom: 2px; - white-space: nowrap; -} - -div#cgit table#header td.form form, -div#cgit table#header td.form input, -div#cgit table#header td.form select { - font-size: 90%; -} - -div#cgit table#header td.sub { - color: #777; - border-top: solid 1px #ccc; - padding-left: 10px; -} - -div#cgit table.tabs { - border-bottom: solid 3px #ccc; - border-collapse: collapse; - margin-top: 2em; - margin-bottom: 0px; - width: 100%; -} - -div#cgit table.tabs td { - padding: 0px 1em; - vertical-align: bottom; -} - -div#cgit table.tabs td a { - padding: 2px 0.75em; - color: #777; - font-size: 110%; -} - -div#cgit table.tabs td a.active { - color: #000; - background-color: #ccc; -} - -div#cgit table.tabs a[href^="http://"]:after, div#cgit table.tabs a[href^="https://"]:after -{ - content: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAQAAAAnOwc2AAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfgAhcJDQY+gm2TAAAAHWlUWHRDb21tZW50AAAAAABDcmVhdGVkIHdpdGggR0lNUGQuZQcAAABbSURBVAhbY2BABs4MU4CwhYHBh2Erww4wrGFQZHjI8B8IgUIscJWyDHcggltQhI4zGDCcRwhChPggHIggP1QoAVmQkSETrGoHsiAEsACtBYN0oDAMbgU6EBcAAL2eHUt4XUU4AAAAAElFTkSuQmCC); - opacity: 0.5; - margin: 0 0 0 5px; -} - -div#cgit table.tabs td.form { - text-align: right; -} - -div#cgit table.tabs td.form form { - padding-bottom: 2px; - font-size: 90%; - white-space: nowrap; -} - -div#cgit table.tabs td.form input, -div#cgit table.tabs td.form select { - font-size: 90%; -} - -div#cgit div.path { - margin: 0px; - padding: 5px 2em 2px 2em; - color: #000; - background-color: #eee; -} - -div#cgit div.content { - margin: 0px; - padding: 2em; - border-bottom: solid 3px #ccc; -} - -div#cgit table.list { - width: 100%; - border: none; - border-collapse: collapse; -} - -div#cgit table.list tr { - background: white; -} - -div#cgit table.list tr.logheader { - background: #eee; -} - -div#cgit table.list tr:nth-child(even) { - background: #f7f7f7; -} - -div#cgit table.list tr:nth-child(odd) { - background: white; -} - -div#cgit table.list tr:hover { - background: #eee; -} - -div#cgit table.list tr.nohover { - background: white; -} - -div#cgit table.list tr.nohover:hover { - background: white; -} - -div#cgit table.list tr.nohover-highlight:hover:nth-child(even) { - background: #f7f7f7; -} - -div#cgit table.list tr.nohover-highlight:hover:nth-child(odd) { - background: white; -} - -div#cgit table.list th { - font-weight: bold; - /* color: #888; - border-top: dashed 1px #888; - border-bottom: dashed 1px #888; - */ - padding: 0.1em 0.5em 0.05em 0.5em; - vertical-align: baseline; -} - -div#cgit table.list td { - border: none; - padding: 0.1em 0.5em 0.1em 0.5em; -} - -div#cgit table.list td.commitgraph { - font-family: "Source Code Pro", "Courier New", monospace; - white-space: pre; -} -div#cgit pre { - font-family: "Source Code Pro", "Courier New", monospace; -} - -div#cgit table.list td.commitgraph .column1 { - color: #a00; -} - -div#cgit table.list td.commitgraph .column2 { - color: #0a0; -} - -div#cgit table.list td.commitgraph .column3 { - color: #aa0; -} - -div#cgit table.list td.commitgraph .column4 { - color: #00a; -} - -div#cgit table.list td.commitgraph .column5 { - color: #a0a; -} - -div#cgit table.list td.commitgraph .column6 { - color: #0aa; -} - -div#cgit table.list td.logsubject { - font-family: "Source Code Pro", "Courier New", monospace; - font-weight: bold; -} - -div#cgit table.list td.logmsg { - font-family: "Source Code Pro", "Courier New", monospace; - white-space: pre; - padding: 0 0.5em; -} - -div#cgit table.list td a { - color: black; -} - -div#cgit table.list td a.ls-dir { - font-weight: bold; - color: #00f; -} - -div#cgit table.list td a:hover { - color: #00f; -} - -div#cgit img { - border: none; -} - -div#cgit input#switch-btn { - margin: 2px 0px 0px 0px; -} - -div#cgit td#sidebar input.txt { - width: 100%; - margin: 2px 0px 0px 0px; -} - -div#cgit table#grid { - margin: 0px; -} - -div#cgit td#content { - vertical-align: top; - padding: 1em 2em 1em 1em; - border: none; -} - -div#cgit div#summary { - vertical-align: top; - margin-bottom: 1em; -} - -div#cgit table#downloads { - float: right; - border-collapse: collapse; - border: solid 1px #777; - margin-left: 0.5em; - margin-bottom: 0.5em; -} - -div#cgit table#downloads th { - background-color: #ccc; -} - -div#cgit div#blob { - border: solid 1px black; -} - -div#cgit div.error { - color: red; - font-weight: bold; - margin: 1em 2em; -} - -div#cgit a.ls-blob, -div#cgit a.ls-dir, -div#cgit .ls-mod { - font-family: "Source Code Pro", "Courier New", monospace; -} - -div#cgit td.ls-size { - text-align: right; - font-family: "Source Code Pro", "Courier New", monospace; - width: 10em; -} - -div#cgit td.ls-mode { - font-family: "Source Code Pro", "Courier New", monospace; - width: 10em; -} - -div#cgit table.blob { - margin-top: 0.5em; - border-top: solid 1px black; -} - -div#cgit table.blob td.hashes, -div#cgit table.blob td.lines { - margin: 0; - padding: 0 0 0 0.5em; - vertical-align: top; - color: black; -} - -div#cgit table.blob td.linenumbers { - margin: 0; - padding: 0 0.5em 0 0.5em; - vertical-align: top; - text-align: right; - border-right: 1px solid gray; -} - -div#cgit table.blob pre { - padding: 0; - margin: 0; -} - -div#cgit table.blob td.linenumbers a, -div#cgit table.ssdiff td.lineno a { - color: gray; - text-align: right; - text-decoration: none; -} - -div#cgit table.blob td.linenumbers a:hover, -div#cgit table.ssdiff td.lineno a:hover { - color: black; -} - -div#cgit table.blame td.hashes, -div#cgit table.blame td.lines, -div#cgit table.blame td.linenumbers { - padding: 0; -} - -div#cgit table.blame td.hashes div.alt, -div#cgit table.blame td.lines div.alt { - padding: 0 0.5em 0 0.5em; -} - -div#cgit table.blame td.linenumbers div.alt { - padding: 0 0.5em 0 0; -} - -div#cgit table.blame div.alt:nth-child(even) { - background: #eee; -} - -div#cgit table.blame div.alt:nth-child(odd) { - background: white; -} - -div#cgit table.blame td.lines > div { - position: relative; -} - -div#cgit table.blame td.lines > div > pre { - padding: 0 0 0 0.5em; - position: absolute; - top: 0; -} - -div#cgit table.blame .oid { - font-size: 100%; -} - -div#cgit table.bin-blob { - margin-top: 0.5em; - border: solid 1px black; -} - -div#cgit table.bin-blob th { - font-family: "Source Code Pro", "Courier New", monospace; - white-space: pre; - border: solid 1px #777; - padding: 0.5em 1em; -} - -div#cgit table.bin-blob td { - font-family: "Source Code Pro", "Courier New", monospace; - white-space: pre; - border-left: solid 1px #777; - padding: 0em 1em; -} - -div#cgit table.nowrap td { - white-space: nowrap; -} - -div#cgit table.commit-info { - border-collapse: collapse; - margin-top: 1.5em; -} - -div#cgit div.cgit-panel { - float: right; - margin-top: 1.5em; -} - -div#cgit div.cgit-panel table { - border-collapse: collapse; - border: solid 1px #aaa; - background-color: #eee; -} - -div#cgit div.cgit-panel th { - text-align: center; -} - -div#cgit div.cgit-panel td { - padding: 0.25em 0.5em; -} - -div#cgit div.cgit-panel td.label { - padding-right: 0.5em; -} - -div#cgit div.cgit-panel td.ctrl { - padding-left: 0.5em; -} - -div#cgit table.commit-info th { - text-align: left; - font-weight: normal; - padding: 0.1em 1em 0.1em 0.1em; - vertical-align: top; -} - -div#cgit table.commit-info td { - font-weight: normal; - padding: 0.1em 1em 0.1em 0.1em; -} - -div#cgit div.commit-subject { - font-weight: bold; - font-size: 125%; - margin: 1.5em 0em 0.5em 0em; - padding: 0em; -} - -div#cgit div.commit-msg { - white-space: pre; - font-family: "Source Code Pro", "Courier New", monospace; -} - -div#cgit div.notes-header { - font-weight: bold; - padding-top: 1.5em; -} - -div#cgit div.notes { - white-space: pre; - font-family: "Source Code Pro", "Courier New", monospace; - border: solid 1px #ee9; - background-color: #ffd; - padding: 0.3em 2em 0.3em 1em; - float: left; -} - -div#cgit div.notes-footer { - clear: left; -} - -div#cgit div.diffstat-header { - font-weight: bold; - padding-top: 1.5em; -} - -div#cgit table.diffstat { - border-collapse: collapse; - border: solid 1px #aaa; - background-color: #eee; -} - -div#cgit table.diffstat th { - font-weight: normal; - text-align: left; - text-decoration: underline; - padding: 0.1em 1em 0.1em 0.1em; - font-size: 100%; -} - -div#cgit table.diffstat td { - padding: 0.2em 0.2em 0.1em 0.1em; - font-size: 100%; - border: none; -} - -div#cgit table.diffstat td.mode { - white-space: nowrap; -} - -div#cgit table.diffstat td span.modechange { - padding-left: 1em; - color: red; -} - -div#cgit table.diffstat td.add a { - color: green; -} - -div#cgit table.diffstat td.del a { - color: red; -} - -div#cgit table.diffstat td.upd a { - color: blue; -} - -div#cgit table.diffstat td.graph { - width: 500px; - vertical-align: middle; -} - -div#cgit table.diffstat td.graph table { - border: none; -} - -div#cgit table.diffstat td.graph td { - padding: 0px; - border: 0px; - height: 7pt; -} - -div#cgit table.diffstat td.graph td.add { - background-color: #5c5; -} - -div#cgit table.diffstat td.graph td.rem { - background-color: #c55; -} - -div#cgit div.diffstat-summary { - color: #888; - padding-top: 0.5em; -} - -div#cgit table.diff { - width: 100%; -} - -div#cgit table.diff td { - font-family: "Source Code Pro", "Courier New", monospace; - white-space: pre; -} - -div#cgit table.diff td div.head { - font-weight: bold; - margin-top: 1em; - color: black; -} - -div#cgit table.diff td div.hunk { - color: #009; -} - -div#cgit table.diff td div.add { - color: green; -} - -div#cgit table.diff td div.del { - color: red; -} - -div#cgit .oid { - font-family: "Source Code Pro", "Courier New", monospace; - font-size: 90%; -} - -div#cgit .left { - text-align: left; -} - -div#cgit .right { - text-align: right; -} - -div#cgit table.list td.reposection { - font-style: italic; - color: #888; -} - -div#cgit a.button { - font-size: 80%; - padding: 0em 0.5em; -} - -div#cgit a.primary { - font-size: 100%; -} - -div#cgit a.secondary { - font-size: 90%; -} - -div#cgit td.toplevel-repo { -} - -div#cgit table.list td.sublevel-repo { - padding-left: 1.5em; -} - -div#cgit ul.pager { - list-style-type: none; - text-align: center; - margin: 1em 0em 0em 0em; - padding: 0; -} - -div#cgit ul.pager li { - display: inline-block; - margin: 0.25em 0.5em; -} - -div#cgit ul.pager a { - color: #777; -} - -div#cgit ul.pager .current { - font-weight: bold; -} - -div#cgit span.age-mins { - font-weight: bold; - color: #080; -} - -div#cgit span.age-hours { - color: #080; -} - -div#cgit span.age-days { - color: #040; -} - -div#cgit span.age-weeks { - color: #444; -} - -div#cgit span.age-months { - color: #888; -} - -div#cgit span.age-years { - color: #bbb; -} - -div#cgit span.insertions { - color: #080; -} - -div#cgit span.deletions { - color: #800; -} - -div#cgit div.footer { - margin-top: 0.5em; - text-align: center; - font-size: 80%; - color: #ccc; -} - -div#cgit div.footer a { - color: #ccc; - text-decoration: none; -} - -div#cgit div.footer a:hover { - text-decoration: underline; -} - -div#cgit a.branch-deco { - color: #000; - margin: 0px 0.5em; - padding: 0px 0.25em; - background-color: #88ff88; - border: solid 1px #007700; -} - -div#cgit a.tag-deco { - color: #000; - margin: 0px 0.5em; - padding: 0px 0.25em; - background-color: #ffff88; - border: solid 1px #777700; -} - -div#cgit a.tag-annotated-deco { - color: #000; - margin: 0px 0.5em; - padding: 0px 0.25em; - background-color: #ffcc88; - border: solid 1px #777700; -} - -div#cgit a.remote-deco { - color: #000; - margin: 0px 0.5em; - padding: 0px 0.25em; - background-color: #ccccff; - border: solid 1px #000077; -} - -div#cgit a.deco { - color: #000; - margin: 0px 0.5em; - padding: 0px 0.25em; - background-color: #ff8888; - border: solid 1px #770000; -} - -div#cgit div.commit-subject a.branch-deco, -div#cgit div.commit-subject a.tag-deco, -div#cgit div.commit-subject a.tag-annotated-deco, -div#cgit div.commit-subject a.remote-deco, -div#cgit div.commit-subject a.deco { - margin-left: 1em; - font-size: 75%; -} - -div#cgit table.stats { - border: solid 1px black; - border-collapse: collapse; -} - -div#cgit table.stats th { - text-align: left; - padding: 1px 0.5em; - background-color: #eee; - border: solid 1px black; -} - -div#cgit table.stats td { - text-align: right; - padding: 1px 0.5em; - border: solid 1px black; -} - -div#cgit table.stats td.total { - font-weight: bold; - text-align: left; -} - -div#cgit table.stats td.sum { - color: #c00; - font-weight: bold; - /* background-color: #eee; */ -} - -div#cgit table.stats td.left { - text-align: left; -} - -div#cgit table.vgraph { - border-collapse: separate; - border: solid 1px black; - height: 200px; -} - -div#cgit table.vgraph th { - background-color: #eee; - font-weight: bold; - border: solid 1px white; - padding: 1px 0.5em; -} - -div#cgit table.vgraph td { - vertical-align: bottom; - padding: 0px 10px; -} - -div#cgit table.vgraph div.bar { - background-color: #eee; -} - -div#cgit table.hgraph { - border: solid 1px black; - width: 800px; -} - -div#cgit table.hgraph th { - background-color: #eee; - font-weight: bold; - border: solid 1px black; - padding: 1px 0.5em; -} - -div#cgit table.hgraph td { - vertical-align: middle; - padding: 2px 2px; -} - -div#cgit table.hgraph div.bar { - background-color: #eee; - height: 1em; -} - -div#cgit table.ssdiff { - width: 100%; -} - -div#cgit table.ssdiff td { - font-size: 75%; - font-family: "Source Code Pro", "Courier New", monospace; - white-space: pre; - padding: 1px 4px 1px 4px; - border-left: solid 1px #aaa; - border-right: solid 1px #aaa; -} - -div#cgit table.ssdiff td.add { - color: black; - background: #cfc; - min-width: 50%; -} - -div#cgit table.ssdiff td.add_dark { - color: black; - background: #aca; - min-width: 50%; -} - -div#cgit table.ssdiff span.add { - background: #cfc; - font-weight: bold; -} - -div#cgit table.ssdiff td.del { - color: black; - background: #fcc; - min-width: 50%; -} - -div#cgit table.ssdiff td.del_dark { - color: black; - background: #caa; - min-width: 50%; -} - -div#cgit table.ssdiff span.del { - background: #fcc; - font-weight: bold; -} - -div#cgit table.ssdiff td.changed { - color: black; - background: #ffc; - min-width: 50%; -} - -div#cgit table.ssdiff td.changed_dark { - color: black; - background: #cca; - min-width: 50%; -} - -div#cgit table.ssdiff td.lineno { - color: black; - background: #eee; - text-align: right; - width: 3em; - min-width: 3em; -} - -div#cgit table.ssdiff td.hunk { - color: black; - background: #ccf; - border-top: solid 1px #aaa; - border-bottom: solid 1px #aaa; -} - -div#cgit table.ssdiff td.head { - border-top: solid 1px #aaa; - border-bottom: solid 1px #aaa; -} - -div#cgit table.ssdiff td.head div.head { - font-weight: bold; - color: black; -} - -div#cgit table.ssdiff td.foot { - border-top: solid 1px #aaa; - border-left: none; - border-right: none; - border-bottom: none; -} - -div#cgit table.ssdiff td.space { - border: none; -} - -div#cgit table.ssdiff td.space div { - min-height: 3em; -} -div#cgit span.libravatar img.onhover { - display: none; - border: 1px solid gray; - padding: 0px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - width: 128px; - height: 128px; -} - -div#cgit span.libravatar img.inline { - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - width: 13px; - height: 13px; - margin-right: 0.2em; - opacity: 0.6; -} - -div#cgit span.libravatar:hover > img.onhover { - display: block; - position: absolute; - margin-left: 1.5em; - background-color: #eeeeee; - box-shadow: 2px 2px 7px rgba(100, 100, 100, 0.75); -} - -/* - Color overrides for browsers running in dark mode. - "only all and ..." forces very old browsers to ignore the media query: - https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries#improving_compatibility_with_older_browsers -*/ -:root { - color-scheme: light dark; -} -@media only all and (prefers-color-scheme: dark) { - html, - div#cgit { - color: #eee; - background: #171717; - } - div#cgit a { - color: #3af; - } - div#cgit .diffstat-header a { - color: #28d; - } - div#cgit table#header td.main a { - color: #eee; - } - div#cgit table#header td.sub { - color: #999; - } - div#cgit table.tabs { - border-bottom-color: #444; - } - div#cgit table.tabs td a { - color: #888; - } - div#cgit table.tabs td a.active { - color: #fff; - background-color: #444; - } - div#cgit div.path { - color: #eee; - background-color: #333; - } - div#cgit div.content { - border-bottom-color: #bbb; - } - div#cgit table.list tr { - background: #171717; - } - div#cgit table.list tr.logheader { - background: #171717; - } - div#cgit table.list tr:nth-child(even) { - background: #171717; - } - div#cgit table.list tr:nth-child(odd) { - background: #1f1f1f; - } - div#cgit table.list tr:hover { - background: #333; - } - div#cgit table.list tr.nohover { - background: #171717; - } - div#cgit table.list tr.nohover:hover { - background: #171717; - } - div#cgit table.list tr.nohover-highlight:hover:nth-child(even) { - background: #171717; - } - div#cgit table.list tr.nohover-highlight:hover:nth-child(odd) { - background: #1f1f1f; - } - div#cgit table.list td.commitgraph .column1 { - color: #f55; - } - div#cgit table.list td.commitgraph .column2 { - color: #5f5; - } - div#cgit table.list td.commitgraph .column3 { - color: #ff5; - } - div#cgit table.list td.commitgraph .column4 { - color: #55f; - } - div#cgit table.list td.commitgraph .column5 { - color: #f5f; - } - div#cgit table.list td.commitgraph .column6 { - color: #5ff; - } - div#cgit table.list td a { - color: #eee; - } - div#cgit table.list td a.ls-dir { - color: #28d; - } - div#cgit table.list td a:hover { - color: #3af; - } - div#cgit table#downloads { - border-color: #888; - } - div#cgit table#downloads th { - background-color: #333; - } - div#cgit div#blob { - border-color: #eee; - } - div#cgit table.blob { - border-top-color: #eee; - } - div#cgit table.blob td.hashes, - div#cgit table.blob td.lines { - color: #eee; - } - div#cgit table.blob td.linenumbers { - border-right-color: gray; - } - div#cgit table.blob td.linenumbers a, - div#cgit table.ssdiff td.lineno a { - color: gray; - } - div#cgit table.blob td.linenumbers a:hover, - div#cgit table.ssdiff td.lineno a:hover { - color: #eee; - } - div#cgit table.blame div.alt:nth-child(even) { - background: #171717; - } - div#cgit table.blame div.alt:nth-child(odd) { - background: #1f1f1f; - } - div#cgit table.bin-blob { - border-color: #eee; - } - div#cgit table.bin-blob th { - border-color: #888; - } - div#cgit table.bin-blob td { - border-left-color: #888; - } - div#cgit div.cgit-panel table { - border-color: #555; - background-color: #282828; - } - div#cgit div.notes { - border-color: #661; - background-color: #220; - } - div#cgit table.diffstat { - border-color: #555; - background-color: #282828; - } - div#cgit table.diffstat td span.modechange { - color: #c66; - } - div#cgit table.diffstat td.add a { - color: #6c6; - } - div#cgit table.diffstat td.del a { - color: #c66; - } - div#cgit table.diffstat td.upd a { - color: #3af; - } - div#cgit table.diffstat td.graph td.add { - background-color: #3a3; - } - div#cgit table.diffstat td.graph td.rem { - background-color: #a33; - } - div#cgit div.diffstat-summary { - color: #777; - } - div#cgit table.diff td div.head { - color: #eee; - } - div#cgit table.diff td div.hunk { - color: #28d; - } - div#cgit table.diff td div.add { - color: #6c6; - } - div#cgit table.diff td div.del { - color: #c66; - } - div#cgit table.list td.reposection { - color: #777; - } - div#cgit ul.pager a { - color: #888; - } - div#cgit span.age-mins { - color: #7f7; - } - div#cgit span.age-hours { - color: #7f7; - } - div#cgit span.age-days { - color: #9d9; - } - div#cgit span.age-weeks { - color: #bbb; - } - div#cgit span.age-months { - color: #888; - } - div#cgit span.age-years { - color: #666; - } - div#cgit span.insertions { - color: #7f7; - } - div#cgit span.deletions { - color: #e33; - } - div#cgit div.footer { - color: #555; - } - div#cgit div.footer a { - color: #555; - } - div#cgit a.branch-deco { - color: #fff; - background-color: #361; - border-color: #3b2; - } - div#cgit a.tag-deco { - color: #fff; - background-color: #650; - border-color: #ba3; - } - div#cgit a.tag-annotated-deco { - color: #fff; - background-color: #840; - border-color: #b96; - } - div#cgit a.remote-deco { - color: #fff; - background-color: #348; - border-color: #67c; - } - div#cgit a.deco { - color: #fff; - background-color: #922; - border-color: #d55; - } - div#cgit a.branch-deco:hover, - div#cgit table.list td a.branch-deco:hover, - div#cgit a.tag-deco:hover, - div#cgit table.list td a.tag-deco:hover, - div#cgit a.tag-annotated-deco:hover, - div#cgit table.list td a.tag-annotated-deco:hover, - div#cgit a.remote-deco:hover, - div#cgit table.list td a.remote-deco:hover, - div#cgit a.deco:hover, - div#cgit table.list td a.deco:hover { - color: #fff; - } - div#cgit table.stats { - border-color: #555; - } - div#cgit table.stats th { - background-color: #333; - border-color: #555; - } - div#cgit table.stats td { - border-color: #555; - } - div#cgit table.stats td.sum { - color: #5c7e9b; - } - div#cgit table.vgraph { - border-color: #eee; - } - div#cgit table.vgraph th { - background-color: #1f1f1f; - border-color: black; - } - div#cgit table.vgraph div.bar { - background-color: #1f1f1f; - } - div#cgit table.hgraph { - border-color: #eee; - } - div#cgit table.hgraph th { - background-color: #1f1f1f; - border-color: #eee; - } - div#cgit table.hgraph div.bar { - background-color: #1f1f1f; - } - div#cgit table.ssdiff td { - border-left-color: #555; - border-right-color: #555; - } - div#cgit table.ssdiff td.add { - color: #eee; - background: #353; - } - div#cgit table.ssdiff td.add_dark { - color: #eee; - background: #030; - } - div#cgit table.ssdiff span.add { - background: #030; - } - div#cgit table.ssdiff td.del { - color: #eee; - background: #533; - } - div#cgit table.ssdiff td.del_dark { - color: #eee; - background: #411; - } - div#cgit table.ssdiff span.del { - background: #300; - } - div#cgit table.ssdiff td.changed { - color: #eee; - background: #553; - } - div#cgit table.ssdiff td.changed_dark { - color: #eee; - background: #330; - } - div#cgit table.ssdiff td.lineno { - color: #eee; - background: #1f1f1f; - } - div#cgit table.ssdiff td.hunk { - color: #eee; - background: #0d3d64; - border-top-color: #555; - border-bottom-color: #555; - } - div#cgit table.ssdiff td.head { - border-top-color: #555; - border-bottom-color: #555; - } - div#cgit table.ssdiff td.head div.head { - color: #eee; - } - div#cgit table.ssdiff td.foot { - border-top-color: #555; - } -} -/* Style definition file generated by highlight 3.13, http://www.andre-simon.de/ */ - -/* Highlighting theme: Kwrite Editor */ - -body.hl { - background-color: #e0eaee; -} -pre.hl { - color: #000000; - background-color: #e0eaee; - font-size: 10pt; - font-family: "Courier New", monospace; -} -.hl.num { - color: #b07e00; -} -.hl.esc { - color: #ff00ff; -} -.hl.str { - color: #bf0303; -} -.hl.pps { - color: #818100; -} -.hl.slc { - color: #838183; - font-style: italic; -} -.hl.com { - color: #838183; - font-style: italic; -} -.hl.ppc { - color: #008200; -} -.hl.opt { - color: #000000; -} -.hl.ipl { - color: #0057ae; -} -.hl.lin { - color: #555555; -} -.hl.kwa { - color: #000000; - font-weight: bold; -} -.hl.kwb { - color: #0057ae; -} -.hl.kwc { - color: #000000; - font-weight: bold; -} -.hl.kwd { - color: #010181; -} - diff --git a/modules/server/cgit/static/favicon.png b/modules/server/cgit/static/favicon.png deleted file mode 100755 index a9c1396..0000000 Binary files a/modules/server/cgit/static/favicon.png and /dev/null differ diff --git a/modules/server/cgit/static/logo.png b/modules/server/cgit/static/logo.png deleted file mode 100755 index a9c1396..0000000 Binary files a/modules/server/cgit/static/logo.png and /dev/null differ diff --git a/modules/server/default.nix b/modules/server/default.nix deleted file mode 100644 index 150cd4d..0000000 --- a/modules/server/default.nix +++ /dev/null @@ -1,52 +0,0 @@ -{ - imports = [ - ./calibre - ./cgit - ./forgejo - ./gemini - ./grafana - ./immich - ./jellyfin - ./monero - ./ollama - ]; - - services = { - nginx = { - enable = true; - recommendedGzipSettings = true; - recommendedOptimisation = true; - recommendedProxySettings = true; - }; - - sshguard.enable = true; - - openssh = { - enable = false; - settings = { - PermitRootLogin = false; - PasswordAuthentication = false; - AllowTcpForwarding = false; - X11Forwarding = false; - }; - }; - }; - - networking = { - firewall.allowedTCPPorts = [ 80 ]; - - hosts = { - "127.0.0.1" = [ - "library.internal" - "media.internal" - "photos.internal" - "chat.internal" - "ollama.internal" - "code.internal" - "forge.internal" - "search.internal" - "monitor.internal" - ]; - }; - }; -} diff --git a/modules/server/forgejo/default.nix b/modules/server/forgejo/default.nix deleted file mode 100644 index 0294279..0000000 --- a/modules/server/forgejo/default.nix +++ /dev/null @@ -1,57 +0,0 @@ -{ - services = { - forgejo = { - enable = true; - - dump.enable = true; - # useWizard = true; - - settings = { - DEFAULT = { - APP_NAME = "apothēke"; - RUN_MODE = "prod"; - APP_SLOGAN = "a place for storing objects."; - RUN_USER = "forgejo"; - }; - - server = { - HTTP_PORT = 3040; - DOMAIN = "forge.internal"; - ROOT_URL = "http://forge.internal/"; - SSH_DOMAIN = "forge.internal"; - SSH_PORT = 22; - DISABLE_SSH = false; - }; - - database = { - DB_TYPE = "sqlite3"; - }; - - service = { - DISABLE_REGISTRATION = false; - DEFAULT_KEEP_EMAIL_PRIVATE = true; - REQUIRE_SIGNIN_VIEW = false; - REGISTER_EMAIL_CONFIRM = false; - ENABLE_NOTIFY_MAIL = false; - ALLOW_ONLY_EXTERNAL_REGISTRATION = false; - ENABLE_CAPTCHA = false; - DEFAULT_ALLOW_CREATE_ORGANIZATION = true; - DEFAULT_ENABLE_TIMETRACKING = true; - }; - - lfs = { - enable = true; - }; - }; - }; - - nginx = { - virtualHosts."forge.internal" = { - locations."/" = { - proxyPass = "http://127.0.0.1:3040"; - proxyWebsockets = true; - }; - }; - }; - }; -} diff --git a/modules/server/gemini/default.nix b/modules/server/gemini/default.nix deleted file mode 100644 index d59f65f..0000000 --- a/modules/server/gemini/default.nix +++ /dev/null @@ -1,57 +0,0 @@ -{ config, pkgs, lib, ... }: -{ - services.agate = { - enable = true; - - hostnames = [ "aethrvmn.gr" ]; - addresses = [ "0.0.0.0:1965" ]; - language = "en"; - contentDir = "/srv/gemini"; - }; - - networking.firewall.allowedTCPPorts = [ 1965 ]; - - users = { - groups.agate = { }; - users = { - agate = { - isSystemUser = true; - description = "gemini user"; - group = "agate"; - home = "/srv/gemini"; - createHome = true; - shell = "${pkgs.git}/bin/git-shell"; - }; - }; - }; - - systemd = { - # set service - services."gemini" = { - description = "Update Gemini site from repo"; - - script = '' - if [ -d /srv/gemini/.git ]; then - ${pkgs.git}/bin/git -C /srv/gemini pull - else - ${pkgs.git}/bin/git clone https://apo.theke.ml/aethrvmn/gemini.git /srv/gemini - fi - ''; - - serviceConfig = { - Type = "oneshot"; - User = "agate"; - }; - }; - - timers."gemini" = { - description = "Hourly Gemini-site update"; - wantedBy = [ "timers.target" ]; - - timerConfig = { - OnCalendar = "hourly"; - Persistent = true; - }; - }; - }; -} diff --git a/modules/server/grafana/default.nix b/modules/server/grafana/default.nix deleted file mode 100644 index 41905cd..0000000 --- a/modules/server/grafana/default.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ config, pkgs, ... }: -{ - services = { - grafana = { - enable = true; - settings.server = { - domain = "monitor.internal"; - http_port = 3050; - http_addr = "127.0.0.1"; - }; - }; - - nginx = { - virtualHosts."monitor.internal" = { - locations."/" = { - proxyPass = "http://127.0.0.1:3050"; - proxyWebsockets = true; - }; - }; - }; - }; -} - diff --git a/modules/server/immich/default.nix b/modules/server/immich/default.nix deleted file mode 100644 index fac75f9..0000000 --- a/modules/server/immich/default.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ config, lib, ... }: -{ - services = { - # Immich setup - immich = { - enable = true; - openFirewall = false; - - host = "127.0.0.1"; - port = 3010; - }; - - nginx = { - virtualHosts."photos.internal" = { - locations."/" = { - proxyPass = "http://127.0.0.1:3010"; - proxyWebsockets = true; - }; - }; - }; - }; - - hardware.graphics.enable = lib.mkForce true; - - users.users.immich = { - extraGroups = [ "video" "render" ]; - }; -} diff --git a/modules/server/jellyfin/default.nix b/modules/server/jellyfin/default.nix deleted file mode 100644 index 424b4d8..0000000 --- a/modules/server/jellyfin/default.nix +++ /dev/null @@ -1,27 +0,0 @@ -{ config, pkgs, lib, ...}: -{ - environment.systemPackages = with pkgs; [ - jellyfin - jellyfin-web - jellyfin-ffmpeg - logrotate - ]; - - services = { - jellyfin = { - enable = true; - openFirewall = false; - }; - - logrotate.enable = true; - - nginx = { - virtualHosts."media.internal" = { - locations."/" = { - proxyPass = "http://127.0.0.1:8096"; - proxyWebsockets = true; - }; - }; - }; - }; -} diff --git a/modules/server/monero/default.nix b/modules/server/monero/default.nix deleted file mode 100644 index 4860353..0000000 --- a/modules/server/monero/default.nix +++ /dev/null @@ -1,64 +0,0 @@ -{ config, pkgs, ... }: -{ - services = { - monero = { - enable = true; - dataDir = "/var/lib/monero"; - # prune option exists in unstable/25.11+ - # prune = false; - - rpc = { - address = "127.0.0.1"; - port = 18081; - }; - - extraConfig = '' - zmq-pub=tcp://127.0.0.1:18083 - ''; - }; - - xmrig = { - enable = true; - - settings = { - autosave = false; - cpu = { - rx = { - enabled = true; - threads = 6; - }; - }; - - pools = [ - { - url = "127.0.0.1:3333"; - user = "4BD1gWVaMxdTqVnQdFW6m4j9wBj8UkoBtXuPdRqdoMypjQAzvvXwTZ8AvkeUbKhspdCJazj3bYyS855cpzj3ZG1FB9DNqqF"; - keepalive = true; - tls = false; - } - ]; - }; - }; - }; - - systemd.services.p2pool = { - description = "P2Pool for XMR"; - wantedBy = [ "multi-user.target" ]; - after = [ "network-online.target" "monero.service" ]; - wants = [ "network-online.target" "monero.service" ]; - - serviceConfig = { - ExecStart = '' - ${pkgs.p2pool}/bin/p2pool \ - --mini \ - --host 127.0.0.1 \ - --rpc-port 18081 \ - --wallet 4BD1gWVaMxdTqVnQdFW6m4j9wBj8UkoBtXuPdRqdoMypjQAzvvXwTZ8AvkeUbKhspdCJazj3bYyS855cpzj3ZG1FB9DNqqF \ - --stratum 127.0.0.1:3333 \ - --p2p 127.0.0.1:37889 \ - ''; - Restart = "always"; - RestartSec = "5s"; - }; - }; -} diff --git a/modules/server/ollama/default.nix b/modules/server/ollama/default.nix deleted file mode 100644 index 8342df8..0000000 --- a/modules/server/ollama/default.nix +++ /dev/null @@ -1,70 +0,0 @@ -{ config, pkgs, lib, ... }: -{ - services = { - ollama = { - enable = true; - loadModels = [ - "qwen3:14b" - "qwen3-coder:30b" - "gemma3:12b" - "gpt-oss:20b" - "deepseek-r1:14b" - "phi4-reasoning:14b" - ]; - - acceleration = "rocm"; - environmentVariables = { - HCC_AMDGPU_TARGET = "gfx1031"; - }; - rocmOverrideGfx = "10.3.0"; - }; - - open-webui = { - enable = false; - port = 3030; - environment = { - ANONYMIZED_TELEMETRY = "False"; - DO_NOT_TRACK = "True"; - SCARF_NO_ANALYTICS = "True"; - WEBUI_AUTH = "False"; - OLLAMA_API_BASE_URL = "http://localhost:11434"; - - #dir stuff - STATIC_DIR = "${config.services.open-webui.stateDir}/static"; - DATA_DIR = "${config.services.open-webui.stateDir}/data"; - HF_HOME = "${config.services.open-webui.stateDir}/hf_home"; - SENTENCE_TRANSFORMERS_HOME = "${config.services.open-webui.stateDir}/transformers_home"; - }; - }; - - xserver.videoDrivers = [ "amdgpu" ]; - - nginx.virtualHosts = { - "chat.internal" = { - locations."/" = { - proxyPass = "http://127.0.0.1:3030"; - proxyWebsockets = true; - }; - }; - - "ollama.internal" = { - locations."/" = { - proxyPass = "http://127.0.0.1:11434"; - proxyWebsockets = true; - }; - }; - }; - }; - - nixpkgs.config = { - allowUnfree = lib.mkForce true; - rocmSupport = lib.mkForce true; - rocmTargets = [ "gfx1031" ]; - }; - - environment.systemPackages = with pkgs; [ - rocmPackages.rocminfo - rocmPackages.rocm-smi - rocmPackages.hipcc - ]; -} diff --git a/modules/ssh/default.nix b/modules/ssh/default.nix new file mode 100644 index 0000000..70b67e2 --- /dev/null +++ b/modules/ssh/default.nix @@ -0,0 +1,5 @@ +{ + programs.ssh = { + startAgent = true; + }; +} diff --git a/modules/thunar/default.nix b/modules/thunar/default.nix new file mode 100644 index 0000000..0caaabf --- /dev/null +++ b/modules/thunar/default.nix @@ -0,0 +1,24 @@ +{ config, pkgs, ... }: +{ + services = { + gvfs.enable = true; + # TODO: Check if I need these + # udisks2.enable = true; + # devmon.enable = true; + tumbler.enable = true; + }; + + programs = { + thunar = { + enable = true; + + plugins = with pkgs.xfce; [ + thunar-archive-plugin + thunar-media-tags-plugin + thunar-volman + ]; + }; + + file-roller.enable = true; + }; +} diff --git a/modules/users/default.nix b/modules/users/default.nix new file mode 100644 index 0000000..db3d759 --- /dev/null +++ b/modules/users/default.nix @@ -0,0 +1,34 @@ +{ config, pkgs, ... }: + +# User configuration +{ + users = { + defaultUserShell = pkgs.zsh; + + groups.aethrvmn = { + members = [ "aethrvmn" ]; + }; + + users.aethrvmn = { + isNormalUser = true; + extraGroups = [ + "audio" + "networkmanager" + "video" + "wheel" + ]; + home = "/home/aethrvmn"; + + group = "aethrvmn"; + + openssh.authorizedKeys.keys = [ + "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIF3R0qrWQ9omz87lt4YRCdI+QV55KxMqxU+Vz1mUM4ye me@aethrvmn.gr" + ]; + }; + }; + + programs = { + zsh.enable = true; + fish.enable = true; + }; +} diff --git a/modules/waybar/default.nix b/modules/waybar/default.nix new file mode 100644 index 0000000..ec27a77 --- /dev/null +++ b/modules/waybar/default.nix @@ -0,0 +1,5 @@ +{ + programs.waybar = { + enable = true; + }; +} diff --git a/modules/winapps/default.nix b/modules/winapps/default.nix new file mode 100644 index 0000000..243e851 --- /dev/null +++ b/modules/winapps/default.nix @@ -0,0 +1,7 @@ +{ config, pkgs, ... }: +{ + environment.systemPackages = with pkgs; [ + winapps.packages."x86_64-linux".winapps + winapps.packages."x86_64-linux".winapps-launcher # optional + ]; +} -- cgit v1.2.3