oxwm

https://git.tonybtw.com/oxwm.git git://git.tonybtw.com/oxwm.git

added flake for nix package

Commit
8abb99f7c0cde9d68d9d946b8db0c290280707b4
Parent
4e7d825
Author
tonybtw <tonybtw@tonybtw.com>
Date
2025-10-10 05:59:56

Diff

diff --git a/default.nix b/default.nix
new file mode 100644
index 0000000..a57726b
--- /dev/null
+++ b/default.nix
@@ -0,0 +1,39 @@
+{ lib
+, rustPlatform
+, pkg-config
+, xorg
+, freetype
+, fontconfig
+}:
+
+rustPlatform.buildRustPackage {
+  pname = "oxwm";
+  version = "0.1.0";
+
+  src = ./.;
+
+  cargoLock = {
+    lockFile = ./Cargo.lock;
+  };
+
+  nativeBuildInputs = [
+    pkg-config
+  ];
+
+  buildInputs = [
+    xorg.libX11
+    xorg.libXft
+    xorg.libXrender
+    freetype
+    fontconfig
+  ];
+
+  meta = with lib; {
+    description = "A dynamic window manager written in Rust, inspired by dwm";
+    homepage = "https://github.com/tonybanters/oxwm";
+    license = licenses.gpl3;
+    maintainers = [ ];
+    platforms = platforms.linux;
+    mainProgram = "oxwm";
+  };
+}
diff --git a/flake.lock b/flake.lock
index b426581..31fe637 100644
--- a/flake.lock
+++ b/flake.lock
@@ -1,25 +1,59 @@
 {
   "nodes": {
+    "flake-utils": {
+      "inputs": {
+        "systems": "systems"
+      },
+      "locked": {
+        "lastModified": 1731533236,
+        "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
+        "type": "github"
+      },
+      "original": {
+        "owner": "numtide",
+        "repo": "flake-utils",
+        "type": "github"
+      }
+    },
     "nixpkgs": {
       "locked": {
-        "lastModified": 1758070117,
-        "narHash": "sha256-uLwwHFCZnT1c3N3biVe/0hCkag2GSrf9+M56+Okf+WY=",
+        "lastModified": 1759831965,
+        "narHash": "sha256-vgPm2xjOmKdZ0xKA6yLXPJpjOtQPHfaZDRtH+47XEBo=",
         "owner": "NixOS",
         "repo": "nixpkgs",
-        "rev": "e9b7f2ff62b35f711568b1f0866243c7c302028d",
+        "rev": "c9b6fb798541223bbb396d287d16f43520250518",
         "type": "github"
       },
       "original": {
         "owner": "NixOS",
-        "ref": "nixos-25.05",
+        "ref": "nixos-unstable",
         "repo": "nixpkgs",
         "type": "github"
       }
     },
     "root": {
       "inputs": {
+        "flake-utils": "flake-utils",
         "nixpkgs": "nixpkgs"
       }
+    },
+    "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 74b5084..26333dc 100644
--- a/flake.nix
+++ b/flake.nix
@@ -1,36 +1,73 @@
 {
-  description = "oxwm devshell";
-
-  inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.05";
-
-  outputs = {
-    self,
-    nixpkgs,
-  }: let
-    system = "x86_64-linux";
-    pkgs = import nixpkgs {inherit system;};
-  in {
-    devShells.${system}.default = pkgs.mkShell {
-      buildInputs = [
-        pkgs.rustc
-        pkgs.cargo
-        pkgs.alacritty
-        pkgs.just
-        pkgs.xorg.libX11
-        pkgs.xorg.libXft
-        pkgs.xorg.libXrender
-        pkgs.freetype
-        pkgs.fontconfig
-        pkgs.pkg-config
-      ];
-
-      shellHook = ''
-        export PS1="(oxwm-dev) $PS1"
-      '';
-
-      RUST_SRC_PATH = "${pkgs.rustPlatform.rustLibSrc}";
-    };
+  description = "oxwm - A dynamic window manager written in Rust";
 
-    formatter.${system} = pkgs.alejandra;
+  inputs = {
+    nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
+    flake-utils.url = "github:numtide/flake-utils";
   };
+
+  outputs = { self, nixpkgs, flake-utils }:
+    flake-utils.lib.eachDefaultSystem (system:
+      let
+        pkgs = import nixpkgs { inherit system; };
+      in
+      {
+        packages = {
+          default = pkgs.callPackage ./default.nix { };
+          oxwm = self.packages.${system}.default;
+        };
+
+        devShells.default = pkgs.mkShell {
+          buildInputs = [
+            pkgs.rustc
+            pkgs.cargo
+            pkgs.alacritty
+            pkgs.just
+            pkgs.xorg.libX11
+            pkgs.xorg.libXft
+            pkgs.xorg.libXrender
+            pkgs.freetype
+            pkgs.fontconfig
+            pkgs.pkg-config
+          ];
+
+          shellHook = ''
+            export PS1="(oxwm-dev) $PS1"
+          '';
+
+          RUST_SRC_PATH = "${pkgs.rustPlatform.rustLibSrc}";
+        };
+
+        formatter = pkgs.alejandra;
+      }
+    ) // {
+      # NixOS module
+      nixosModules.default = { config, lib, pkgs, ... }:
+        with lib;
+        let
+          cfg = config.services.xserver.windowManager.oxwm;
+        in
+        {
+          options.services.xserver.windowManager.oxwm = {
+            enable = mkEnableOption "oxwm window manager";
+            package = mkOption {
+              type = types.package;
+              default = self.packages.${pkgs.system}.default;
+              description = "The oxwm package to use";
+            };
+          };
+
+          config = mkIf cfg.enable {
+            services.xserver.windowManager.session = [{
+              name = "oxwm";
+              start = ''
+                ${cfg.package}/bin/oxwm &
+                waitPID=$!
+              '';
+            }];
+
+            environment.systemPackages = [ cfg.package ];
+          };
+        };
+    };
 }