diff --git a/hosts/lio/flake.nix b/hosts/lio/flake.nix index 59a1228b..4482f305 100644 --- a/hosts/lio/flake.nix +++ b/hosts/lio/flake.nix @@ -97,6 +97,7 @@ # ./sway_customizations.nix ./i3_customizations.nix ./opencode-shim.nix + ./vms.nix ( { config, diff --git a/hosts/lio/vms.nix b/hosts/lio/vms.nix new file mode 100644 index 00000000..1ee38727 --- /dev/null +++ b/hosts/lio/vms.nix @@ -0,0 +1,32 @@ +{ pkgs, ... }: +{ + options = { }; + + config = { + users.users.josh.extraGroups = [ "libvirtd" "kvm" ]; + + environment.systemPackages = with pkgs; [ + virt-manager + virt-viewer + spice + spice-gtk + spice-protocol + win-virtio + win-spice + adwaita-icon-theme + ]; + + virtualisation = { + libvirtd = { + enable = true; + qemu = { + swtpm.enable = true; + ovmf.enable = true; + ovmf.packages = [ pkgs.OVMFFull.fd ]; + }; + }; + spiceUSBRedirection.enable = true; + }; + services.spice-vdagentd.enable = true; + }; +} diff --git a/hosts/testbed/configuration.nix b/hosts/testbed/configuration.nix deleted file mode 100644 index eb65bdfc..00000000 --- a/hosts/testbed/configuration.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - ... -}: -{ - system.stateVersion = "25.05"; # Did you read the comment? -} diff --git a/hosts/testbed/flake.lock b/hosts/testbed/flake.lock index 53234ffb..ce812312 100644 --- a/hosts/testbed/flake.lock +++ b/hosts/testbed/flake.lock @@ -1,85 +1,57 @@ { "nodes": { - "agenix": { + "aquamarine": { "inputs": { - "darwin": "darwin", - "home-manager": "home-manager_2", + "hyprutils": [ + "hyprland", + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprland", + "hyprwayland-scanner" + ], "nixpkgs": [ - "common", - "ragenix", + "hyprland", + "hyprland", "nixpkgs" ], - "systems": "systems" + "systems": [ + "hyprland", + "hyprland", + "systems" + ] }, "locked": { - "lastModified": 1736955230, - "narHash": "sha256-uenf8fv2eG5bKM8C/UvFaiJMZ4IpUFaQxk9OH5t/1gA=", - "owner": "ryantm", - "repo": "agenix", - "rev": "e600439ec4c273cf11e06fe4d9d906fb98fa097c", + "lastModified": 1762356719, + "narHash": "sha256-qwd/xdoOya1m8FENle+4hWnydCtlXUWLAW/Auk6WL7s=", + "owner": "hyprwm", + "repo": "aquamarine", + "rev": "6d0b3567584691bf9d8fedb5d0093309e2f979c7", "type": "github" }, "original": { - "owner": "ryantm", - "repo": "agenix", + "owner": "hyprwm", + "repo": "aquamarine", "type": "github" } }, "common": { - "inputs": { - "home-manager": "home-manager", - "nix-flatpak": "nix-flatpak", - "nixpkgs-unstable": "nixpkgs-unstable", - "opencode": "opencode", - "ragenix": "ragenix" - }, "locked": { - "path": "../../common", - "type": "path" + "dir": "flakes/common", + "lastModified": 1763592774, + "narHash": "sha256-eGN7x4ZKjERE7jxL/SGB9swtfpHzwhyd+6ql3ZgCZTA=", + "ref": "refs/heads/master", + "rev": "65ee4d088bdf4a853084d407920ec66aca4ebd8a", + "revCount": 798, + "type": "git", + "url": "https://git.joshuabell.xyz/ringofstorms/dotfiles" }, "original": { - "path": "../../common", - "type": "path" - }, - "parent": [] - }, - "crane": { - "locked": { - "lastModified": 1741481578, - "narHash": "sha256-JBTSyJFQdO3V8cgcL08VaBUByEU6P5kXbTJN6R0PFQo=", - "owner": "ipetkov", - "repo": "crane", - "rev": "bb1c9567c43e4434f54e9481eb4b8e8e0d50f0b5", - "type": "github" - }, - "original": { - "owner": "ipetkov", - "repo": "crane", - "type": "github" - } - }, - "darwin": { - "inputs": { - "nixpkgs": [ - "common", - "ragenix", - "agenix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1700795494, - "narHash": "sha256-gzGLZSiOhf155FW7262kdHo2YDeugp3VuIFb4/GGng0=", - "owner": "lnl7", - "repo": "nix-darwin", - "rev": "4b9b83d5a92e8c1fbfd8eb27eda375908c11ec4d", - "type": "github" - }, - "original": { - "owner": "lnl7", - "ref": "master", - "repo": "nix-darwin", - "type": "github" + "dir": "flakes/common", + "type": "git", + "url": "https://git.joshuabell.xyz/ringofstorms/dotfiles" } }, "disko": { @@ -103,21 +75,42 @@ "type": "github" } }, - "flake-utils": { - "inputs": { - "systems": "systems_2" - }, + "flake-compat": { + "flake": false, "locked": { - "lastModified": 1731533236, - "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", + "lastModified": 1747046372, + "narHash": "sha256-CIVLLkVgvHYbgI2UpXvIIBJ12HWgX+fjA8Xf8PUmqCY=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "9100a0f413b0c601e0533d1d94ffd501ce2e7885", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "gitignore": { + "inputs": { + "nixpkgs": [ + "hyprland", + "hyprland", + "pre-commit-hooks", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1709087332, + "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", "type": "github" } }, @@ -126,11 +119,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1753592768, - "narHash": "sha256-oV695RvbAE4+R9pcsT9shmp6zE/+IZe6evHWX63f2Qg=", + "lastModified": 1758463745, + "narHash": "sha256-uhzsV0Q0I9j2y/rfweWeGif5AWe0MGrgZ/3TjpDYdGA=", "owner": "rycee", "repo": "home-manager", - "rev": "fc3add429f21450359369af74c2375cb34a2d204", + "rev": "3b955f5f0a942f9f60cdc9cacb7844335d0f21c3", "type": "github" }, "original": { @@ -140,42 +133,341 @@ "type": "github" } }, - "home-manager_2": { + "hyprcursor": { "inputs": { + "hyprlang": [ + "hyprland", + "hyprland", + "hyprlang" + ], "nixpkgs": [ - "common", - "ragenix", - "agenix", + "hyprland", + "hyprland", "nixpkgs" + ], + "systems": [ + "hyprland", + "hyprland", + "systems" ] }, "locked": { - "lastModified": 1703113217, - "narHash": "sha256-7ulcXOk63TIT2lVDSExj7XzFx09LpdSAPtvgtM7yQPE=", - "owner": "nix-community", - "repo": "home-manager", - "rev": "3bfaacf46133c037bb356193bd2f1765d9dc82c1", + "lastModified": 1753964049, + "narHash": "sha256-lIqabfBY7z/OANxHoPeIrDJrFyYy9jAM4GQLzZ2feCM=", + "owner": "hyprwm", + "repo": "hyprcursor", + "rev": "44e91d467bdad8dcf8bbd2ac7cf49972540980a5", "type": "github" }, "original": { - "owner": "nix-community", - "repo": "home-manager", + "owner": "hyprwm", + "repo": "hyprcursor", "type": "github" } }, - "nix-flatpak": { + "hyprgraphics": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprland", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "hyprland", + "systems" + ] + }, "locked": { - "lastModified": 1739444422, - "narHash": "sha256-iAVVHi7X3kWORftY+LVbRiStRnQEob2TULWyjMS6dWg=", - "owner": "gmodena", - "repo": "nix-flatpak", - "rev": "5e54c3ca05a7c7d968ae1ddeabe01d2a9bc1e177", + "lastModified": 1762462052, + "narHash": "sha256-6roLYzcDf4V38RUMSqycsOwAnqfodL6BmhRkUtwIgdA=", + "owner": "hyprwm", + "repo": "hyprgraphics", + "rev": "ffc999d980c7b3bca85d3ebd0a9fbadf984a8162", "type": "github" }, "original": { - "owner": "gmodena", - "ref": "latest", - "repo": "nix-flatpak", + "owner": "hyprwm", + "repo": "hyprgraphics", + "type": "github" + } + }, + "hyprland": { + "inputs": { + "hyprland": "hyprland_2" + }, + "locked": { + "dir": "flakes/hyprland", + "lastModified": 1763592774, + "narHash": "sha256-eGN7x4ZKjERE7jxL/SGB9swtfpHzwhyd+6ql3ZgCZTA=", + "ref": "refs/heads/master", + "rev": "65ee4d088bdf4a853084d407920ec66aca4ebd8a", + "revCount": 798, + "type": "git", + "url": "https://git.joshuabell.xyz/ringofstorms/dotfiles" + }, + "original": { + "dir": "flakes/hyprland", + "type": "git", + "url": "https://git.joshuabell.xyz/ringofstorms/dotfiles" + } + }, + "hyprland-guiutils": { + "inputs": { + "aquamarine": [ + "hyprland", + "hyprland", + "aquamarine" + ], + "hyprgraphics": [ + "hyprland", + "hyprland", + "hyprgraphics" + ], + "hyprlang": [ + "hyprland", + "hyprland", + "hyprlang" + ], + "hyprtoolkit": "hyprtoolkit", + "hyprutils": [ + "hyprland", + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprland", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1762755186, + "narHash": "sha256-ZjjETUHtoEhVN7JI1Cbt3p/KcXpK8ZQaPHx7UkG1OgA=", + "owner": "hyprwm", + "repo": "hyprland-guiutils", + "rev": "66356e20a8ed348aa49c1b9ceace786e224225b3", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-guiutils", + "type": "github" + } + }, + "hyprland-protocols": { + "inputs": { + "nixpkgs": [ + "hyprland", + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1759610243, + "narHash": "sha256-+KEVnKBe8wz+a6dTLq8YDcF3UrhQElwsYJaVaHXJtoI=", + "owner": "hyprwm", + "repo": "hyprland-protocols", + "rev": "bd153e76f751f150a09328dbdeb5e4fab9d23622", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprland-protocols", + "type": "github" + } + }, + "hyprland_2": { + "inputs": { + "aquamarine": "aquamarine", + "hyprcursor": "hyprcursor", + "hyprgraphics": "hyprgraphics", + "hyprland-guiutils": "hyprland-guiutils", + "hyprland-protocols": "hyprland-protocols", + "hyprlang": "hyprlang", + "hyprutils": "hyprutils", + "hyprwayland-scanner": "hyprwayland-scanner", + "nixpkgs": "nixpkgs_2", + "pre-commit-hooks": "pre-commit-hooks", + "systems": "systems", + "xdph": "xdph" + }, + "locked": { + "lastModified": 1763579307, + "narHash": "sha256-fGRiQjfwe6JMzizIffLD+YlNOk6YuM7Rxpexle64F1M=", + "owner": "hyprwm", + "repo": "Hyprland", + "rev": "7532115318cd5c1ddf434d93e37995e55d5bc8cb", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "Hyprland", + "type": "github" + } + }, + "hyprlang": { + "inputs": { + "hyprutils": [ + "hyprland", + "hyprland", + "hyprutils" + ], + "nixpkgs": [ + "hyprland", + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1763254292, + "narHash": "sha256-JNgz3Fz2KMzkT7aR72wsgu/xNeJB//LSmdilh8Z/Zao=", + "owner": "hyprwm", + "repo": "hyprlang", + "rev": "deea98d5b61d066bdc7a68163edd2c4bd28d3a6b", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprlang", + "type": "github" + } + }, + "hyprtoolkit": { + "inputs": { + "aquamarine": [ + "hyprland", + "hyprland", + "hyprland-guiutils", + "aquamarine" + ], + "hyprgraphics": [ + "hyprland", + "hyprland", + "hyprland-guiutils", + "hyprgraphics" + ], + "hyprlang": [ + "hyprland", + "hyprland", + "hyprland-guiutils", + "hyprlang" + ], + "hyprutils": [ + "hyprland", + "hyprland", + "hyprland-guiutils", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprland", + "hyprland-guiutils", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "hyprland", + "hyprland-guiutils", + "nixpkgs" + ], + "systems": [ + "hyprland", + "hyprland", + "hyprland-guiutils", + "systems" + ] + }, + "locked": { + "lastModified": 1762463729, + "narHash": "sha256-2fYkU/mdz8WKY3dkDPlE/j6hTxIwqultsx4gMMsMns0=", + "owner": "hyprwm", + "repo": "hyprtoolkit", + "rev": "88483bdee5329ec985f0c8f834c519cd18cfe532", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprtoolkit", + "type": "github" + } + }, + "hyprutils": { + "inputs": { + "nixpkgs": [ + "hyprland", + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1763323331, + "narHash": "sha256-+Z0OfCo1MS8/aIutSAW5aJR9zTae1wz9kcJYMgpwN6M=", + "owner": "hyprwm", + "repo": "hyprutils", + "rev": "0c6411851cc779d551edc89b83966696201611aa", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprutils", + "type": "github" + } + }, + "hyprwayland-scanner": { + "inputs": { + "nixpkgs": [ + "hyprland", + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "hyprland", + "systems" + ] + }, + "locked": { + "lastModified": 1755184602, + "narHash": "sha256-RCBQN8xuADB0LEgaKbfRqwm6CdyopE1xIEhNc67FAbw=", + "owner": "hyprwm", + "repo": "hyprwayland-scanner", + "rev": "b3b0f1f40ae09d4447c20608e5a4faf8bf3c492d", + "type": "github" + }, + "original": { + "owner": "hyprwm", + "repo": "hyprwayland-scanner", "type": "github" } }, @@ -195,33 +487,17 @@ "type": "github" } }, - "nixpkgs-unstable": { - "locked": { - "lastModified": 1753694789, - "narHash": "sha256-cKgvtz6fKuK1Xr5LQW/zOUiAC0oSQoA9nOISB0pJZqM=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "dc9637876d0dcc8c9e5e22986b857632effeb727", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs_2": { "locked": { - "lastModified": 1741379970, - "narHash": "sha256-Wh7esNh7G24qYleLvgOSY/7HlDUzWaL/n4qzlBePpiw=", - "owner": "nixos", + "lastModified": 1763283776, + "narHash": "sha256-Y7TDFPK4GlqrKrivOcsHG8xSGqQx3A6c+i7novT85Uk=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "36fd87baa9083f34f7f5027900b62ee6d09b1f2f", + "rev": "50a96edd8d0db6cc8db57dab6bb6d6ee1f3dc49a", "type": "github" }, "original": { - "owner": "nixos", + "owner": "NixOS", "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" @@ -229,11 +505,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1754767907, - "narHash": "sha256-8OnUzRQZkqtUol9vuUuQC30hzpMreKptNyET2T9lB6g=", + "lastModified": 1763334038, + "narHash": "sha256-LBVOyaH6NFzQ3X/c6vfMZ9k4SV2ofhpxeL9YnhHNJQQ=", "owner": "nixos", "repo": "nixpkgs", - "rev": "c5f08b62ed75415439d48152c2a784e36909b1bc", + "rev": "4c8cdd5b1a630e8f72c9dd9bf582b1afb3127d2c", "type": "github" }, "original": { @@ -245,11 +521,11 @@ }, "nixpkgs_4": { "locked": { - "lastModified": 1753848940, - "narHash": "sha256-jH7fqN4HzsIlj2c/SAuVWmgUIjBwDdEKVnL97xlECHY=", + "lastModified": 1763010827, + "narHash": "sha256-RFEZh8UF4S0GMbWpDin6EzuhuykaAhXKF8qsRU7ArUE=", "owner": "nixos", "repo": "nixpkgs", - "rev": "25b37a9225cece2da4b68aca8bd0998439074362", + "rev": "d3ca3185bb27958941927598b76caf591187f9bf", "type": "github" }, "original": { @@ -277,11 +553,11 @@ "nvim_plugin-CopilotC-Nvim/CopilotChat.nvim": { "flake": false, "locked": { - "lastModified": 1753815885, - "narHash": "sha256-A9qlpDXdIfoZ/5yZ5w39pgfoxVwhklhcESYWsqQgiDY=", + "lastModified": 1762727340, + "narHash": "sha256-sT4UnxLvfuHZxkrMjFaUNVyun7sxwax83O/QB3f7fQE=", "owner": "CopilotC-Nvim", "repo": "CopilotChat.nvim", - "rev": "450fcecf2f71d0469e9c98f5967252092714ed03", + "rev": "ce485330c76a5b63ccfb02b7dd18890a748ca558", "type": "github" }, "original": { @@ -309,11 +585,11 @@ "nvim_plugin-L3MON4D3/LuaSnip": { "flake": false, "locked": { - "lastModified": 1753286973, - "narHash": "sha256-w70rSwYdjMRGCLYcwIoA4cvl6JcGQYHngCBJvRq+SXg=", + "lastModified": 1762213057, + "narHash": "sha256-Pil9m8zN3XzMtPT8spdr78dzkMW7dcpVnbWzie6524A=", "owner": "L3MON4D3", "repo": "LuaSnip", - "rev": "3d5bced1b9ae69fa3f9b1942e28af5dbc537f946", + "rev": "3732756842a2f7e0e76a7b0487e9692072857277", "type": "github" }, "original": { @@ -325,11 +601,11 @@ "nvim_plugin-MeanderingProgrammer/render-markdown.nvim": { "flake": false, "locked": { - "lastModified": 1753730059, - "narHash": "sha256-OjvoAFWaJT4+gyO/jtA2uvFdeOz7lhdkkhKQUl/kIT4=", + "lastModified": 1762952625, + "narHash": "sha256-K967UmJYqy3Xe0UeskIksczs+g00yA9YJAof1G5pQH8=", "owner": "MeanderingProgrammer", "repo": "render-markdown.nvim", - "rev": "9e51b7711c6159511e966dc42fafd58a9db9ad1d", + "rev": "f58c05f349d6e7650f4b40b0df1514400f0c10de", "type": "github" }, "original": { @@ -373,11 +649,11 @@ "nvim_plugin-Saecki/crates.nvim": { "flake": false, "locked": { - "lastModified": 1753218471, - "narHash": "sha256-5Vu3VG6Ab1Rpqzeqoa0S9sfzco7wykrSt2eSXOajm14=", + "lastModified": 1755956579, + "narHash": "sha256-jfmST/S9ymwgQ99PTCOlJkk5zaxE5HiDV16TmTISDII=", "owner": "Saecki", "repo": "crates.nvim", - "rev": "c915ab5334a46178f64ce17ab606a79454bcd14f", + "rev": "ac9fa498a9edb96dc3056724ff69d5f40b898453", "type": "github" }, "original": { @@ -389,11 +665,11 @@ "nvim_plugin-aznhe21/actions-preview.nvim": { "flake": false, "locked": { - "lastModified": 1745779150, - "narHash": "sha256-rQjwlu5gQcOvxF72lr9ugPRl0W78wCWGWPhpN1oOMbs=", + "lastModified": 1759462626, + "narHash": "sha256-YUeWBXxxeurfWBi0PjUi6izqYAvUw9DHmvsuPXm7ohw=", "owner": "aznhe21", "repo": "actions-preview.nvim", - "rev": "36513ad213855d497b7dd3391a24d1d75d58e36f", + "rev": "cb938c25edaac38d362555f19244a9cb85d561e8", "type": "github" }, "original": { @@ -405,11 +681,11 @@ "nvim_plugin-b0o/schemastore.nvim": { "flake": false, "locked": { - "lastModified": 1753826458, - "narHash": "sha256-7VZmb4JPlLF4tmEuuM69etdyCIxdH1PNZlT1mijzo7o=", + "lastModified": 1762970439, + "narHash": "sha256-17PacghZB5pxXgui7KrIkc43yqh9aQe2thyt3OpgzXw=", "owner": "b0o", "repo": "schemastore.nvim", - "rev": "3cd1c7267282b4d89618674de36a6d866981347e", + "rev": "229e7ecd3ed9b882cc172f7e8a8d6eb8ba4124ff", "type": "github" }, "original": { @@ -421,11 +697,11 @@ "nvim_plugin-catppuccin/nvim": { "flake": false, "locked": { - "lastModified": 1753779499, - "narHash": "sha256-lnIlYUhUQXuoVWv000n5Ev4YNSZY+U70b3npZbMUDg4=", + "lastModified": 1762006357, + "narHash": "sha256-WNOuJ+XdO0x3Vlc8mALwtFU6iwJXilOM/NF0F1161FQ=", "owner": "catppuccin", "repo": "nvim", - "rev": "94f6e8a06b6bb7b8e5529cf9f93adb4654534241", + "rev": "234fc048de931a0e42ebcad675bf6559d75e23df", "type": "github" }, "original": { @@ -437,11 +713,11 @@ "nvim_plugin-chrisgrieser/nvim-early-retirement": { "flake": false, "locked": { - "lastModified": 1750108178, - "narHash": "sha256-3I7Xup+v9Yq9/nJQ1F5CDW99oFQcxbinv7VQcKeA16Y=", + "lastModified": 1760385962, + "narHash": "sha256-PtpD6Uc4GK4dSJynWH5d6c7XOWXfYODXJ3FyOY1eZNo=", "owner": "chrisgrieser", "repo": "nvim-early-retirement", - "rev": "d9ffd8f70ed6d466cecd3e7e2dd1425b0010932f", + "rev": "9109589b542773c9ad2a34067a085874f255577b", "type": "github" }, "original": { @@ -469,11 +745,11 @@ "nvim_plugin-folke/lazy.nvim": { "flake": false, "locked": { - "lastModified": 1740511197, - "narHash": "sha256-nQ8PR9DTdzg6Z2rViuVD6Pswc2VvDQwS3uMNgyDh5ls=", + "lastModified": 1762421181, + "narHash": "sha256-h5404njTAfqMJFQ3MAr2PWSbV81eS4aIs0cxAXkT0EM=", "owner": "folke", "repo": "lazy.nvim", - "rev": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a", + "rev": "85c7ff3711b730b4030d03144f6db6375044ae82", "type": "github" }, "original": { @@ -501,11 +777,11 @@ "nvim_plugin-folke/which-key.nvim": { "flake": false, "locked": { - "lastModified": 1740233407, - "narHash": "sha256-uvMcSduMr7Kd2oUmIOYzvWF4FIl6bZxIYm9FSw/3pCo=", + "lastModified": 1761664528, + "narHash": "sha256-rKaYnXM4gRkkF/+xIFm2oCZwtAU6CeTdRWU93N+Jmbc=", "owner": "folke", "repo": "which-key.nvim", - "rev": "370ec46f710e058c9c1646273e6b225acf47cbed", + "rev": "3aab2147e74890957785941f0c1ad87d0a44c15a", "type": "github" }, "original": { @@ -533,11 +809,11 @@ "nvim_plugin-hrsh7th/cmp-nvim-lsp": { "flake": false, "locked": { - "lastModified": 1743496195, - "narHash": "sha256-iaihXNCF5bB5MdeoosD/kc3QtpA/QaIDZVLiLIurBSM=", + "lastModified": 1755085771, + "narHash": "sha256-X1rppwf2xBPrmB93ptXukOnEBDZmfjJd4F5ObNa1DHs=", "owner": "hrsh7th", "repo": "cmp-nvim-lsp", - "rev": "a8912b88ce488f411177fc8aed358b04dc246d7b", + "rev": "bd5a7d6db125d4654b50eeae9f5217f24bb22fd3", "type": "github" }, "original": { @@ -565,11 +841,11 @@ "nvim_plugin-hrsh7th/nvim-cmp": { "flake": false, "locked": { - "lastModified": 1744514599, - "narHash": "sha256-l5z+PT4S9b09d2M+J/tHVd9W9Ss3eQQk5Ykpz2Qjxxw=", + "lastModified": 1762254225, + "narHash": "sha256-Pnfa1u+hoVIKo7Jvv3VF/p6m0ALXywwUNEb2FI7TeEc=", "owner": "hrsh7th", "repo": "nvim-cmp", - "rev": "b5311ab3ed9c846b585c0c15b7559be131ec4be9", + "rev": "106c4bcc053a5da783bf4a9d907b6f22485c2ea0", "type": "github" }, "original": { @@ -581,11 +857,11 @@ "nvim_plugin-j-hui/fidget.nvim": { "flake": false, "locked": { - "lastModified": 1753813056, - "narHash": "sha256-rQIEO9C9YokdwaPfKsu7Rb6pi51Tm0Qqo/igBKeCW/8=", + "lastModified": 1761243883, + "narHash": "sha256-XXTeJweQRIsC/WFhFxFbepOETV8e5Wfmh513su2Wve0=", "owner": "j-hui", "repo": "fidget.nvim", - "rev": "c1725fbadd99c810273b202d67dbfedf66e61eaf", + "rev": "e32b672d8fd343f9d6a76944fedb8c61d7d8111a", "type": "github" }, "original": { @@ -613,11 +889,11 @@ "nvim_plugin-lewis6991/gitsigns.nvim": { "flake": false, "locked": { - "lastModified": 1753442199, - "narHash": "sha256-7BKwxHoFWGepqm8/J+RB6zu+7IpGUUmgLP4a2O2lIuA=", + "lastModified": 1760888451, + "narHash": "sha256-eGpB7YYWbyCCGYXEYAM432srSp/lUo5C1b0J3OYjwnY=", "owner": "lewis6991", "repo": "gitsigns.nvim", - "rev": "b01433169be710d6c69f7b4ee264d9670698b831", + "rev": "20ad4419564d6e22b189f6738116b38871082332", "type": "github" }, "original": { @@ -661,11 +937,11 @@ "nvim_plugin-m4xshen/hardtime.nvim": { "flake": false, "locked": { - "lastModified": 1753760289, - "narHash": "sha256-BgJ0gKy/zxU82L7WocXLkXwD97pnCvpGyJVzSHeUtG0=", + "lastModified": 1757738091, + "narHash": "sha256-Jy9ARUHU1ySpSxxoS3hLRjxp5Lqt7juWN5Jnbdo0rg0=", "owner": "m4xshen", "repo": "hardtime.nvim", - "rev": "6d7664d5bdfaea44c5f50b29f5239fab7b00c273", + "rev": "b4e431934af1fe224a3a801f632c008278cb7628", "type": "github" }, "original": { @@ -677,11 +953,11 @@ "nvim_plugin-mbbill/undotree": { "flake": false, "locked": { - "lastModified": 1752437854, - "narHash": "sha256-5WofUOTYE+Nmx3A5OoZBneJBHZ8bdGEYDZ6vTMx1OE0=", + "lastModified": 1759186837, + "narHash": "sha256-EWOH08KAWyoT9m45/B1d5aKQQJtd3k4orJbagVsxe08=", "owner": "mbbill", "repo": "undotree", - "rev": "28f2f54a34baff90ea6f4a735ef1813ad875c743", + "rev": "0f1c9816975b5d7f87d5003a19c53c6fd2ff6f7f", "type": "github" }, "original": { @@ -693,11 +969,11 @@ "nvim_plugin-mfussenegger/nvim-lint": { "flake": false, "locked": { - "lastModified": 1753039571, - "narHash": "sha256-ly5S0KAZN8Jeag22SCX+5XKqn3d+zCRN/8Jf5HlEn9I=", + "lastModified": 1762442588, + "narHash": "sha256-TRiTTCfOoFXQvEw6Dyjx70Y2svpP7ln0LbYLOHw2Lzw=", "owner": "mfussenegger", "repo": "nvim-lint", - "rev": "9c6207559297b24f0b7c32829f8e45f7d65b991f", + "rev": "8b349e822a36e9480aed96c6dd2f757f80524a35", "type": "github" }, "original": { @@ -709,11 +985,11 @@ "nvim_plugin-mrcjkb/rustaceanvim": { "flake": false, "locked": { - "lastModified": 1753575790, - "narHash": "sha256-Iw3W0Inn0CpZTXyxk54WRtsXP5DYm+7bKH/HSO/diBo=", + "lastModified": 1762620523, + "narHash": "sha256-w1BXvvIK2db4mhI+dIOut7XFAVyAzzvuLu6ThkHYfw4=", "owner": "mrcjkb", "repo": "rustaceanvim", - "rev": "f845bb055397019c4bc70f9c76376ca490f4c783", + "rev": "ccd8f99b159f53113e503fa99a613875407db49f", "type": "github" }, "original": { @@ -725,11 +1001,11 @@ "nvim_plugin-neovim/nvim-lspconfig": { "flake": false, "locked": { - "lastModified": 1753837371, - "narHash": "sha256-IsdjkpE+T5irvmH5fam5EmsCpzwxSEiXV3r2iXsOVT0=", + "lastModified": 1762966402, + "narHash": "sha256-2wflkFO9GYm5kFais+zKewraBItknXeNSmUKe8muj+U=", "owner": "neovim", "repo": "nvim-lspconfig", - "rev": "3db16ceeea947517f0dc1404c24dcb5ab0c91d26", + "rev": "b34fbdffdcb6295c7a25df6ba375452a2e73c32e", "type": "github" }, "original": { @@ -738,22 +1014,6 @@ "type": "github" } }, - "nvim_plugin-nosduco/remote-sshfs.nvim": { - "flake": false, - "locked": { - "lastModified": 1748880705, - "narHash": "sha256-eTnVFOR7FHlkU9kwrk3q3pNo/U8OR2gJrnrMUQKGi2A=", - "owner": "nosduco", - "repo": "remote-sshfs.nvim", - "rev": "6e893c32ff7c5b8d0d501b748c525fa53963fb35", - "type": "github" - }, - "original": { - "owner": "nosduco", - "repo": "remote-sshfs.nvim", - "type": "github" - } - }, "nvim_plugin-numToStr/Comment.nvim": { "flake": false, "locked": { @@ -789,11 +1049,11 @@ "nvim_plugin-nvim-lualine/lualine.nvim": { "flake": false, "locked": { - "lastModified": 1749383457, - "narHash": "sha256-2aPgA7riA/FubQpTkqsxLKl7OZ8L6FkucNHc2QEx2HQ=", + "lastModified": 1760596863, + "narHash": "sha256-hdrAdG3hC2sAevQ6a9xizqPgEgnNKxuc5rBYn0pKM1c=", "owner": "nvim-lualine", "repo": "lualine.nvim", - "rev": "a94fc68960665e54408fe37dcf573193c4ce82c9", + "rev": "3946f0122255bc377d14a59b27b609fb3ab25768", "type": "github" }, "original": { @@ -805,11 +1065,11 @@ "nvim_plugin-nvim-telescope/telescope-file-browser.nvim": { "flake": false, "locked": { - "lastModified": 1750040034, - "narHash": "sha256-NHcU3c+1pLeypHr9xXKmqvdwB1QM/vj5axzjpFEQCLQ=", + "lastModified": 1754424906, + "narHash": "sha256-FlJ7w5Ywwq03E0oYdnFJFb+MMUMQMa+5QhDMy2O9tGQ=", "owner": "nvim-telescope", "repo": "telescope-file-browser.nvim", - "rev": "7bf55ed0ff5be182ad3301cff266581fc1c56cce", + "rev": "3610dc7dc91f06aa98b11dca5cc30dfa98626b7e", "type": "github" }, "original": { @@ -821,11 +1081,11 @@ "nvim_plugin-nvim-telescope/telescope-fzf-native.nvim": { "flake": false, "locked": { - "lastModified": 1741765009, - "narHash": "sha256-Zyv8ikxdwoUiDD0zsqLzfhBVOm/nKyJdZpndxXEB6ow=", + "lastModified": 1762521376, + "narHash": "sha256-ChEM4jJonAE4qXd/dgTu2mdlpNBj5rEdpA8TgR38oRM=", "owner": "nvim-telescope", "repo": "telescope-fzf-native.nvim", - "rev": "1f08ed60cafc8f6168b72b80be2b2ea149813e55", + "rev": "6fea601bd2b694c6f2ae08a6c6fab14930c60e2c", "type": "github" }, "original": { @@ -853,11 +1113,11 @@ "nvim_plugin-nvim-telescope/telescope.nvim": { "flake": false, "locked": { - "lastModified": 1747012888, - "narHash": "sha256-JpW0ehsX81yVbKNzrYOe1hdgVMs6oaaxMLH6lECnOJg=", + "lastModified": 1762931078, + "narHash": "sha256-7DHFXZxUtPUQkpy2zjC2lwhj7isBCyEwh9LbtqAjSFs=", "owner": "nvim-telescope", "repo": "telescope.nvim", - "rev": "b4da76be54691e854d3e0e02c36b0245f945c2c7", + "rev": "3a12a853ebf21ec1cce9a92290e3013f8ae75f02", "type": "github" }, "original": { @@ -869,11 +1129,11 @@ "nvim_plugin-nvim-tree/nvim-tree.lua": { "flake": false, "locked": { - "lastModified": 1753762764, - "narHash": "sha256-uoiPwURO0ATaYeLozG8X44cC4eWf1wANspljkjh/qeY=", + "lastModified": 1762812542, + "narHash": "sha256-tCIi3C025gooix20RBCGKBtnuGFrZezQGbwv+tz37Wc=", "owner": "nvim-tree", "repo": "nvim-tree.lua", - "rev": "65bae449224b8a3bc149471b96587b23b13a9946", + "rev": "1eda2569394f866360e61f590f1796877388cb8a", "type": "github" }, "original": { @@ -885,11 +1145,11 @@ "nvim_plugin-nvim-tree/nvim-web-devicons": { "flake": false, "locked": { - "lastModified": 1753653538, - "narHash": "sha256-1IwOcdIUJuh7YC2YTw0VnGI2UIg7F/ipxLLfQdPzjFQ=", + "lastModified": 1761440007, + "narHash": "sha256-klBjUtj0AvarN5a6O8Hh2t5BuOTe/m3ps2cHnlxVJvE=", "owner": "nvim-tree", "repo": "nvim-web-devicons", - "rev": "4a8369f4c78ef6f6f895f0cec349e48f74330574", + "rev": "8dcb311b0c92d460fac00eac706abd43d94d68af", "type": "github" }, "original": { @@ -901,11 +1161,11 @@ "nvim_plugin-nvim-treesitter/nvim-treesitter-context": { "flake": false, "locked": { - "lastModified": 1753794238, - "narHash": "sha256-9KKJJhKCjlKakVFyF3EUj2sobrKaJBMIGqkwbVjD9Mk=", + "lastModified": 1762769683, + "narHash": "sha256-ICwAUXKngSPsJ6VV+84KUPqtAwlGPrm4FIf9ioisiz8=", "owner": "nvim-treesitter", "repo": "nvim-treesitter-context", - "rev": "02fd97c803962108d129cf42e05adc5eff7f89c1", + "rev": "660861b1849256398f70450afdf93908d28dc945", "type": "github" }, "original": { @@ -933,11 +1193,11 @@ "nvim_plugin-rcarriga/nvim-notify": { "flake": false, "locked": { - "lastModified": 1753086914, - "narHash": "sha256-uQBB3fajHowivArxbtmEJvVU3+QO0VApYpVNMA58UkI=", + "lastModified": 1757190131, + "narHash": "sha256-h7STMjY+CBTqBkIDJXgtJz4WhNeQ02ES2Jesi3jZXeM=", "owner": "rcarriga", "repo": "nvim-notify", - "rev": "397c7c1184745fca649e5104de659e6392ef5a4d", + "rev": "8701bece920b38ea289b457f902e2ad184131a5d", "type": "github" }, "original": { @@ -949,11 +1209,11 @@ "nvim_plugin-rmagatti/auto-session": { "flake": false, "locked": { - "lastModified": 1753745747, - "narHash": "sha256-Uowy7CMw6+4y1ME5vNTUSxDCOBfjnfJRpteAKfUo6A8=", + "lastModified": 1761853983, + "narHash": "sha256-9/SfXUAZIiPAS5ojvJCxDCxmuLoL/kIrAsNWAoLWFq4=", "owner": "rmagatti", "repo": "auto-session", - "rev": "c93a9bfd8a5cbf931a6ead5c824998da874b9f79", + "rev": "292492ab7af4bd8b9e37e28508bc8ce995722fd5", "type": "github" }, "original": { @@ -962,7 +1222,7 @@ "type": "github" } }, - "nvim_plugin-ron/ron.vim": { + "nvim_plugin-ron-rs/ron.vim": { "flake": false, "locked": { "lastModified": 1660904719, @@ -1013,11 +1273,11 @@ "nvim_plugin-stevearc/conform.nvim": { "flake": false, "locked": { - "lastModified": 1751472067, - "narHash": "sha256-bm6266h0rKYcOeMPVqjh3DEKe5M0EIPuo4rvmRtkpvs=", + "lastModified": 1762317018, + "narHash": "sha256-dJf8g5I85De4JYYCL4k7u85fatjU2BmF9pO5WbxhCQQ=", "owner": "stevearc", "repo": "conform.nvim", - "rev": "973f3cb73887d510321653044791d7937c7ec0fa", + "rev": "cde4da5c1083d3527776fee69536107d98dae6c9", "type": "github" }, "original": { @@ -1093,11 +1353,11 @@ "nvim_plugin-windwp/nvim-ts-autotag": { "flake": false, "locked": { - "lastModified": 1739910276, - "narHash": "sha256-a3Bcql68mp3y5bH9XMiDTQB0e75T+qFB593objIGg/I=", + "lastModified": 1757545454, + "narHash": "sha256-nT2W5gKFEfzP7MztLjm7yqwam3ADk0svcMdLg2nmI/4=", "owner": "windwp", "repo": "nvim-ts-autotag", - "rev": "a1d526af391f6aebb25a8795cbc05351ed3620b5", + "rev": "c4ca798ab95b316a768d51eaaaee48f64a4a46bc", "type": "github" }, "original": { @@ -1125,11 +1385,11 @@ "nvim_plugin-zbirenbaum/copilot.lua": { "flake": false, "locked": { - "lastModified": 1753817982, - "narHash": "sha256-AHDh24MQ3OMNKUCuKaA9KrR4l0I+dT7tF+Bpl6PBSx8=", + "lastModified": 1762533352, + "narHash": "sha256-/8baBZIhZdQ4B0hoTmh68I2p08rJJ7INil77qIu9vCU=", "owner": "zbirenbaum", "repo": "copilot.lua", - "rev": "55e43020dcd59c6da41cc773971380a003100844", + "rev": "5bde2cfe01f049f522eeb8b52c5c723407db8bdf", "type": "github" }, "original": { @@ -1138,42 +1398,27 @@ "type": "github" } }, - "opencode": { - "flake": false, - "locked": { - "lastModified": 1754526276, - "narHash": "sha256-OkkjbytvvUBOcSCjf3zd8NWLaM+I1tUR9IxcRZrdVeM=", - "owner": "sst", - "repo": "opencode", - "rev": "1a561bb5120b1b87a4c477f7cb6c3a0a4ce79114", - "type": "github" - }, - "original": { - "owner": "sst", - "ref": "v0.3.133", - "repo": "opencode", - "type": "github" - } - }, - "ragenix": { + "pre-commit-hooks": { "inputs": { - "agenix": "agenix", - "crane": "crane", - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs_2", - "rust-overlay": "rust-overlay" + "flake-compat": "flake-compat", + "gitignore": "gitignore", + "nixpkgs": [ + "hyprland", + "hyprland", + "nixpkgs" + ] }, "locked": { - "lastModified": 1744897914, - "narHash": "sha256-GIVU92o2TZBnKQXTb76zpQbWR4zjU2rFqWKNIIpXnqA=", - "owner": "yaxitech", - "repo": "ragenix", - "rev": "40f2e17ecaeab4d78ec323e96a04548c0aaa5223", + "lastModified": 1763319842, + "narHash": "sha256-YG19IyrTdnVn0l3DvcUYm85u3PaqBt6tI6VvolcuHnA=", + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "7275fa67fbbb75891c16d9dee7d88e58aea2d761", "type": "github" }, "original": { - "owner": "yaxitech", - "repo": "ragenix", + "owner": "cachix", + "repo": "git-hooks.nix", "type": "github" } }, @@ -1181,6 +1426,8 @@ "inputs": { "common": "common", "disko": "disko", + "home-manager": "home-manager", + "hyprland": "hyprland", "nixpkgs": "nixpkgs_3", "ros_neovim": "ros_neovim" } @@ -1218,7 +1465,6 @@ "nvim_plugin-mfussenegger/nvim-lint": "nvim_plugin-mfussenegger/nvim-lint", "nvim_plugin-mrcjkb/rustaceanvim": "nvim_plugin-mrcjkb/rustaceanvim", "nvim_plugin-neovim/nvim-lspconfig": "nvim_plugin-neovim/nvim-lspconfig", - "nvim_plugin-nosduco/remote-sshfs.nvim": "nvim_plugin-nosduco/remote-sshfs.nvim", "nvim_plugin-numToStr/Comment.nvim": "nvim_plugin-numToStr/Comment.nvim", "nvim_plugin-nvim-lua/plenary.nvim": "nvim_plugin-nvim-lua/plenary.nvim", "nvim_plugin-nvim-lualine/lualine.nvim": "nvim_plugin-nvim-lualine/lualine.nvim", @@ -1232,7 +1478,7 @@ "nvim_plugin-rafamadriz/friendly-snippets": "nvim_plugin-rafamadriz/friendly-snippets", "nvim_plugin-rcarriga/nvim-notify": "nvim_plugin-rcarriga/nvim-notify", "nvim_plugin-rmagatti/auto-session": "nvim_plugin-rmagatti/auto-session", - "nvim_plugin-ron/ron.vim": "nvim_plugin-ron/ron.vim", + "nvim_plugin-ron-rs/ron.vim": "nvim_plugin-ron-rs/ron.vim", "nvim_plugin-saadparwaiz1/cmp_luasnip": "nvim_plugin-saadparwaiz1/cmp_luasnip", "nvim_plugin-sindrets/diffview.nvim": "nvim_plugin-sindrets/diffview.nvim", "nvim_plugin-stevearc/conform.nvim": "nvim_plugin-stevearc/conform.nvim", @@ -1243,14 +1489,14 @@ "nvim_plugin-windwp/nvim-ts-autotag": "nvim_plugin-windwp/nvim-ts-autotag", "nvim_plugin-zbirenbaum/copilot-cmp": "nvim_plugin-zbirenbaum/copilot-cmp", "nvim_plugin-zbirenbaum/copilot.lua": "nvim_plugin-zbirenbaum/copilot.lua", - "rust-overlay": "rust-overlay_2" + "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1753849449, - "narHash": "sha256-zBShks1kHnfIq+tkBNkA41NCrhwJNbkhW3a/jLUIr50=", + "lastModified": 1763012261, + "narHash": "sha256-xrxrvRT9+2dQRs5O5GjgFcCpSHijcweg/3nERf1A/3c=", "ref": "refs/heads/master", - "rev": "86093285e53caae7d2bf9a8d0046be3d4245a35b", - "revCount": 299, + "rev": "66100486bb45e80f6007afd780ad0914e263ba8e", + "revCount": 321, "type": "git", "url": "https://git.joshuabell.xyz/ringofstorms/nvim" }, @@ -1260,28 +1506,6 @@ } }, "rust-overlay": { - "inputs": { - "nixpkgs": [ - "common", - "ragenix", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1741400194, - "narHash": "sha256-tEpgT+q5KlGjHSm8MnINgTPErEl8YDzX3Eps8PVc09g=", - "owner": "oxalica", - "repo": "rust-overlay", - "rev": "16b6045a232fea0e9e4c69e55a6e269607dd8e3f", - "type": "github" - }, - "original": { - "owner": "oxalica", - "repo": "rust-overlay", - "type": "github" - } - }, - "rust-overlay_2": { "inputs": { "nixpkgs": [ "ros_neovim", @@ -1289,11 +1513,11 @@ ] }, "locked": { - "lastModified": 1753843724, - "narHash": "sha256-a0Aab7Zst68GqvNAMh9Ejwnp8gawGnruOMtEWZ0HHjM=", + "lastModified": 1763001554, + "narHash": "sha256-wsfhRTuxu6f06RMmP4JWcq3wWRlmYtQaJZ6b3f+EJ94=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "01ac47d86311fb030023f1dfc5f6bc368b9c6cee", + "rev": "315d97eb753cee8e1aa039a5e622b84d32a454bb", "type": "github" }, "original": { @@ -1304,31 +1528,63 @@ }, "systems": { "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", "type": "github" }, "original": { "owner": "nix-systems", - "repo": "default", + "repo": "default-linux", "type": "github" } }, - "systems_2": { + "xdph": { + "inputs": { + "hyprland-protocols": [ + "hyprland", + "hyprland", + "hyprland-protocols" + ], + "hyprlang": [ + "hyprland", + "hyprland", + "hyprlang" + ], + "hyprutils": [ + "hyprland", + "hyprland", + "hyprutils" + ], + "hyprwayland-scanner": [ + "hyprland", + "hyprland", + "hyprwayland-scanner" + ], + "nixpkgs": [ + "hyprland", + "hyprland", + "nixpkgs" + ], + "systems": [ + "hyprland", + "hyprland", + "systems" + ] + }, "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", - "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "lastModified": 1761431178, + "narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=", + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", + "rev": "4b8801228ff958d028f588f0c2b911dbf32297f9", "type": "github" }, "original": { - "owner": "nix-systems", - "repo": "default", + "owner": "hyprwm", + "repo": "xdg-desktop-portal-hyprland", "type": "github" } } diff --git a/hosts/testbed/flake.nix b/hosts/testbed/flake.nix index 58c3842c..3a5415be 100644 --- a/hosts/testbed/flake.nix +++ b/hosts/testbed/flake.nix @@ -1,16 +1,19 @@ { inputs = { nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05"; - # nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + home-manager.url = "github:rycee/home-manager/release-25.05"; # Use relative to get current version for testing - # common.url = "path:../../common"; - common.url = "git+https://git.joshuabell.xyz/ringofstorms/dotfiles"; + # common.url = "path:../../flakes/common"; + common.url = "git+https://git.joshuabell.xyz/ringofstorms/dotfiles?dir=flakes/common"; disko.url = "github:nix-community/disko/latest"; disko.inputs.nixpkgs.follows = "nixpkgs"; # impermanence.url = "github:nix-community/impermanence"; + # hyprland.url = "path:../../flakes/hyprland"; + hyprland.url = "git+https://git.joshuabell.xyz/ringofstorms/dotfiles?dir=flakes/hyprland"; + ros_neovim.url = "git+https://git.joshuabell.xyz/ringofstorms/nvim"; }; @@ -18,88 +21,102 @@ { self, nixpkgs, + home-manager, common, ros_neovim, disko, + hyprland, # impermanence, ... }: let - configuration_name = "testbed"; + configurationName = "testbed"; + stateVersion = "25.05"; + primaryUser = "luser"; lib = nixpkgs.lib; in { packages = { - x86_64-linux.vm = self.nixosConfigurations.${configuration_name}.config.system.build.vmWithDisko; + x86_64-linux.vm = self.nixosConfigurations.${configurationName}.config.system.build.vmWithDisko; }; nixosConfigurations = { - "${configuration_name}" = ( + "${configurationName}" = ( lib.nixosSystem { modules = [ + home-manager.nixosModules.default + disko.nixosModules.disko - # impermanence.nixosModules.impermanence - common.nixosModules.default ros_neovim.nixosModules.default - ./configuration.nix + hyprland.nixosModules.default + # impermanence.nixosModules.impermanence + + common.nixosModules.essentials + common.nixosModules.git + common.nixosModules.boot_systemd + common.nixosModules.hardening + common.nixosModules.nix_options + common.nixosModules.podman + common.nixosModules.timezone_auto + common.nixosModules.zsh + ./hardware-configuration.nix ./disko-config.nix ( { config, pkgs, ... }: - { + rec { + # Home Manager + home-manager = { + useUserPackages = true; + useGlobalPkgs = true; + backupFileExtension = "bak"; + # add all normal users to home manager so it applies to them + users = lib.mapAttrs (name: user: { + home.stateVersion = stateVersion; + programs.home-manager.enable = true; + }) (lib.filterAttrs (name: user: user.isNormalUser or false) users.users); + + sharedModules = [ + common.homeManagerModules.tmux + common.homeManagerModules.atuin + common.homeManagerModules.direnv + common.homeManagerModules.git + common.homeManagerModules.postgres_cli_options + common.homeManagerModules.starship + common.homeManagerModules.zoxide + common.homeManagerModules.zsh + ]; + }; + + # System configuration + system.stateVersion = stateVersion; + networking.hostName = configurationName; + programs.nh.flake = "/home/${primaryUser}/.config/nixos-config/hosts/${configurationName}"; + nixpkgs.config.allowUnfree = true; + users.users = { + "${primaryUser}" = { + isNormalUser = true; + initialPassword = "password1"; + shell = pkgs.zsh; + extraGroups = [ + "wheel" + "networkmanager" + "video" + "input" + ]; + openssh.authorizedKeys.keys = [ + ]; + }; + root = { + shell = pkgs.zsh; + openssh.authorizedKeys.keys = [ + ]; + }; + }; + environment.systemPackages = with pkgs; [ cowsay lolcat ]; - - ringofstorms_common = { - systemName = configuration_name; - boot.systemd.enable = true; - programs = { - ssh.enable = true; - podman.enable = true; - }; - users = { - admins = [ "luser" ]; # First admin is also the primary user owning nix config - users = { - root = { - openssh.authorizedKeys.keys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH2KFSRkViT+asBTjCgA7LNP3SHnfNCW+jHbV08VUuIi nix2nix" - ]; - shell = pkgs.zsh; - }; - luser = { - openssh.authorizedKeys.keys = [ - "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH2KFSRkViT+asBTjCgA7LNP3SHnfNCW+jHbV08VUuIi nix2nix" - ]; - extraGroups = [ - "networkmanager" - "video" - "input" - ]; - shell = pkgs.zsh; - }; - }; - }; - homeManager = { - users = { - luser = { - imports = with common.homeManagerModules; [ - kitty - tmux - atuin - direnv - git - nix_deprecations - postgres - ssh - starship - zoxide - zsh - ]; - }; - }; - }; - }; } ) ]; diff --git a/hosts/testbed/testbed.qcow2 b/hosts/testbed/testbed.qcow2 new file mode 100644 index 00000000..bba2fba3 Binary files /dev/null and b/hosts/testbed/testbed.qcow2 differ diff --git a/readme.md b/readme.md index f248017c..ec8d6cbe 100644 --- a/readme.md +++ b/readme.md @@ -27,12 +27,103 @@ 1. Install nix minimal: (new with btrfs backing) +```bash +# Partition main drive with btrfs +lsblk +echo "Read the above output and determine what drive to install NixOS on" +read -p "Enter device name: " DEVICE + +# Partitioning +echo "Creating partitions on $DEVICE..." +parted /dev/$DEVICE -- mklabel gpt # make GPT partition table +parted /dev/$DEVICE -- mkpart NIXROOT 2GB 100% # make root partition (2GB offset for boot) +parted /dev/$DEVICE -- mkpart ESP fat32 1MB 2GB # make boot partition, 1MB alignment offset +parted /dev/$DEVICE -- set 2 esp on # make boot partition bootable + +ROOT=$DEVICE"1" +BOOT=$DEVICE"2" + +# Encryption Luks +prompt="Use encryption on root partition?" var=ENC && read -r -p "$prompt (y/n) [n]: " resp && resp=$(echo "$resp" | tr '[:upper:]' '[:lower:]'); [[ "$resp" == "y" || "$resp" == "yes" || "$resp" == "1" ]] && export $var=true || export $var=false +if [ $ENC = true ]; then + while true; do + echo "Setting up encrypted root, you will want to save the passphrase somewhere!" + cryptsetup luksFormat /dev/$ROOT + if [ $? -eq 0 ]; then + echo "Encryption setup successful" + cryptsetup luksOpen /dev/$ROOT cryptroot + break + elif [ $? -eq 2 ]; then + echo "Missmatched passphrase, try again or select NO to cancel encryption" + else + prompt="Failed to setup encrypted root, continue without encryption?" var=CON && read -r -p "$prompt (y/n) [n]: " resp && resp=$(echo "$resp" | tr '[:upper:]' '[:lower:]'); [[ "$resp" == "y" || "$resp" == "yes" || "$resp" == "1" ]] && export $var=true || export $var=false + if [ $CON = true ]; then + ENC=false + break + fi + fi + done +fi + +if [ $ENC = true ]; then ROOTP="/dev/mapper/cryptroot" ; else ROOTP="/dev/$ROOT"; fi + +# Formatting +echo "Formatting drives..." +mkfs.fat -F 32 -n NIXBOOT /dev/$BOOT +mkfs.btrfs -fL NIXROOT $ROOTP + +# Subvolumes +prompt="Use subvolumes for nix store and snapshots?" var=SUBV && read -r -p "$prompt (y/n) [n]: " resp && resp=$(echo "$resp" | tr '[:upper:]' '[:lower:]'); [[ "$resp" == "y" || "$resp" == "yes" || "$resp" == "1" ]] && export $var=true || export $var=false +if [ $SUBV = true ]; then + mount $ROOTP /mnt + btrfs subvolume create /mnt/root + btrfs subvolume create /mnt/nix + btrfs subvolume create /mnt/snapshots + umount /mnt +fi + +if [ $SUBV = true ]; then + mount $ROOTP /mnt + mount -o subvol=root,compress=zstd,noatime $ROOTP /mnt + mkdir -p /mnt/{nix,boot,.snapshots} + mount -o subvol=nix,compress=zstd,noatime $ROOTP /mnt/nix + mount -o subvol=snapshots,compress=zstd,noatime $ROOTP /mnt/.snapshots + mount -o umask=077 /dev/disk/by-label/NIXBOOT /mnt/boot +else + mount -o compress=zstd,noatime $ROOTP /mnt + mkdir -p /mnt/boot + mount -o umask=077 /dev/disk/by-label/NIXBOOT /mnt/boot +fi + +echo "Generating nixos-config..." +nixos-generate-config --root /mnt + +prompt="Add swap file?" var=SWP && read -r -p "$prompt (y/n) [n]: " resp && resp=$(echo "$resp" | tr '[:upper:]' '[:lower:]'); [[ "$resp" == "y" || "$resp" == "yes" || "$resp" == "1" ]] && export $var=true || export $var=false +if [ $SWP = true ]; then + SIZE=$(grep MemTotal /proc/meminfo | awk 'function ceil(x, y){y=int(x); return(x>y? y+1:y)} {print ceil($2/1024/1024)}') + read -r -p "Custom size in GB? [$SIZE]" SIZE_OVERRIDE + SIZE="${SIZE_OVERRIDE:-$SIZE}" + + SWAP_DEVICE=' swapDevices = [ { device = "/.swapfile"; size = $SIZE * 1024; } ];' + sed -i "/swapDevices/c\\$SWAP_DEVICE" /mnt/etc/nixos/hardware-configuration.nix + echo "Added swap device to hardware configuration" +fi + +echo "Getting initial config for Jason" +curl -o /mnt/etc/nixos/jason.nix https://gist.joshuabell.xyz/ringofstorms/jason-nix/raw/HEAD/jason.nix +sed -i '/\.\/hardware-configuration.nix/a \ ./jason.nix' /mnt/etc/nixos/configuration.nix +echo "Added config to imports of configuration.nix" + +echo "Installing nixos" +sudo nixos-install +``` + - Partitions - `parted /dev/DEVICE -- mklabel gpt` - make GPT partition table - `parted /dev/DEVICE -- mkpart NIXROOT 2GB 100%` - make root partition (2GB offset for boot) - `parted /dev/DEVICE -- mkpart ESP fat32 1MB 2GB` - make boot partition (2GB) - `parted /dev/DEVICE -- set 2 esp on` - make boot bootable -- LUKS Encryption +- LUKS Encryption (optional) - `cryptsetup luksFormat /dev/DEVICE_1` - Create passphrase and save to bitwarden - `cryptsetup luksOpen /dev/DEVUCE_1 cryptroot` @@ -41,10 +132,11 @@ - `chmod 400 /tmp/keyfile` - `cryptsetup luksAddKey /dev/DEVICE_1 /tmp/keyfile_DEVICE_1` - Formatting - - `mkfs.btrfs -L NIXROOT /dev/mapper/cryptroot` - - `mkfs.fat -F 32 -n NIXBOOT /dev/DEVICE_2` +- `mkfs.btrfs -L NIXROOT /dev/mapper/cryptroot` + - `/dev/sda1` if not encyrpted instead of dev mapper cryptroot +- `mkfs.fat -F 32 -n NIXBOOT /dev/DEVICE_2` - Create btrfs subvolumes (optional: for better snapshot perf) - - `mount /dev/mapper/cryptroot /mnt` + - `mount /dev/mapper/cryptroot /mnt` (`/dev/sda1` for non encrypted) - `btrfs subvolume create /mnt/root` - `btrfs subvolume create /mnt/nix` - `btrfs subvolume create /mnt/snapshots` diff --git a/utilities/asd b/utilities/asd new file mode 100644 index 00000000..e69de29b diff --git a/utilities/nixos-installers/flake.lock b/utilities/nixos-installers/flake.lock new file mode 100644 index 00000000..a8e4ffc5 --- /dev/null +++ b/utilities/nixos-installers/flake.lock @@ -0,0 +1,44 @@ +{ + "nodes": { + "root": { + "inputs": { + "stable": "stable", + "unstable": "unstable" + } + }, + "stable": { + "locked": { + "lastModified": 1763622513, + "narHash": "sha256-1jQnuyu82FpiSxowrF/iFK6Toh9BYprfDqfs4BB+19M=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "c58bc7f5459328e4afac201c5c4feb7c818d604b", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-25.05", + "repo": "nixpkgs", + "type": "github" + } + }, + "unstable": { + "locked": { + "lastModified": 1763421233, + "narHash": "sha256-Stk9ZYRkGrnnpyJ4eqt9eQtdFWRRIvMxpNRf4sIegnw=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "89c2b2330e733d6cdb5eae7b899326930c2c0648", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/utilities/nixos-installers/flake.nix b/utilities/nixos-installers/flake.nix new file mode 100644 index 00000000..8ad6fc0a --- /dev/null +++ b/utilities/nixos-installers/flake.nix @@ -0,0 +1,81 @@ +{ + description = "NixOS installer ISOs with extra bits I like"; + + inputs = { + stable.url = "github:nixos/nixpkgs/nixos-25.05"; + unstable.url = "github:nixos/nixpkgs/nixos-unstable"; + }; + + outputs = + { stable, unstable, ... }: + let + lib = stable.lib; + systems = lib.systems.flakeExposed; + + channels = { + stable = stable; + unstable = unstable; + }; + + # Build a NixOS system that is an installation ISO with SSH enabled + minimal = + { nixpkgs, system }: + nixpkgs.lib.nixosSystem { + inherit system; + modules = [ + ( + { pkgs, modulesPath, ... }: + { + imports = [ + (modulesPath + "/installer/cd-dvd/installation-cd-minimal.nix") + ]; + + nix.settings.experimental-features = [ + "nix-command" + "flakes" + ]; + + environment.systemPackages = with pkgs; [ + neovim + fastfetch + fzf + ]; + + services.openssh = { + enable = true; + settings = { + PermitRootLogin = "yes"; + PasswordAuthentication = true; + }; + }; + + users.users.nixos = { + password = "password"; + initialHashedPassword = lib.mkForce null; + }; + users.users.root = { + password = "password"; + initialHashedPassword = lib.mkForce null; + }; + } + ) + ]; + }; + + mkIsoPkgsForSystem = + system: + builtins.listToAttrs ( + builtins.map (channelName: { + name = "iso-minimal-${channelName}"; + value = + (minimal { + nixpkgs = channels.${channelName}; + inherit system; + }).config.system.build.isoImage; + }) (builtins.attrNames channels) + ); + in + { + packages = lib.genAttrs systems (system: mkIsoPkgsForSystem system); + }; +}