diff --git a/.gitignore b/.gitignore index 27012f2..2ff6c7f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ /target result result-* + +*.qcow2 diff --git a/flake.nix b/flake.nix index 6ec61d5..0e692e0 100644 --- a/flake.nix +++ b/flake.nix @@ -32,6 +32,23 @@ }; in f system pkgs toolchain); in { + apps = let + mkApp = program: description: { + type = "app"; + program = toString program; + meta = { + inherit description; + }; + }; + mkVm = name: mkApp "${self.nixosConfigurations.${name}.config.system.build.vm}/bin/run-nixos-vm"; + in forAllSystems (system: pkgs: _: { + vm = mkVm "vm" "Start a NixOS VM with roowho2 installed"; + }); + + nixosConfigurations = { + vm = import ./nix/vm.nix { inherit self nixpkgs; }; + }; + devShell = forAllSystems (system: pkgs: toolchain: pkgs.mkShell { nativeBuildInputs = with pkgs; [ toolchain @@ -63,10 +80,15 @@ ./Cargo.lock ]; }; + + rustPlatform = pkgs.makeRustPlatform { + rustc = pkgs.rust-bin.nightly.latest.default; + cargo = pkgs.rust-bin.nightly.latest.cargo; + }; in { default = self.packages.${system}.roowho2; - roowho2 = pkgs.callPackage ./nix/default.nix { inherit cargoToml cargoLock src; }; + roowho2 = pkgs.callPackage ./nix/default.nix { inherit cargoToml cargoLock src rustPlatform; }; filteredSource = pkgs.runCommandLocal "filtered-source" { } '' ln -s ${src} $out diff --git a/nix/default.nix b/nix/default.nix index dadf82a..6a7d75a 100644 --- a/nix/default.nix +++ b/nix/default.nix @@ -18,6 +18,8 @@ rustPlatform.buildRustPackage { # buildType = "releaselto"; + RUSTFLAGS = "-Zhigher-ranked-assumptions"; + meta = with lib; { license = licenses.mit; platforms = platforms.linux ++ platforms.darwin; diff --git a/nix/module.nix b/nix/module.nix index 8c57803..a62d1e0 100644 --- a/nix/module.nix +++ b/nix/module.nix @@ -12,7 +12,9 @@ in { freeformType = format.type; options = { rwhod = { - enable = lib.mkEnableOption "the rwhod service"; + enable = lib.mkEnableOption "the rwhod service" // { + default = true; + }; # TODO: allow configuring socket config }; @@ -24,10 +26,20 @@ in { }; config = lib.mkIf cfg.enable { + systemd.sockets.roowho2-client = { + wantedBy = [ "sockets.target" ]; + description = "Roowho2 Client Communication Socket"; + listenStreams = [ "/run/roowho2/roowho2.varlink" ]; + socketConfig = { + Service = "roowho2.service"; + FileDescriptorName = "client_socket"; + }; + }; - systemd.sockets.roowhoo2-rwhod = lib.mkIf cfg.settings.rwhod.enable { + systemd.sockets.roowho2-rwhod = lib.mkIf cfg.settings.rwhod.enable { + wantedBy = [ "sockets.target" ]; description = "Roowho2 Rwhod Socket"; - listenDatagrams = [ 513 ]; + listenDatagrams = [ (toString 513) ]; socketConfig = { Service = "roowho2.service"; FileDescriptorName = "rwhod_socket"; @@ -37,7 +49,7 @@ in { systemd.services.roowho2 = { serviceConfig = { - ExecStart = "${lib.getExe' cfg.package "roowho2d"} --config ${format.toFile cfg.settings}"; + ExecStart = "${lib.getExe' cfg.package "roowhod"} --config ${format.generate "roowho2-config.toml" cfg.settings}"; Restart = "on-failure"; DynamicUser = true; diff --git a/nix/vm.nix b/nix/vm.nix new file mode 100644 index 0000000..6c15a93 --- /dev/null +++ b/nix/vm.nix @@ -0,0 +1,47 @@ +{ self, nixpkgs, ... }: +nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + pkgs = import nixpkgs { + system = "x86_64-linux"; + overlays = [ + self.overlays.roowho2 + ]; + }; + modules = [ + "${nixpkgs}/nixos/modules/virtualisation/qemu-vm.nix" + "${nixpkgs}/nixos/tests/common/user-account.nix" + + self.nixosModules.default + + ({ config, pkgs, ... }: { + system.stateVersion = config.system.nixos.release; + virtualisation.graphics = false; + + services.getty.autologinUser = "alice"; + + users.motd = '' + ================================= + Welcome to the roowho2 vm! + + Try running any of: + rwho + + Password for alice is 'foobar' + + To exit, press Ctrl+A, then X + ================================= + ''; + + services.roowho2 = { + enable = true; + }; + + programs.vim = { + enable = true; + defaultEditor = true; + }; + + environment.systemPackages = with pkgs; [ jq roowho2 ]; + }) + ]; +} diff --git a/src/bin/rwho.rs b/src/bin/rwho.rs index 3aab587..5797f93 100644 --- a/src/bin/rwho.rs +++ b/src/bin/rwho.rs @@ -25,7 +25,7 @@ pub struct Args { async fn main() { let args = Args::parse(); - let mut conn = zlink::unix::connect("/run/roowho2/rwhod.varlink") + let mut conn = zlink::unix::connect("/run/roowho2/roowho2.varlink") .await .expect("Failed to connect to rwhod server");