From 8451916cb6eecc43248458d3b461c5192e6a1365 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=98ystein=20Tveit?= Date: Sat, 19 Oct 2024 21:13:07 +0200 Subject: [PATCH] WIP --- flake.lock | 115 +++++++++++++++---------------------------- flake.nix | 16 ++++-- modules/greg.nix | 101 +++++++++++++++++++++++++++++++++++++ modules/grzegorz.nix | 47 ++++++++++++++---- 4 files changed, 191 insertions(+), 88 deletions(-) create mode 100644 modules/greg.nix diff --git a/flake.lock b/flake.lock index 895083e..76fb606 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1728763831, - "narHash": "sha256-KOp33tls7jRAhcmu77aVxKpSMou8QgK0BC+Y3sYLuGo=", + "lastModified": 1729281548, + "narHash": "sha256-MuojlSnwAJAwfhgmW8ZtZrwm2Sko4fqubCvReqbUzYw=", "owner": "nix-community", "repo": "disko", - "rev": "b6215392ec3bd05e9ebfbb2f7945c414096fce8f", + "rev": "a6a3179ddf396dfc28a078e2f169354d0c137125", "type": "github" }, "original": { @@ -20,64 +20,25 @@ "type": "github" } }, - "fix-python": { + "greg": { "inputs": { - "flake-utils": "flake-utils", - "nixpkgs": [ - "grzegorz", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1725463969, - "narHash": "sha256-d3c1TAlIN1PtK+oQP1wO6XbDfmR4SUp/C/4s7G46ARo=", - "owner": "GuillaumeDesforges", - "repo": "fix-python", - "rev": "2926402234c3f99aa8e4608c51d9ffa73ea403c0", - "type": "github" - }, - "original": { - "owner": "GuillaumeDesforges", - "repo": "fix-python", - "type": "github" - } - }, - "flake-utils": { - "inputs": { - "systems": "systems" - }, - "locked": { - "lastModified": 1689068808, - "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4", - "type": "github" - }, - "original": { - "id": "flake-utils", - "type": "indirect" - } - }, - "grzegorz": { - "inputs": { - "fix-python": "fix-python", "nixpkgs": [ "nixpkgs" - ] + ], + "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1726861911, - "narHash": "sha256-pXPmVp4AgszzJXlLjj8r9NxoDvxoV4USGaiMwqCyb4M=", - "ref": "refs/heads/master", - "rev": "d10db19d7df5c5c2cd2dcb878376d5d681f6c2f2", - "revCount": 94, + "lastModified": 1722796402, + "narHash": "sha256-Y6PdbTcfzDAZkVTLhTbRJMJCVR3KtCI7QyGqPR141uw=", + "ref": "refs/heads/main", + "rev": "c1438f248020e4c71673c59501ae87ea4f5bec4f", + "revCount": 16, "type": "git", - "url": "https://git.pvv.ntnu.no/Projects/grzegorz.git" + "url": "https://git.pvv.ntnu.no/Projects/greg-ng.git" }, "original": { "type": "git", - "url": "https://git.pvv.ntnu.no/Projects/grzegorz.git" + "url": "https://git.pvv.ntnu.no/Projects/greg-ng.git" } }, "grzegorz-clients": { @@ -158,11 +119,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1728843132, - "narHash": "sha256-VWIF1sMD6MJZyB+x5z0ZpirQdH8Cqb3avboq1VfSjRg=", + "lastModified": 1729307008, + "narHash": "sha256-QUvb6epgKi9pCu9CttRQW4y5NqJ+snKr1FZpG/x3Wtc=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "414e01b61f0015e49353a6104824b9385a430a5d", + "rev": "a9b86fc2290b69375c5542b622088eb6eca2a7c3", "type": "github" }, "original": { @@ -190,11 +151,11 @@ }, "nixpkgs-unstable": { "locked": { - "lastModified": 1728805616, - "narHash": "sha256-CfPKX2yaHwTOpGqcul89N12zjRfZ8GOSxG24/Ao9BcQ=", + "lastModified": 1729308112, + "narHash": "sha256-Ap+cPeiluam2KFZO+OWuFTl/IkIJfyGYGMgkT2pVCRY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "73057677e8557925e999ac54196423fa34418c24", + "rev": "61253596816c4cd65e2a0f474cbc0ac0c6e0f7cf", "type": "github" }, "original": { @@ -247,7 +208,7 @@ "root": { "inputs": { "disko": "disko", - "grzegorz": "grzegorz", + "greg": "greg", "grzegorz-clients": "grzegorz-clients", "matrix-next": "matrix-next", "minecraft-data": "minecraft-data", @@ -259,6 +220,27 @@ "sops-nix": "sops-nix" } }, + "rust-overlay": { + "inputs": { + "nixpkgs": [ + "greg", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1722651535, + "narHash": "sha256-2uRmNwxe3CO5h7PfvqXrRe8OplXaEdwhqOUtaF13rpU=", + "owner": "oxalica", + "repo": "rust-overlay", + "rev": "56d83ca6f3c557647476f3720426a7615c22b860", + "type": "github" + }, + "original": { + "owner": "oxalica", + "repo": "rust-overlay", + "type": "github" + } + }, "sops-nix": { "inputs": { "nixpkgs": [ @@ -279,21 +261,6 @@ "repo": "sops-nix", "type": "github" } - }, - "systems": { - "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", - "type": "github" - }, - "original": { - "owner": "nix-systems", - "repo": "default", - "type": "github" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index b09a986..633f34a 100644 --- a/flake.nix +++ b/flake.nix @@ -23,8 +23,10 @@ nix-gitea-themes.url = "git+https://git.pvv.ntnu.no/oysteikt/nix-gitea-themes.git"; nix-gitea-themes.inputs.nixpkgs.follows = "nixpkgs"; - grzegorz.url = "git+https://git.pvv.ntnu.no/Projects/grzegorz.git"; - grzegorz.inputs.nixpkgs.follows = "nixpkgs"; + greg.url = "git+https://git.pvv.ntnu.no/Projects/greg-ng.git"; + greg.inputs.nixpkgs.follows = "nixpkgs"; + # grzegorz.url = "git+https://git.pvv.ntnu.no/Projects/grzegorz.git"; + # grzegorz.inputs.nixpkgs.follows = "nixpkgs"; grzegorz-clients.url = "git+https://git.pvv.ntnu.no/Projects/grzegorz-clients.git"; grzegorz-clients.inputs.nixpkgs.follows = "nixpkgs"; @@ -116,15 +118,21 @@ brzeczyszczykiewicz = stableNixosConfig "brzeczyszczykiewicz" { modules = [ - inputs.grzegorz.nixosModules.grzegorz-kiosk + # inputs.greg.nixosModules.default inputs.grzegorz-clients.nixosModules.grzegorz-webui ]; + overlays = [ + inputs.greg.overlays.default + ]; }; georg = stableNixosConfig "georg" { modules = [ - inputs.grzegorz.nixosModules.grzegorz-kiosk + # inputs.greg.nixosModules.default inputs.grzegorz-clients.nixosModules.grzegorz-webui ]; + overlays = [ + inputs.greg.overlays.default + ]; }; }; diff --git a/modules/greg.nix b/modules/greg.nix new file mode 100644 index 0000000..587acce --- /dev/null +++ b/modules/greg.nix @@ -0,0 +1,101 @@ +{ config, pkgs, lib, ... }: +let + cfg = config.services.greg-ng; +in +{ + options.services.greg-ng = { + enable = lib.mkEnableOption "greg-ng, an mpv based media player"; + + package = lib.mkPackageOption pkgs "greg-ng" { }; + + mpvPackage = lib.mkPackageOption pkgs "mpv" { }; + + # TODO: create some better descriptions + settings = { + host = lib.mkOption { + type = lib.types.str; + default = "localhost"; + example = "0.0.0.0"; + description = '' + Which host to bind to. + ''; + }; + + port = lib.mkOption { + type = lib.types.port; + default = 8008; + example = 10008; + description = '' + Which port to bind to. + ''; + }; + + mpv-socket-path = lib.mkOption { + type = lib.types.str; + default = "%t/greg-ng-mpv.sock"; + description = '' + Path to the mpv socket. + ''; + }; + + mpv-executable-path = lib.mkOption { + type = lib.types.str; + default = lib.getExe cfg.mpvPackage; + defaultText = lib.literalExpression '' + lib.getExe config.services.greg-ng.mpvPackage + ''; + description = '' + Path to the mpv executable. + ''; + }; + + mpv-config-file = lib.mkOption { + type = with lib.types; nullOr str; + default = null; + description = '' + Path to the mpv config file. + ''; + }; + + auto-start-mpv = lib.mkOption { + type = lib.types.bool; + default = true; + description = '' + Whether to automatically start mpv. + ''; + }; + + force-auto-start = lib.mkOption { + type = lib.types.bool; + default = true; + description = '' + Whether to force auto starting mpv. + ''; + }; + }; + }; + + config = { + users.users."greg".isNormalUser = true; + + # services.cage.user = "greg"; + # services.cage.enable = true; + # services.cage.program =let + # flags = lib.cli.toGNUCommandLineShell { } cfg.settings; + # in pkgs.writeShellScript "greg-kiosk" '' + # cd $(mktemp -d) + + # ${lib.getExe cfg.package} ${flags} + # ''; + # services.cage.user = "greg"; + # users.users."greg".isNormalUser = true; + # system.activationScripts = { + # base-dirs = { + # text = '' + # mkdir -p /nix/var/nix/profiles/per-user/greg + # ''; + # deps = []; + # }; + # }; + }; +} diff --git a/modules/grzegorz.nix b/modules/grzegorz.nix index 6c0600b..f2226d9 100644 --- a/modules/grzegorz.nix +++ b/modules/grzegorz.nix @@ -1,8 +1,10 @@ {config, lib, pkgs, ...}: let - grg = config.services.grzegorz; + grg = config.services.greg-ng; grgw = config.services.grzegorz-webui; in { + imports = [ ./greg.nix ]; + services.pipewire.enable = true; services.pipewire.alsa.enable = true; services.pipewire.alsa.support32Bit = true; @@ -13,19 +15,44 @@ in { description = "pvv"; }; - services.grzegorz.enable = true; - services.grzegorz.listenAddr = "localhost"; - services.grzegorz.listenPort = 31337; + # services.grzegorz.enable = true; + # services.grzegorz.listenAddr = "localhost"; + # services.grzegorz.listenPort = 31337; + + services.greg-ng.enable = true; + services.greg-ng.settings.host = "localhost"; + services.greg-ng.settings.port = 31337; services.grzegorz-webui.enable = true; services.grzegorz-webui.listenAddr = "localhost"; services.grzegorz-webui.listenPort = 42069; services.grzegorz-webui.listenWebsocketPort = 42042; services.grzegorz-webui.hostName = "${config.networking.fqdn}"; - services.grzegorz-webui.apiBase = "http://${toString grg.listenAddr}:${toString grg.listenPort}/api"; + services.grzegorz-webui.apiBase = "http://${grg.settings.host}:${toString grg.settings.port}/api"; + + xdg.portal = { + enable = true; + wlr.enable = true; + extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; + }; + + services.greetd = { + enable = true; + settings = rec { + initial_session = { + command = "${pkgs.sway}/bin/sway"; + user = "pvv"; + }; + default_session = initial_session; + }; + }; + + programs.sway = { + enable = true; + wrapperFeatures.gtk = true; + }; services.nginx.enable = true; - services.nginx.virtualHosts."${config.networking.fqdn}" = { forceSSL = true; enableACME = true; @@ -40,18 +67,18 @@ in { ''; locations."/" = { - proxyPass = "http://localhost:${builtins.toString config.services.grzegorz-webui.listenPort}"; + proxyPass = "http://${grgw.listenAddr}:${toString grgw.listenPort}"; }; # https://github.com/rawpython/remi/issues/216 locations."/websocket" = { - proxyPass = "http://localhost:${builtins.toString config.services.grzegorz-webui.listenWebsocketPort}"; + proxyPass = "http://${grgw.listenAddr}:${toString grgw.listenWebsocketPort}"; proxyWebsockets = true; }; locations."/api" = { - proxyPass = "http://localhost:${builtins.toString config.services.grzegorz.listenPort}"; + proxyPass = "http://${grg.settings.host}:${toString grg.settings.port}"; }; locations."/docs" = { - proxyPass = "http://localhost:${builtins.toString config.services.grzegorz.listenPort}"; + proxyPass = "http://${grg.settings.host}:${toString grg.settings.port}"; }; };