diff --git a/.rgignore b/.rgignore index 13ba0e2..d9795db 100644 --- a/.rgignore +++ b/.rgignore @@ -1,2 +1,3 @@ lib/words.txt +lib/emotes.txt flake.lock diff --git a/flake.lock b/flake.lock index 32ecd43..c4745fc 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "fromYaml": "fromYaml" }, "locked": { - "lastModified": 1708890466, - "narHash": "sha256-LlrC09LoPi8OPYOGPXegD72v+//VapgAqhbOFS3i8sc=", + "lastModified": 1732200724, + "narHash": "sha256-+R1BH5wHhfnycySb7Sy5KbYEaTJZWm1h+LW1OtyhiTs=", "owner": "SenchoPens", "repo": "base16.nix", - "rev": "665b3c6748534eb766c777298721cece9453fdae", + "rev": "153d52373b0fb2d343592871009a286ec8837aec", "type": "github" }, "original": { @@ -53,11 +53,11 @@ "base16-vim": { "flake": false, "locked": { - "lastModified": 1716150083, - "narHash": "sha256-ZMhnNmw34ogE5rJZrjRv5MtG3WaqKd60ds2VXvT6hEc=", + "lastModified": 1731949548, + "narHash": "sha256-XIDexXM66sSh5j/x70e054BnUsviibUShW7XhbDGhYo=", "owner": "tinted-theming", "repo": "base16-vim", - "rev": "6e955d704d046b0dc3e5c2d68a2a6eeffd2b5d3d", + "rev": "61165b1632409bd55e530f3dbdd4477f011cadc6", "type": "github" }, "original": { @@ -74,11 +74,11 @@ ] }, "locked": { - "lastModified": 1722113426, - "narHash": "sha256-Yo/3loq572A8Su6aY5GP56knpuKYRvM2a1meP9oJZCw=", + "lastModified": 1728330715, + "narHash": "sha256-xRJ2nPOXb//u1jaBnDP56M7v5ldavjbtR6lfGqSvcKg=", "owner": "numtide", "repo": "devshell", - "rev": "67cce7359e4cd3c45296fb4aaf6a19e2a9c757ae", + "rev": "dd6b80932022cea34a019e2bb32f6fa9e494dfef", "type": "github" }, "original": { @@ -120,11 +120,11 @@ "flake-compat_3": { "flake": false, "locked": { - "lastModified": 1673956053, - "narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", + "lastModified": 1696426674, + "narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=", "owner": "edolstra", "repo": "flake-compat", - "rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9", + "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", "type": "github" }, "original": { @@ -141,11 +141,11 @@ ] }, "locked": { - "lastModified": 1726153070, - "narHash": "sha256-HO4zgY0ekfwO5bX0QH/3kJ/h4KvUDFZg8YpkNwIbg1U=", + "lastModified": 1733312601, + "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=", "owner": "hercules-ci", "repo": "flake-parts", - "rev": "bcef6817a8b2aa20a5a6dbb19b43e63c5bf8619a", + "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9", "type": "github" }, "original": { @@ -159,11 +159,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1726560853, - "narHash": "sha256-X6rJYSESBVr3hBoH0WbKE5KvhPU5bloyZ2L4K60/fPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "c1dfcf08411b08f6b8615f7d8971a2bfa81d5e8a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -180,11 +180,11 @@ ] }, "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -196,11 +196,11 @@ "fromYaml": { "flake": false, "locked": { - "lastModified": 1689549921, - "narHash": "sha256-iX0pk/uB019TdBGlaJEWvBCfydT6sRq+eDcGPifVsCM=", + "lastModified": 1731966426, + "narHash": "sha256-lq95WydhbUTWig/JpqiB7oViTcHFP8Lv41IGtayokA8=", "owner": "SenchoPens", "repo": "fromYaml", - "rev": "11fbbbfb32e3289d3c631e0134a23854e7865c84", + "rev": "106af9e2f715e2d828df706c386a685698f3223b", "type": "github" }, "original": { @@ -226,11 +226,11 @@ ] }, "locked": { - "lastModified": 1726745158, - "narHash": "sha256-D5AegvGoEjt4rkKedmxlSEmC+nNLMBPWFxvmYnVLhjk=", + "lastModified": 1734425854, + "narHash": "sha256-nzE5UbJ41aPEKf8R2ZFYtLkqPmF7EIUbNEdHMBLg0Ig=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "4e743a6920eab45e8ba0fbe49dc459f1423a4b74", + "rev": "0ddd26d0925f618c3a5d85a4fa5eb1e23a09491d", "type": "github" }, "original": { @@ -264,32 +264,50 @@ "gnome-shell": { "flake": false, "locked": { - "lastModified": 1713702291, - "narHash": "sha256-zYP1ehjtcV8fo+c+JFfkAqktZ384Y+y779fzmR9lQAU=", + "lastModified": 1732369855, + "narHash": "sha256-JhUWbcYPjHO3Xs3x9/Z9RuqXbcp5yhPluGjwsdE2GMg=", "owner": "GNOME", "repo": "gnome-shell", - "rev": "0d0aadf013f78a7f7f1dc984d0d812971864b934", + "rev": "dadd58f630eeea41d645ee225a63f719390829dc", "type": "github" }, "original": { "owner": "GNOME", - "ref": "46.1", + "ref": "47.2", "repo": "gnome-shell", "type": "github" } }, + "hm-cosmic": { + "inputs": { + "home-manager": "home-manager", + "home-manager-cosmic": "home-manager-cosmic" + }, + "locked": { + "lastModified": 1733104727, + "narHash": "sha256-2a4w7OxuncH/qh+eBou65v+Ow7ZH8CobfFId3ckSQdo=", + "owner": "tristanbeedell", + "repo": "hm-cosmic", + "rev": "8c7ae2855827101eff7e52dd320599a487c78936", + "type": "github" + }, + "original": { + "owner": "tristanbeedell", + "ref": "master", + "repo": "hm-cosmic", + "type": "github" + } + }, "home-manager": { "inputs": { - "nixpkgs": [ - "nixpkgs" - ] + "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1727346017, - "narHash": "sha256-z7OCFXXxIseJhEHiCkkUOkYxD9jtLU8Kf5Q9WC0SjJ8=", + "lastModified": 1733085484, + "narHash": "sha256-dVmNuUajnU18oHzBQWZm1BQtANCHaqNuxTHZQ+GN0r8=", "owner": "nix-community", "repo": "home-manager", - "rev": "c124568e1054a62c20fbe036155cc99237633327", + "rev": "c1fee8d4a60b89cae12b288ba9dbc608ff298163", "type": "github" }, "original": { @@ -301,14 +319,14 @@ }, "home-manager-cosmic": { "inputs": { - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs_2" }, "locked": { - "lastModified": 1728250817, - "narHash": "sha256-OVHpUlNxHpQUe2Waav/MR+Z7fm6ft/w8SxWlvXv+AdU=", + "lastModified": 1733103810, + "narHash": "sha256-S1jGheeLQJPaY80+iFu7Iv4Az3BHmVlv8PxngnK8Aog=", "owner": "tristanbeedell", "repo": "home-manager", - "rev": "ce770a3e442b2105852a6f5f79f3645b4c64505c", + "rev": "efa4d272f6c2b14d4a3b67b0b1e4b38ae46e5588", "type": "github" }, "original": { @@ -319,6 +337,27 @@ } }, "home-manager_2": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1734808199, + "narHash": "sha256-MxlUcLjE8xLbrI1SJ2B2jftlg4wdutEILa3fgqwA98I=", + "owner": "nix-community", + "repo": "home-manager", + "rev": "f342df3ad938f205a913973b832f52c12546aac6", + "type": "github" + }, + "original": { + "owner": "nix-community", + "ref": "master", + "repo": "home-manager", + "type": "github" + } + }, + "home-manager_3": { "inputs": { "nixpkgs": [ "nixvim", @@ -326,11 +365,11 @@ ] }, "locked": { - "lastModified": 1726985855, - "narHash": "sha256-NJPGK030Y3qETpWBhj9oobDQRbXdXOPxtu+YgGvZ84o=", + "lastModified": 1734622215, + "narHash": "sha256-OOfI0XhSJGHblfdNDhfnn8QnZxng63rWk9eeJ2tCbiI=", "owner": "nix-community", "repo": "home-manager", - "rev": "04213d1ce4221f5d9b40bcee30706ce9a91d148d", + "rev": "1395379a7a36e40f2a76e7b9936cc52950baa1be", "type": "github" }, "original": { @@ -339,7 +378,7 @@ "type": "github" } }, - "home-manager_3": { + "home-manager_4": { "inputs": { "nixpkgs": [ "stylix", @@ -347,11 +386,11 @@ ] }, "locked": { - "lastModified": 1724435763, - "narHash": "sha256-UNky3lJNGQtUEXT2OY8gMxejakSWPTfWKvpFkpFlAfM=", + "lastModified": 1733085484, + "narHash": "sha256-dVmNuUajnU18oHzBQWZm1BQtANCHaqNuxTHZQ+GN0r8=", "owner": "nix-community", "repo": "home-manager", - "rev": "c2cd2a52e02f1dfa1c88f95abeb89298d46023be", + "rev": "c1fee8d4a60b89cae12b288ba9dbc608ff298163", "type": "github" }, "original": { @@ -360,6 +399,52 @@ "type": "github" } }, + "ixx": { + "inputs": { + "flake-utils": [ + "nixvim", + "nuschtosSearch", + "flake-utils" + ], + "nixpkgs": [ + "nixvim", + "nuschtosSearch", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1729958008, + "narHash": "sha256-EiOq8jF4Z/zQe0QYVc3+qSKxRK//CFHMB84aYrYGwEs=", + "owner": "NuschtOS", + "repo": "ixx", + "rev": "9fd01aad037f345350eab2cd45e1946cc66da4eb", + "type": "github" + }, + "original": { + "owner": "NuschtOS", + "ref": "v0.0.6", + "repo": "ixx", + "type": "github" + } + }, + "musnix": { + "inputs": { + "nixpkgs": "nixpkgs_3" + }, + "locked": { + "lastModified": 1734127708, + "narHash": "sha256-fXDr93nc3zUDCGS5qhrXAtwBJfiI40jIdoMncLAzbUY=", + "owner": "musnix", + "repo": "musnix", + "rev": "0a2bbd1e2ec78ef268698eb682f39015c1f3ca1d", + "type": "github" + }, + "original": { + "owner": "musnix", + "repo": "musnix", + "type": "github" + } + }, "nix-darwin": { "inputs": { "nixpkgs": [ @@ -368,11 +453,11 @@ ] }, "locked": { - "lastModified": 1727003835, - "narHash": "sha256-Cfllbt/ADfO8oxbT984MhPHR6FJBaglsr1SxtDGbpec=", + "lastModified": 1733570843, + "narHash": "sha256-sQJAxY1TYWD1UyibN/FnN97paTFuwBw3Vp3DNCyKsMk=", "owner": "lnl7", "repo": "nix-darwin", - "rev": "bd7d1e3912d40f799c5c0f7e5820ec950f1e0b3d", + "rev": "a35b08d09efda83625bef267eb24347b446c80b8", "type": "github" }, "original": { @@ -384,18 +469,16 @@ "nixos-cosmic": { "inputs": { "flake-compat": "flake-compat", - "nixpkgs": [ - "nixpkgs" - ], + "nixpkgs": "nixpkgs_4", "nixpkgs-stable": "nixpkgs-stable", "rust-overlay": "rust-overlay" }, "locked": { - "lastModified": 1727314564, - "narHash": "sha256-UE98O6EQYUiDp7rypkBfJG0XSz0c5FxkslyP+7Gskt8=", + "lastModified": 1734745015, + "narHash": "sha256-HGl0yR/qfGTO99NfiB5bqTe2nPKmD57opzB/TwhJSW0=", "owner": "lilyinstarlight", "repo": "nixos-cosmic", - "rev": "f2aa34f521da1d6335301fc1b58dde8ed779d632", + "rev": "1c922245aec471610533c7a225bf9c20e7002ff2", "type": "github" }, "original": { @@ -406,11 +489,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1722185531, - "narHash": "sha256-veKR07psFoJjINLC8RK4DiLniGGMgF3QMlS4tb74S6k=", + "lastModified": 1732837521, + "narHash": "sha256-jNRNr49UiuIwaarqijgdTR2qLPifxsVhlJrKzQ8XUIE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "52ec9ac3b12395ad677e8b62106f0b98c1f8569d", + "rev": "970e93b9f82e2a0f3675757eb0bfc73297cc6370", "type": "github" }, "original": { @@ -422,58 +505,90 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1727129439, - "narHash": "sha256-nPyrcFm6FSk7CxzVW4x2hu62aLDghNcv9dX6DF3dXw8=", + "lastModified": 1734600368, + "narHash": "sha256-nbG9TijTMcfr+au7ZVbKpAhMJzzE2nQBYmRvSdXUD8g=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "babc25a577c3310cce57c72d5bed70f4c3c3843a", + "rev": "b47fd6fa00c6afca88b8ee46cfdb00e104f50bca", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-24.05", + "ref": "nixos-24.11", "repo": "nixpkgs", "type": "github" } }, "nixpkgs-stable_2": { "locked": { - "lastModified": 1725762081, - "narHash": "sha256-vNv+aJUW5/YurRy1ocfvs4q/48yVESwlC/yHzjkZSP8=", + "lastModified": 1734529975, + "narHash": "sha256-ze3IJksru9dN0keqUxY0WNf8xrwfs8Ty/z9v/keyBbg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "dc454045f5b5d814e5862a6d057e7bb5c29edc05", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "release-24.05", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_2": { - "locked": { - "lastModified": 1727122398, - "narHash": "sha256-o8VBeCWHBxGd4kVMceIayf5GApqTavJbTa44Xcg5Rrk=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "30439d93eb8b19861ccbe3e581abf97bdc91b093", + "rev": "72d11d40b9878a67c38f003c240c2d2e1811e72a", "type": "github" }, "original": { "id": "nixpkgs", - "ref": "nixos-unstable", + "ref": "nixos-24.05", "type": "indirect" } }, + "nixpkgs_2": { + "locked": { + "lastModified": 1729256560, + "narHash": "sha256-/uilDXvCIEs3C9l73JTACm4quuHUsIHcns1c+cHUJwA=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "4c2fcb090b1f3e5b47eaa7bd33913b574a11e0a0", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_3": { "locked": { - "lastModified": 1725534445, - "narHash": "sha256-Yd0FK9SkWy+ZPuNqUgmVPXokxDgMJoGuNpMEtkfcf84=", + "lastModified": 1733392399, + "narHash": "sha256-kEsTJTUQfQFIJOcLYFt/RvNxIK653ZkTBIs4DG+cBns=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "9bb1e7571aadf31ddb4af77fc64b2d59580f9a39", + "rev": "d0797a04b81caeae77bcff10a9dde78bc17f5661", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_4": { + "locked": { + "lastModified": 1734424634, + "narHash": "sha256-cHar1vqHOOyC7f1+tVycPoWTfKIaqkoe1Q6TnKzuti4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "d3c42f187194c26d9f0309a8ecc469d6c878ce33", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_5": { + "locked": { + "lastModified": 1731763621, + "narHash": "sha256-ddcX4lQL0X05AYkrkV2LMFgGdRvgap7Ho8kgon3iWZk=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "c69a9bffbecde46b4b939465422ddc59493d3e4d", "type": "github" }, "original": { @@ -483,13 +598,13 @@ "type": "github" } }, - "nixpkgs_4": { + "nixpkgs_6": { "locked": { - "lastModified": 1725194671, - "narHash": "sha256-tLGCFEFTB5TaOKkpfw3iYT9dnk4awTP/q4w+ROpMfuw=", + "lastModified": 1732238832, + "narHash": "sha256-sQxuJm8rHY20xq6Ah+GwIUkF95tWjGRd1X8xF+Pkk38=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "b833ff01a0d694b910daca6e2ff4a3f26dee478c", + "rev": "8edf06bea5bcbee082df1b7369ff973b91618b8d", "type": "github" }, "original": { @@ -505,7 +620,7 @@ "flake-compat": "flake-compat_2", "flake-parts": "flake-parts", "git-hooks": "git-hooks", - "home-manager": "home-manager_2", + "home-manager": "home-manager_3", "nix-darwin": "nix-darwin", "nixpkgs": [ "nixpkgs" @@ -514,11 +629,11 @@ "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1727328717, - "narHash": "sha256-tGEVv5mFs38m6+60fNKlZn/6ucoOotfwn9FikXiYSlk=", + "lastModified": 1734798432, + "narHash": "sha256-JVU+WjrRZUJnUKQ/iXP9O8eQ0L3YkqV1DpFMS4kLZog=", "owner": "nix-community", "repo": "nixvim", - "rev": "2ab8751b8be55accb78ca0ca58f1f4ff387001d7", + "rev": "6a4b4221c4ebf1140f73f8df769e97f1828d90fa", "type": "github" }, "original": { @@ -530,17 +645,18 @@ "nuschtosSearch": { "inputs": { "flake-utils": "flake-utils", + "ixx": "ixx", "nixpkgs": [ "nixvim", "nixpkgs" ] }, "locked": { - "lastModified": 1726995581, - "narHash": "sha256-lgsE/CTkZk9OIiFGEIrxXZQ7Feiv41dqlN7pEfTdgew=", + "lastModified": 1733773348, + "narHash": "sha256-Y47y+LesOCkJaLvj+dI/Oa6FAKj/T9sKVKDXLNsViPw=", "owner": "NuschtOS", "repo": "search", - "rev": "3b7dd61b365ca45380707453758a45f2e9977be3", + "rev": "3051be7f403bff1d1d380e4612f0c70675b44fc9", "type": "github" }, "original": { @@ -551,10 +667,15 @@ }, "root": { "inputs": { - "home-manager": "home-manager", - "home-manager-cosmic": "home-manager-cosmic", + "hm-cosmic": "hm-cosmic", + "home-manager": "home-manager_2", + "musnix": "musnix", "nixos-cosmic": "nixos-cosmic", - "nixpkgs": "nixpkgs_2", + "nixpkgs": [ + "nixos-cosmic", + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable_2", "nixvim": "nixvim", "sops-nix": "sops-nix", "stylix": "stylix" @@ -568,11 +689,11 @@ ] }, "locked": { - "lastModified": 1727231386, - "narHash": "sha256-XLloPtQHKk/Tdt8t8zIb+JhmunlH3YB9Jz8RTlQ3N/4=", + "lastModified": 1734661750, + "narHash": "sha256-BI58NBdimxu1lnpOrG9XxBz7Cwqy+qIf99zunWofX5w=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "b5f76c3b09a8194889f5328a480fbea1a9115518", + "rev": "7d3d910d5fd575e6e8c5600d83d54e5c47273bfe", "type": "github" }, "original": { @@ -583,15 +704,14 @@ }, "sops-nix": { "inputs": { - "nixpkgs": "nixpkgs_3", - "nixpkgs-stable": "nixpkgs-stable_2" + "nixpkgs": "nixpkgs_5" }, "locked": { - "lastModified": 1726524647, - "narHash": "sha256-qis6BtOOBBEAfUl7FMHqqTwRLB61OL5OFzIsOmRz2J4=", + "lastModified": 1734546875, + "narHash": "sha256-6OvJbqQ6qPpNw3CA+W8Myo5aaLhIJY/nNFDk3zMXLfM=", "owner": "Mic92", "repo": "sops-nix", - "rev": "e2d404a7ea599a013189aa42947f66cede0645c8", + "rev": "ed091321f4dd88afc28b5b4456e0a15bd8374b4d", "type": "github" }, "original": { @@ -609,19 +729,19 @@ "flake-compat": "flake-compat_3", "flake-utils": "flake-utils_2", "gnome-shell": "gnome-shell", - "home-manager": "home-manager_3", - "nixpkgs": "nixpkgs_4", + "home-manager": "home-manager_4", + "nixpkgs": "nixpkgs_6", "systems": "systems_2", "tinted-foot": "tinted-foot", "tinted-kitty": "tinted-kitty", "tinted-tmux": "tinted-tmux" }, "locked": { - "lastModified": 1727355527, - "narHash": "sha256-qFSPHeImI00fBzGTA94D66HMD+fJDkuz04WHp2Sg8eA=", + "lastModified": 1734531336, + "narHash": "sha256-BWwJTAiWmZudUdUbyets7e3zQfjvZYtkU51blBnUBjw=", "owner": "danth", "repo": "stylix", - "rev": "993fcabd83d1e0ee5ea038b87041593cc73c1ebe", + "rev": "a2d66f25478103ac9b4adc6d6713794f7005221e", "type": "github" }, "original": { @@ -663,43 +783,45 @@ "tinted-foot": { "flake": false, "locked": { - "lastModified": 1696725948, - "narHash": "sha256-65bz2bUL/yzZ1c8/GQASnoiGwaF8DczlxJtzik1c0AU=", + "lastModified": 1726913040, + "narHash": "sha256-+eDZPkw7efMNUf3/Pv0EmsidqdwNJ1TaOum6k7lngDQ=", "owner": "tinted-theming", "repo": "tinted-foot", - "rev": "eedbcfa30de0a4baa03e99f5e3ceb5535c2755ce", + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", "type": "github" }, "original": { "owner": "tinted-theming", "repo": "tinted-foot", + "rev": "fd1b924b6c45c3e4465e8a849e67ea82933fcbe4", "type": "github" } }, "tinted-kitty": { "flake": false, "locked": { - "lastModified": 1665001328, - "narHash": "sha256-aRaizTYPpuWEcvoYE9U+YRX+Wsc8+iG0guQJbvxEdJY=", + "lastModified": 1716423189, + "narHash": "sha256-2xF3sH7UIwegn+2gKzMpFi3pk5DlIlM18+vj17Uf82U=", "owner": "tinted-theming", "repo": "tinted-kitty", - "rev": "06bb401fa9a0ffb84365905ffbb959ae5bf40805", + "rev": "eb39e141db14baef052893285df9f266df041ff8", "type": "github" }, "original": { "owner": "tinted-theming", "repo": "tinted-kitty", + "rev": "eb39e141db14baef052893285df9f266df041ff8", "type": "github" } }, "tinted-tmux": { "flake": false, "locked": { - "lastModified": 1696725902, - "narHash": "sha256-wDPg5elZPcQpu7Df0lI5O8Jv4A3T6jUQIVg63KDU+3Q=", + "lastModified": 1729501581, + "narHash": "sha256-1ohEFMC23elnl39kxWnjzH1l2DFWWx4DhFNNYDTYt54=", "owner": "tinted-theming", "repo": "tinted-tmux", - "rev": "c02050bebb60dbb20cb433cd4d8ce668ecc11ba7", + "rev": "f0e7f7974a6441033eb0a172a0342e96722b4f14", "type": "github" }, "original": { @@ -716,11 +838,11 @@ ] }, "locked": { - "lastModified": 1726734507, - "narHash": "sha256-VUH5O5AcOSxb0uL/m34dDkxFKP6WLQ6y4I1B4+N3L2w=", + "lastModified": 1734704479, + "narHash": "sha256-MMi74+WckoyEWBRcg/oaGRvXC9BVVxDZNRMpL+72wBI=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "ee41a466c2255a3abe6bc50fc6be927cdee57a9f", + "rev": "65712f5af67234dad91a5a4baee986a8b62dbf8f", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 8ebc2f4..a0d8b16 100644 --- a/flake.nix +++ b/flake.nix @@ -1,17 +1,20 @@ { description = "A flake using my config"; inputs = { - nixpkgs.url = "nixpkgs/nixos-unstable"; + # nixpkgs.url = "nixpkgs/nixos-unstable"; + musnix.url = "github:musnix/musnix"; + nixpkgs.follows = "nixos-cosmic/nixpkgs"; + nixpkgs-stable.url = "nixpkgs/nixos-24.05"; home-manager = { url = "github:nix-community/home-manager/master"; inputs.nixpkgs.follows = "nixpkgs"; }; - home-manager-cosmic.url = "github:tristanbeedell/home-manager/cosmic"; + hm-cosmic.url = "github:tristanbeedell/hm-cosmic/master"; stylix.url = "github:danth/stylix"; sops-nix.url = "github:Mic92/sops-nix"; nixos-cosmic = { url = "github:lilyinstarlight/nixos-cosmic"; - inputs.nixpkgs.follows = "nixpkgs"; + # inputs.nixpkgs.follows = "nixpkgs"; }; nixvim = { url = "github:nix-community/nixvim"; @@ -36,9 +39,12 @@ ./nixos/programs/cosmic.nix ./nixos/programs/gamer.nix ./nixos/programs/personal.nix + ./nixos/services/musnix.nix ./nixos/workstation.nix + ./nixos/programs/hyprland.nix ]; home-modules = [ + ./home/programs/mpd.nix ./home/programs/graphical.nix ./home/programs/gamer.nix ./home/programs/personal/. @@ -48,13 +54,14 @@ FCS-Tristan-Nixbook = mkConf { nixos-modules = [ ./hardware/fcs-tristan-nixbook.nix - # (auto-login "Hyprland") - # ./nixos/programs/hyprland.nix ./nixos/workstation.nix ./nixos/modules/work.nix ./nixos/programs/cosmic.nix + ./nixos/programs/libvertd.nix + ./nixos/programs/hyprland.nix ]; home-modules = [ + ./home/programs/mpd.nix ./home/programs/work.nix ./home/programs/graphical.nix ]; diff --git a/hardware/alpine.nix b/hardware/alpine.nix index 4938eca..bf4d2d4 100644 --- a/hardware/alpine.nix +++ b/hardware/alpine.nix @@ -62,7 +62,6 @@ in { "minfreespace=50G" "fsname=mergerfs" "category.create=mfs" - "cache.files=auto-all" "dropcacheonclose=true" ]; }; diff --git a/hardware/fcs-tristan-nixbook.nix b/hardware/fcs-tristan-nixbook.nix index a3370d4..bcc1900 100644 --- a/hardware/fcs-tristan-nixbook.nix +++ b/hardware/fcs-tristan-nixbook.nix @@ -6,7 +6,6 @@ ... }: let user = config.user; - decrypt = import ../lib/decrypt.nix; in { imports = [ (modulesPath + "/installer/scan/not-detected.nix") @@ -24,7 +23,7 @@ in { }; boot.initrd.luks.devices."usbkey" = { - device = "/dev/disk/by-id/usb-Generic_Flash_Disk_BCC97785-0:0"; + device = "/dev/disk/by-label/usbkey1"; }; boot.initrd.luks.devices."cryptroot" = { @@ -32,7 +31,7 @@ in { keyFileSize = 4096; preOpenCommands = '' mkdir -m 0755 -p /key - mount -n -t vfat -o ro /dev/mapper/usbkey /key + mount -n -o ro /dev/mapper/usbkey /key ''; keyFile = "/key/keyfile"; preLVM = false; diff --git a/hardware/zenix.nix b/hardware/zenix.nix index 3a3cd19..e3fe37a 100644 --- a/hardware/zenix.nix +++ b/hardware/zenix.nix @@ -6,7 +6,6 @@ ... }: let user = config.user; - decrypt = import ../lib/decrypt.nix; in { imports = [ (modulesPath + "/installer/scan/not-detected.nix") @@ -20,7 +19,7 @@ in { boot.extraModulePackages = []; fileSystems."/" = { - device = "/dev/disk/by-uuid/2dad5ed6-44cc-4d9d-9392-32afaa7b3909"; + device = "/dev/mapper/cryptroot"; fsType = "btrfs"; options = ["subvol=@" "compress=zstd" "autodefrag"]; }; @@ -32,30 +31,38 @@ in { options = ["noatime"]; }; - boot.initrd.postDeviceCommands = pkgs.lib.mkBefore (decrypt { - keydevice = "/dev/disk/by-id/usb-Generic_Flash_Disk_BCC97785-0:0"; - keypartname = "usbkey"; - }); + boot.initrd.luks.devices."usbkey" = { + device = "/dev/disk/by-label/usbkey1"; + }; boot.initrd.luks.devices."cryptroot" = { device = "/dev/disk/by-uuid/cc0617df-8cbf-4618-abbc-df64c96de151"; keyFileSize = 4096; + preOpenCommands = '' + mkdir -m 0755 -p /key + mount -n -o ro /dev/mapper/usbkey /key + ''; keyFile = "/key/keyfile"; preLVM = false; }; fileSystems."/home" = { - device = "/dev/disk/by-uuid/2dad5ed6-44cc-4d9d-9392-32afaa7b3909"; + device = "/dev/mapper/cryptroot"; fsType = "btrfs"; options = ["subvol=@home" "compress=zstd" "autodefrag"]; }; fileSystems."/boot" = { - device = "/dev/disk/by-uuid/FE7E-0DE3"; + device = "/dev/disk/by-label/boot"; fsType = "vfat"; }; - swapDevices = [{device = "/dev/disk/by-uuid/da57b489-ab77-4830-b710-9f96cf43d053";}]; + boot.plymouth.enable = true; + boot.initrd.verbose = false; + boot.consoleLogLevel = 1; + boot.kernelParams = ["quiet" "udev.log_level=3"]; + + swapDevices = [{device = "/dev/disk/by-label/swap";}]; # Enables DHCP on each ethernet and wireless interface. In case of scripted networking # (the default) this is the recommended approach. When using systemd-networkd it's @@ -64,7 +71,7 @@ in { networking.useDHCP = lib.mkDefault true; # networking.interfaces.enp5s0.useDHCP = lib.mkDefault true; - networking.networkmanager.insertNameservers = ["1.1.1.1" "1.0.0.1"]; + networking.networkmanager.appendNameservers = ["1.1.1.1" "1.0.0.1"]; nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; diff --git a/home/default.nix b/home/default.nix index 6d7549f..0c5f5ff 100644 --- a/home/default.nix +++ b/home/default.nix @@ -37,9 +37,7 @@ yt-dlp fastfetch tree - ansible ytfzf - lazygit ]; programs.zoxide.enable = true; diff --git a/home/desktop/cosmic/default.nix b/home/desktop/cosmic/default.nix index 6a12893..a51d14d 100644 --- a/home/desktop/cosmic/default.nix +++ b/home/desktop/cosmic/default.nix @@ -1,23 +1,30 @@ { pkgs, config, + lib, ... }: let - inherit (config.lib.cosmic) Actions; + inherit (config.lib.cosmic) Actions mapBinds; + SpawnTerminal = name: pkg: + Actions.Spawn (pkgs.writeShellScriptBin name "${lib.getExe pkgs.alacritty} -e ${lib.getExe pkg}"); in { programs.cosmic = { enable = true; input.asDefaults = true; - input.binds = { + input.binds = mapBinds { # Navigation Super. "h" = Actions.Focus "Left"; Super. "l" = Actions.Focus "Right"; Super. "j" = Actions.Focus "Down"; Super. "k" = Actions.Focus "Up"; + Super. "u" = Actions.Focus "Out"; + Super. "i" = Actions.Focus "In"; Super.Shift. "h" = Actions.Move "Left"; Super.Shift. "l" = Actions.Move "Right"; Super.Shift. "j" = Actions.Move "Down"; Super.Shift. "k" = Actions.Move "Up"; + Super.Shift. "Right" = Actions.MoveToNextWorkspace; + Super.Shift. "Left" = Actions.MoveToPreviousWorkspace; Super. "1" = Actions.Workspace 1; Super. "2" = Actions.Workspace 2; Super. "3" = Actions.Workspace 3; @@ -37,13 +44,21 @@ in { # System Super. "d" = Actions.Spawn config.programs.menu.drunCommand; Super. "Return" = Actions.Spawn pkgs.alacritty; + Super. "e" = SpawnTerminal "aerc" config.programs.aerc.package; Super. "o" = Actions.System "HomeFolder"; Super.Shift. "s" = Actions.System "Screenshot"; + "XF86AudioRaiseVolume" = Actions.System "VolumeRaise"; + "XF86AudioLowerVolume" = Actions.System "VolumeLower"; + "XF86AudioPlay" = Actions.System "PlayPause"; + "XF86AudioNext" = Actions.System "PlayNext"; + "XF86AudioPrev" = Actions.System "PlayPrev"; + "XF86MonBrightnessUp" = Actions.System "BrightnessUp"; + "XF86MonBrightnessDown" = Actions.System "BrightnessDown"; }; background = { displays = { all = { - source = ../../../images/nier2.jpg; + source = lib.mkDefault config.stylix.image; }; }; }; @@ -53,13 +68,16 @@ in { start = [ "com.system76.CosmicAppletWorkspaces" ]; - center = []; + center = [ + "com.system76.CosmicAppletMinimize" + ]; end = [ "com.system76.CosmicAppletTime" "com.system76.CosmicAppletTiling" "com.system76.CosmicAppletAudio" + "com.system76.CosmicAppletNetwork" "com.system76.CosmicAppletNotifications" - "com.system76.CosmicAppletMinimize" + "com.system76.CosmicAppletStatusArea" "com.system76.CosmicAppletPower" ]; }; @@ -69,13 +87,15 @@ in { }; }; }; - settings = { - "com.system76.CosmicComp".options = { - autotile = true; - active_hint = true; - focus_follows_cursor = true; - focus_follows_cursor_delay = 0; - cursor_follows_focus = true; + comp.settings = { + autotile = true; + active_hint = true; + focus_follows_cursor = true; + focus_follows_cursor_delay = 0; + cursor_follows_focus = true; + descale_xwayland = true; + workspaces = { + workspace_layout = "Horizontal"; }; }; }; diff --git a/home/desktop/hyprland/default.nix b/home/desktop/hyprland/default.nix index 33fb7a2..df36e65 100644 --- a/home/desktop/hyprland/default.nix +++ b/home/desktop/hyprland/default.nix @@ -23,7 +23,7 @@ in { xdg.portal = { enable = true; configPackages = [pkgs.hyprland]; - extraPortals = [pkgs.xdg-desktop-portal-gtk]; + extraPortals = [pkgs.xdg-desktop-portal-gtk pkgs.xdg-desktop-portal-wlr]; }; services.hypridle = { @@ -52,7 +52,7 @@ in { programs.hyprlock = { enable = true; - settings = { + settings = lib.mkForce { # https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/ general = { hide_cursor = true; @@ -88,8 +88,9 @@ in { enable = true; systemd = { enable = true; - variables = ["--all"]; + # variables = ["--all"]; }; + xwayland.enable = true; settings = { input = { touchpad = { @@ -105,7 +106,6 @@ in { }; decoration = { rounding = 0; - drop_shadow = false; }; bezier = [ "overshot, 0.05, 0.9, 0.1, 1.1" @@ -277,5 +277,10 @@ in { enable = true; }; - programs.waybar.settings.mainBar.modules-left = ["hyprland/workspaces" "hyprland/window"]; + programs.waybar = { + settings.mainBar.modules-left = ["hyprland/workspaces" "hyprland/window"]; + systemd.target = "hyprland-session.target"; + }; + + systemd.user.services.hypridle.Install.WantedBy = lib.mkForce ["hyprland-session.target"]; } diff --git a/home/modules/mpd.nix b/home/modules/mpd.nix deleted file mode 100644 index 3586214..0000000 --- a/home/modules/mpd.nix +++ /dev/null @@ -1,77 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: -with lib; let - cfg = config.roles.mpd; - terminal = config.programs.terminal; - termcmd = "${terminal}/bin/${terminal.pname}"; -in { - options.roles.mpd = { - enable = mkEnableOption "setup mpd client"; - host = mkOption {default = "192.168.1.2";}; - }; - - config = mkIf cfg.enable { - programs.ncmpcpp = { - enable = true; - settings.mpd_host = cfg.host; - bindings = [ - { - key = "j"; - command = "scroll_down"; - } - { - key = "k"; - command = "scroll_up"; - } - { - key = "l"; - command = "next_column"; - } - { - key = "h"; - command = "previous_column"; - } - { - key = "J"; - command = ["select_item" "scroll_down"]; - } - { - key = "K"; - command = ["select_item" "scroll_up"]; - } - ]; - }; - services.mpd-mpris = { - enable = true; - mpd.host = cfg.host; - }; - programs.waybar.settings.mainBar.mpd.server = cfg.host; - programs.scripts = [ - { - name = "ncmpcpp"; - text = '' - ${termcmd} -e ${pkgs.ncmpcpp}/bin/ncmpcpp - ''; - hotkeys = [{key = "M";}]; - install = false; - } - ]; - systemd.user.services = { - snapclient = { - Unit = { - Description = "Snapclient"; - }; - Service = { - ExecStart = "${pkgs.snapcast}/bin/snapclient -h ${cfg.host}"; - }; - Install = { - WantedBy = ["graphical-session.target"]; - }; - }; - }; - }; -} diff --git a/home/programs/gamer.nix b/home/programs/gamer.nix index 461dc40..74d0e60 100644 --- a/home/programs/gamer.nix +++ b/home/programs/gamer.nix @@ -12,15 +12,10 @@ gamescope gamemode mangohud - BeatSaberModManager + # BeatSaberModManager - out of date: https://github.com/NixOS/nixpkgs/pull/339370 protontricks protonup-qt oversteer xboxdrv - - # VR - # monado -- build is borked /: - openxr-loader - opencomposite ]; } diff --git a/home/programs/git.nix b/home/programs/git.nix index e7cd7aa..1e9f122 100644 --- a/home/programs/git.nix +++ b/home/programs/git.nix @@ -1,10 +1,21 @@ -{pkgs, ...}: { +{ + pkgs, + lib, + config, + ... +}: { programs.git = { enable = true; + extraConfig = { + rerere.enabled = true; + rebase.updateRefs = true; + }; aliases = { + ui = "!lazygit"; graph = "log --oneline --all --graph"; amend = "commit --amend --no-edit"; sdiff = "diff --staged"; + fpush = "push --force-with-lease"; t = "tag --annotate"; bclone = "!sh ${pkgs.writeShellScriptBin "bare-clone" '' url=$1 @@ -33,8 +44,12 @@ git fetch origin $opts ''}/bin/bare-clone"; }; - delta = { + difftastic = { enable = true; }; }; + + programs.lazygit = { + enable = true; + }; } diff --git a/home/programs/graphical.nix b/home/programs/graphical.nix index 6c5050f..b174cfb 100644 --- a/home/programs/graphical.nix +++ b/home/programs/graphical.nix @@ -9,7 +9,7 @@ # system selectdefaultapplication easyeffects - pavucontrol + pwvucontrol helvum # tools @@ -18,21 +18,31 @@ gimp libreoffice dbeaver-bin - drawio + zed-editor # entertainment libsForQt5.kasts shortwave + freetube + youtube-music # other element-desktop-wayland + (makeDesktopItem { + name = "element-desktop-wayland"; + desktopName = "Element"; + exec = "${element-desktop-wayland}/bin/element-desktop"; + }) brave bitwarden ]; programs.obs-studio = { enable = true; - plugins = [pkgs.obs-studio-plugins.wlrobs]; + plugins = [ + pkgs.obs-studio-plugins.wlrobs + pkgs.obs-studio-plugins.obs-pipewire-audio-capture + ]; }; xdg.mimeApps.defaultApplications = { diff --git a/home/programs/mpd.nix b/home/programs/mpd.nix new file mode 100644 index 0000000..ba20bc9 --- /dev/null +++ b/home/programs/mpd.nix @@ -0,0 +1,70 @@ +{ + lib, + pkgs, + config, + ... +}: +let + terminal = config.programs.terminal; + termcmd = "${terminal}/bin/${terminal.pname}"; + host = "alpine"; +in { + programs.ncmpcpp = { + enable = true; + settings.mpd_host = host; + bindings = [ + { + key = "j"; + command = "scroll_down"; + } + { + key = "k"; + command = "scroll_up"; + } + { + key = "l"; + command = "next_column"; + } + { + key = "h"; + command = "previous_column"; + } + { + key = "J"; + command = ["select_item" "scroll_down"]; + } + { + key = "K"; + command = ["select_item" "scroll_up"]; + } + ]; + }; + services.mpd-mpris = { + enable = true; + mpd.host = host; + }; + programs.waybar.settings.mainBar.mpd.server = host; + programs.scripts = [ + { + name = "ncmpcpp"; + text = '' + ${termcmd} -e ${pkgs.ncmpcpp}/bin/ncmpcpp + ''; + hotkeys = [{key = "M";}]; + install = false; + } + ]; + systemd.user.services = { + snapclient = { + Unit = { + Description = "Snapclient"; + }; + Service = { + ExecStart = "${pkgs.snapcast}/bin/snapclient -h ${host}"; + }; + Install = { + WantedBy = ["graphical-session.target"]; + }; + }; + }; +} diff --git a/home/programs/mpv.nix b/home/programs/mpv.nix index a0e14c5..2708f35 100644 --- a/home/programs/mpv.nix +++ b/home/programs/mpv.nix @@ -1,6 +1,9 @@ {pkgs, ...}: { programs.mpv = { enable = true; + config = { + keep-open = true; + }; bindings = { l = "seek 5"; h = "seek -5"; diff --git a/home/programs/neovim/default.nix b/home/programs/neovim/default.nix index 5508be3..31d7b51 100644 --- a/home/programs/neovim/default.nix +++ b/home/programs/neovim/default.nix @@ -3,12 +3,12 @@ pkgs, lib, ... -}: { +} @ input: { programs.nixvim = { enable = true; } - // (import ../../../lib/nixvim.nix {inherit pkgs;}); + // (import ../../../lib/nixvim.nix input); programs.vscode = { extensions = [pkgs.vscode-extensions.asvetliakov.vscode-neovim]; diff --git a/home/programs/personal/default.nix b/home/programs/personal/default.nix index a740d23..e1ec3a1 100644 --- a/home/programs/personal/default.nix +++ b/home/programs/personal/default.nix @@ -1,7 +1,4 @@ {pkgs, ...}: { - imports = [ - # ./kodi.nix - ]; roles.email = { enable = true; email = "tristan@tristans.cloud"; @@ -15,9 +12,6 @@ services.nextcloud-client.enable = true; programs.nixvim.plugins = { - lsp = { - servers.gdscript.enable = true; - }; godot.enable = true; dap = { enable = true; @@ -38,9 +32,7 @@ home.packages = with pkgs; [ godot_4 - ardour blender - musescore monero-gui transmission-remote-gtk krita diff --git a/home/programs/scripts.nix b/home/programs/scripts.nix index 8673d76..f0943e0 100644 --- a/home/programs/scripts.nix +++ b/home/programs/scripts.nix @@ -274,11 +274,13 @@ in { text = '' res=$(echo "lock sleep - hibernate" | ${my-deps.menu}) + hibernate + logout" | ${my-deps.menu}) case $res in lock) ${my-deps.lock};; sleep) systemctl suspend;; hibernate) systemctl hibernate;; + logout) hyprctl dispatch exit;; esac ''; hotkeys = [ diff --git a/home/programs/work.nix b/home/programs/work.nix index 803b582..7417aba 100644 --- a/home/programs/work.nix +++ b/home/programs/work.nix @@ -15,10 +15,17 @@ in { email = "tristan.beedell@cryoserver.com"; terminal = false; }; + programs.git.extraConfig = { + "includeIf \"gitdir:~/Documents/personal/\"" = { + path = "~/Documents/personal/.gitconfig"; + }; + }; home.packages = [ + pkgs.drawio pkgs.thunderbird pkgs.remmina + pkgs.postman (import ../../lib/mkapp.nix "slack" { inherit pkgs browser; desktopName = "Slack"; @@ -30,17 +37,19 @@ in { desktopName = "Microsoft Teams"; }) pkgs.devcontainer - (pkgs.writeShellScriptBin "devcontainer-open" (let - jq = "${pkgs.jq}/bin/jq"; - devcontainer = "${pkgs.devcontainer}/bin/devcontainer"; - in '' - res=$(${devcontainer} up --workspace-folder .) - outcome=$(echo $res | ${jq} -r '.outcome') - [[ $outcome = "success" ]] || exit 1 - containerId=$(echo $res | ${jq} -r '.containerId') - remoteWorkspaceFolder=$(echo $res | ${jq} -r '.remoteWorkspaceFolder') - docker exec -it --workdir=$remoteWorkspaceFolder $containerId bash - '')) + (pkgs.writeShellScriptBin "devcontainer-open" ( + let + jq = "${pkgs.jq}/bin/jq"; + devcontainer = "${pkgs.devcontainer}/bin/devcontainer"; + in '' + res=$(${devcontainer} up --workspace-folder .) + outcome=$(echo $res | ${jq} -r '.outcome') + [[ $outcome = "success" ]] || exit 1 + containerId=$(echo $res | ${jq} -r '.containerId') + remoteWorkspaceFolder=$(echo $res | ${jq} -r '.remoteWorkspaceFolder') + docker exec -it --workdir=$remoteWorkspaceFolder $containerId bash + '' + )) ]; home.sessionVariables = { diff --git a/home/programs/xr.nix b/home/programs/xr.nix index d86e6b3..89dd23d 100644 --- a/home/programs/xr.nix +++ b/home/programs/xr.nix @@ -1,30 +1,34 @@ { pkgs, - # config, + config, ... }: { + home.packages = with pkgs; [ + openxr-loader + opencomposite + ]; + services.monado.enable = true; + systemd.user.services.monado.environment = { + STEAMVR_LH_ENABLE = "true"; + XRT_COMPOSITOR_SCALE_PERCENTAGE = "200"; + }; home.file.".config/openxr/1/openxr_monado.json" = { source = "${pkgs.monado}/share/openxr/1/openxr_monado.json"; }; - # home.file.".config/openvr/openvrpaths.vrpath" = { - # text = '' - # { - # "config" : - # [ - # "${config.home.homeDirectory}/.local/share/Steam/config" - # ], - # "external_drivers" : null, - # "jsonid" : "vrpathreg", - # "log" : - # [ - # "${config.home.homeDirectory}/.local/share/Steam/logs" - # ], - # "runtime" : - # [ - # "${pkgs.opencomposite}/lib/opencomposite" - # ], - # "version" : 1 - # } - # ''; - # }; + home.file.".config/openvr/openvrpaths.vrpath" = { + text = builtins.toJSON { + "config" = [ + "${config.home.homeDirectory}/.local/share/Steam/config" + ]; + "external_drivers" = null; + "jsonid" = "vrpathreg"; + "log" = [ + "${config.home.homeDirectory}/.local/share/Steam/logs" + ]; + "runtime" = [ + "${pkgs.opencomposite}/lib/opencomposite" + ]; + "version" = 1; + }; + }; } diff --git a/home/workstation.nix b/home/workstation.nix index 88ebdcf..125e657 100644 --- a/home/workstation.nix +++ b/home/workstation.nix @@ -2,6 +2,7 @@ config, pkgs, lib, + stable-pkgs, ... }: { imports = [ @@ -27,6 +28,8 @@ wl-clipboard playerctl quickemu + devenv + stable-pkgs.logseq ]; services.udiskie = { @@ -36,6 +39,7 @@ programs.rbw.settings.pinentry = pkgs.pinentry-gnome3; + # https://docs.pipewire.org/page_module_raop_discover.html xdg.configFile."pipewire/pipewire.conf.d/raop-discover.conf".text = '' context.modules = [ { @@ -44,6 +48,30 @@ } ] ''; + xdg.configFile."pipewire/pipewire.conf.d/raop-sink.conf".text = '' + context.modules = [ + { name = libpipewire-module-raop-sink + args = { + # Set the remote address to tunnel to + raop.ip = "127.0.0.1" + raop.port = 8190 + raop.name = "my-raop-device" + raop.hostname = "My Service" + #raop.transport = "udp" + raop.encryption.type = "RSA" + #raop.audio.codec = "PCM" + #raop.password = "****" + #audio.format = "S16" + #audio.rate = 44100 + #audio.channels = 2 + #audio.position = [ FL FR ] + stream.props = { + # extra sink properties + } + } + } + ] + ''; services.gnome-keyring.enable = true; } diff --git a/lib/mkconf.nix b/lib/mkconf.nix index f779cdb..ebe62af 100644 --- a/lib/mkconf.nix +++ b/lib/mkconf.nix @@ -9,9 +9,15 @@ home-modules ? [], }: let inherit (inputs) home-manager nixpkgs sops-nix nixvim; + stable-pkgs = import inputs.nixpkgs-stable { + inherit system; + config.permittedInsecurePackages = [ + "electron-27.3.11" + ]; + }; in nixpkgs.lib.nixosSystem { - specialArgs = {inherit inputs;}; + specialArgs = {inherit inputs stable-pkgs user userFullname;}; inherit system; @@ -24,6 +30,8 @@ in home-manager = { useGlobalPkgs = true; useUserPackages = true; + backupFileExtension = "bak"; + extraSpecialArgs = {inherit stable-pkgs;}; users.${user}.imports = home-modules ++ [ diff --git a/lib/nixvim.nix b/lib/nixvim.nix index 221fc0c..e6fdace 100644 --- a/lib/nixvim.nix +++ b/lib/nixvim.nix @@ -1,4 +1,19 @@ -{pkgs, ...}: { +{ + pkgs, + lib, + ... +}: let + lua = cmd: {__raw = cmd;}; + luaFunc = cmd: + lua '' + function () + ${cmd} + end''; +in { + colorschemes.base16 = { + enable = true; + colorscheme = "gruvbox-dark-hard"; + }; globals = { mapleader = " "; }; @@ -10,10 +25,10 @@ expandtab = true; smartindent = true; scrolloff = 4; + smoothscroll = true; undofile = true; - undodir.__raw = ''vim.fn.expand("$HOME/.local/share/nvim/undo")''; - + undodir = lua ''vim.fn.expand("$HOME/.local/share/nvim/undo")''; list = true; listchars = builtins.concatStringsSep "," [ "tab: >" @@ -22,8 +37,13 @@ "extends:>" "precedes:<" ]; + + foldlevel = 2; }; - extraPlugins = [(pkgs.vimPlugins.actions-preview-nvim)]; + extraPlugins = [ + (pkgs.vimPlugins.actions-preview-nvim) + (pkgs.vimPlugins.vimwiki) + ]; extraConfigLua = '' require("actions-preview").setup { highlight_command = { @@ -66,6 +86,14 @@ key = ""; action = "tabprev"; } + { + key = "bn"; + action = "bnext"; + } + { + key = "bp"; + action = "bprevious"; + } { key = "gl"; action = "g$"; @@ -153,6 +181,68 @@ action = ""; options.desc = "Harpoon"; } + { + key = ""; + action = luaFunc "require('dap').continue()"; + options.desc = "DAP continue"; + } + { + key = "dc"; + action = luaFunc "require('dap').continue()"; + options.desc = "DAP continue"; + } + { + key = "db"; + action = luaFunc "require('dap').toggle_breakpoint()"; + options.desc = "DAP toggle breakpoint"; + } + { + key = "dn"; + action = luaFunc "require('dap').step_over()"; + options.desc = "DAP step over"; + } + { + key = "di"; + action = luaFunc "require('dap').step_into()"; + options.desc = "DAP step into"; + } + { + key = "do"; + action = luaFunc "require('dap').step_out()"; + options.desc = "DAP step out"; + } + { + key = "du"; + action = luaFunc "require('dapui').toggle()"; + options.desc = "DAP UI Toggle"; + } + ]; + + autoCmd = [ + { + event = "BufWritePre"; + pattern = "*.go"; + # https://github.com/golang/tools/blob/master/gopls/doc/vim.md#imports-and-formatting + callback = luaFunc '' + local params = vim.lsp.util.make_range_params() + params.context = {only = {"source.organizeImports"}} + -- buf_request_sync defaults to a 1000ms timeout. Depending on your + -- machine and codebase, you may want longer. Add an additional + -- argument after params if you find that you have to write the file + -- twice for changes to be saved. + -- E.g., vim.lsp.buf_request_sync(0, "textDocument/codeAction", params, 3000) + local result = vim.lsp.buf_request_sync(0, "textDocument/codeAction", params) + for cid, res in pairs(result or {}) do + for _, r in pairs(res.result or {}) do + if r.edit then + local enc = (vim.lsp.get_client_by_id(cid) or {}).offset_encoding or "utf-16" + vim.lsp.util.apply_workspace_edit(r.edit, enc) + end + end + end + vim.lsp.buf.format({async = false}) + ''; + } ]; plugins = { @@ -186,9 +276,19 @@ lsp = { enable = true; servers = { - ts-ls.enable = true; - nil-ls.enable = true; + ts_ls.enable = true; + nixd = { + enable = true; + settings = { + nixpkgs.expr = ''import {}''; + options.zenix.expr = ''(builtins.getFlake "git+https://git.tristans.cloud/tristan/nix").nixosConfigurations.zenix.options''; + options.alpine.expr = ''(builtins.getFlake "git+https://git.tristans.cloud/tristan/nix").nixosConfigurations.alpine.options''; + formatting.command = [(lib.getExe pkgs.alejandra)]; + }; + }; + yamlls.enable = true; gopls.enable = true; + ansiblels.enable = true; }; keymaps = { lspBuf = { @@ -200,6 +300,17 @@ }; }; + dap = { + enable = true; + extensions.dap-go = { + enable = true; + # tests.verbose = true; # ??? + }; + extensions.dap-ui = { + enable = true; + }; + }; + cmp = { enable = true; settings = { @@ -272,8 +383,28 @@ }; }; - oil.enable = true; + oil = { + enable = true; + settings = { + keymaps = { + "" = "actions.refresh"; + "zh" = "actions.toggle_hidden"; + }; + view_options.show_hidden = true; + }; + }; ts-autotag.enable = true; guess-indent.enable = true; + + codesnap = { + enable = true; + settings = { + has_line_number = true; + mac_window_bar = false; + save_path = "~/Pictures/Screenshots/"; + watermark = ""; + bg_padding = 5; + }; + }; }; } diff --git a/nixos/default.nix b/nixos/default.nix index 917111b..eb67452 100644 --- a/nixos/default.nix +++ b/nixos/default.nix @@ -11,7 +11,7 @@ in { nix = { settings = { - experimental-features = ["nix-command" "flakes"]; + experimental-features = ["nix-command" "flakes" "pipe-operators"]; }; settings.trusted-users = ["root" user]; @@ -42,12 +42,6 @@ in { } ]; }; - networking.hosts = { - "100.65.29.110" = ["zenix"]; - "100.106.241.122" = ["alpine" "tristans.cloud"]; - "100.71.130.111" = ["fcs-tristan-nixbook"]; - "100.69.60.83" = ["google-pixel-8"]; - }; time.timeZone = lib.mkDefault "Europe/London"; @@ -56,7 +50,10 @@ in { useXkbConfig = true; }; - services.avahi.enable = true; + services.avahi = { + enable = true; + nssmdns4 = true; + }; i18n.defaultLocale = lib.mkDefault "en_GB.UTF-8"; @@ -93,6 +90,11 @@ in { unzip fzf sops + lsof + nix-tree + nix-index + nh + jq ]; boot.kernel.sysctl = { diff --git a/nixos/modules/podman.nix b/nixos/modules/podman.nix new file mode 100644 index 0000000..c6cda54 --- /dev/null +++ b/nixos/modules/podman.nix @@ -0,0 +1,87 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (lib) mkOption types; + mkRunCommand = name: { + image, + command ? "", + environment ? {}, + ports ? [], + volumes ? [], + envFile ? null, + ... + }: '' + ${pkgs.podman}/bin/podman run \ + ${toString (builtins.attrValues (builtins.mapAttrs (name: value: "-e ${name}='${value}'") environment))} \ + ${toString (builtins.map (mapping: "-p ${mapping}") ports)} \ + ${toString (builtins.map (mapping: "-v ${mapping}") volumes)} \ + ${ + if builtins.isNull envFile + then "" + else "--env-file ${toString envFile}" + } \ + --detach --replace \ + --name ${name} \ + ${image} ${command} + ''; + opts = { + config, + name, + ... + }: { + options = { + image = mkOption { + type = types.str; + }; + command = mkOption { + type = types.str; + default = ""; + }; + environment = mkOption { + type = types.attrsOf types.str; + default = {}; + }; + ports = mkOption { + type = types.listOf types.str; + default = []; + }; + volumes = mkOption { + type = types.listOf types.str; + default = []; + }; + envFile = mkOption { + type = types.nullOr types.path; + default = null; + }; + }; + }; + mkService = name: config: { + enable = true; + wants = ["network-online.target"]; + after = ["network-online.target"]; + wantedBy = ["default.target"]; + unitConfig = { + RequiresMountsFor = "/run/containers/storage"; + }; + serviceConfig = { + Environment = "PODMAN_SYSTEMD_UNIT=%n"; + Restart = "on-failure"; + TimeoutStopSec = 70; + ExecStart = mkRunCommand name config; + ExecStop = "${pkgs.podman}/bin/podman stop -t 10 ${name}"; + ExecStopPost = "${pkgs.podman}/bin/podman stop -t 10 ${name}"; + Type = "forking"; + }; + }; +in { + options.podman = mkOption { + type = types.attrsOf (types.submodule opts); + default = {}; + }; + config = { + systemd.services = lib.mapAttrs mkService config.podman; + }; +} diff --git a/nixos/modules/work.nix b/nixos/modules/work.nix index 675ac39..f22246a 100644 --- a/nixos/modules/work.nix +++ b/nixos/modules/work.nix @@ -11,10 +11,13 @@ in { # nonfree vscode required for dev containers "vscode" "steam-run" + "postman" + "drawio" # the creator had a hissyfit over a negative review: https://github.com/jgraph/drawio/discussions/4623 ]; nixpkgs.config.permittedInsecurePackages = [ "openssl-1.1.1w" # required for mongodb + "electron-27.3.11" ]; networking = { diff --git a/nixos/programs/cosmic.nix b/nixos/programs/cosmic.nix index 8028081..3f1ccb9 100644 --- a/nixos/programs/cosmic.nix +++ b/nixos/programs/cosmic.nix @@ -14,7 +14,7 @@ services.displayManager.cosmic-greeter.enable = true; services.system76-scheduler.enable = true; home-manager.users.${config.user}.imports = [ - (import "${inputs.home-manager-cosmic}/modules/programs/cosmic/.") + (inputs.hm-cosmic.homeManagerModules.cosmic) ../../home/desktop/cosmic/. ]; } diff --git a/nixos/programs/gamer.nix b/nixos/programs/gamer.nix index b676f2e..96e3a16 100644 --- a/nixos/programs/gamer.nix +++ b/nixos/programs/gamer.nix @@ -6,23 +6,23 @@ nixpkgs.config.allowUnfreePredicate = pkg: builtins.elem (lib.getName pkg) [ "steam" + "steam-unwrapped" "steam-run" "steam-original" "osu-lazer" ]; programs.steam = { enable = true; - extest.enable = true; - extraCompatPackages = with pkgs; [ - proton-ge-bin - ]; remotePlay.openFirewall = true; dedicatedServer.openFirewall = true; + gamescopeSession = { + enable = true; + args = ["-r" "144" "-O" "DP-1" "--rt"]; + }; + }; + programs.gamescope = { + enable = true; + capSysNice = true; }; programs.gamemode.enable = true; - services.monado.enable = true; - systemd.user.services.monado.environment = { - STEAMVR_LH_ENABLE = "true"; - XRT_COMPOSITOR_SCALE_PERCENTAGE = "200"; - }; } diff --git a/nixos/programs/kodi.nix b/nixos/programs/kodi.nix new file mode 100644 index 0000000..2f210e0 --- /dev/null +++ b/nixos/programs/kodi.nix @@ -0,0 +1,14 @@ +{pkgs, ...}: { + services.xserver.desktopManager.kodi = { + enable = true; + package = + pkgs.kodi.withPackages + (exts: + with exts; [ + jellyfin + steam-launcher + joystick + youtube + ]); + }; +} diff --git a/nixos/programs/libvertd.nix b/nixos/programs/libvertd.nix new file mode 100644 index 0000000..d251279 --- /dev/null +++ b/nixos/programs/libvertd.nix @@ -0,0 +1,13 @@ +{config, ...}: let + user = config.user; +in { + users.users.${user}.extraGroups = ["libvirtd" "kvm"]; + virtualisation.libvirtd = { + enable = true; + nss = { + enable = true; + enableGuest = true; + }; + }; + programs.virt-manager.enable = true; +} diff --git a/nixos/programs/pipewire.nix b/nixos/programs/pipewire.nix index 57a8694..4650c3c 100644 --- a/nixos/programs/pipewire.nix +++ b/nixos/programs/pipewire.nix @@ -1,4 +1,4 @@ -{ +{pkgs, ...}: { hardware.pulseaudio.enable = false; security.rtkit.enable = true; services.pipewire = { diff --git a/nixos/services/arr.nix b/nixos/services/arr.nix index eef5b50..6f0c0f5 100644 --- a/nixos/services/arr.nix +++ b/nixos/services/arr.nix @@ -2,6 +2,12 @@ inherit (config) sops; inherit (sops) templates placeholder; in { + nixpkgs.config.permittedInsecurePackages = [ + "aspnetcore-runtime-6.0.36" + "aspnetcore-runtime-wrapped-6.0.36" + "dotnet-sdk-6.0.428" + "dotnet-sdk-wrapped-6.0.428" + ]; users.groups.media = {}; services.jackett = { enable = true; @@ -37,20 +43,21 @@ in { ports = ["9091:9091"]; volumes = [ "/mnt/storage/downloads:/data" - "transmission-config:/config" + "/home/tristan/pods/transmission/config:/config" "/mnt/storage/media/unsorted:/data/completed" ]; environmentFiles = [ templates."transmission/env".path ]; environment = { PUID = "1000"; GUID = "1000"; - SUBNET = "100.0.0.0/8"; + LOCAL_NETWORK = "100.0.0.0/8"; + }; + privileged = true; + capabilities = { + "NET_ADMIN" = true; + "NET_RAW" = true; + "MKNOD" = true; }; - extraOptions = builtins.map (cap: "--cap-add=${cap}") [ - "NET_ADMIN" - "NET_RAW" - "MKNOD" - ]; }; sops.secrets = { "transmission/auth/OPENVPN_PROVIDER" = {}; diff --git a/nixos/services/mautrix/whatsapp.nix b/nixos/services/mautrix/whatsapp.nix index 2fb005b..cc65690 100644 --- a/nixos/services/mautrix/whatsapp.nix +++ b/nixos/services/mautrix/whatsapp.nix @@ -1,12 +1,14 @@ -{config, ...}: { - nixpkgs.config.permittedInsecurePackages = [ - "olm-3.2.16" - ]; - +{config, ...}: +{ +# TODO: totally borked for some reason. DB migration? services.mautrix-whatsapp = { enable = true; registerToSynapse = true; settings = { + appservice.database = { + type = "sqlite3"; + uri = "/var/lib/mautrix-whatsapp/mautrix-whatsapp.db"; + }; homeserver = { address = "http://localhost:8008"; domain = "tristans.cloud"; diff --git a/nixos/services/musnix.nix b/nixos/services/musnix.nix new file mode 100644 index 0000000..9bbd89d --- /dev/null +++ b/nixos/services/musnix.nix @@ -0,0 +1,24 @@ +{ inputs, user, pkgs, lib, ... }: { + imports = [inputs.musnix.nixosModules.musnix]; + users.users.${user}.extraGroups = ["audio"]; + musnix = { + enable = true; + rtcqs.enable = true; + kernel.realtime = true; + }; + environment.systemPackages = with pkgs; [ + ardour + musescore + muse + helm + calf + qjackctl + sfizz + tap-plugins + x42-plugins + x42-gmsynth + carla + drumgizmo + distrho-ports + ]; +} diff --git a/nixos/services/nextcloud.nix b/nixos/services/nextcloud.nix index 23be426..d13cc16 100644 --- a/nixos/services/nextcloud.nix +++ b/nixos/services/nextcloud.nix @@ -81,17 +81,13 @@ in { maps previewgenerator deck + news ; oidc_login = pkgs.fetchNextcloudApp { sha256 = "sha256-DrbaKENMz2QJfbDKCMrNGEZYpUEvtcsiqw9WnveaPZA="; url = "https://github.com/pulsejet/nextcloud-oidc-login/releases/download/v3.2.0/oidc_login.tar.gz"; license = "agpl3Only"; }; - news = pkgs.fetchNextcloudApp { - sha256 = "sha256-jH1F/IZItlZEpsfgXhRojiYD6ZEVhsuRvz8Qs0Z3UFI="; - url = "https://github.com/nextcloud/news/releases/download/25.0.0-alpha9/news.tar.gz"; - license = "agpl3Only"; - }; }; maxUploadSize = "5G"; }; diff --git a/nixos/services/synapse/default.nix b/nixos/services/synapse/default.nix index d324a0a..c09c4ed 100644 --- a/nixos/services/synapse/default.nix +++ b/nixos/services/synapse/default.nix @@ -86,12 +86,6 @@ in { }; }; - services.matrix-sliding-sync = { - enable = true; - environmentFile = templates."synapse/sliding_sync_env".path; - settings.SYNCV3_SERVER = "https://${domain}"; - }; - services.nginx.virtualHosts = { ${domain} = { locations."= /.well-known/matrix/server".extraConfig = mkWellKnown { @@ -99,7 +93,6 @@ in { }; locations."= /.well-known/matrix/client".extraConfig = mkWellKnown { "m.homeserver".base_url = "https://${fqdn}"; - "org.matrix.msc3575.proxy"."url" = "https://${fqdn}"; }; locations."= /.well-known/matrix/support".extraConfig = mkWellKnown { admins = [ @@ -112,14 +105,12 @@ in { }; locations."/_matrix".proxyPass = "http://localhost:${toString port}"; locations."/_synapse/client".proxyPass = "http://localhost:${toString port}"; - locations."/_matrix/client/unstable/org.matrix.msc3575/sync".proxyPass = "http://${toString matrix-sliding-sync.settings.SYNCV3_BINDADDR}"; }; ${fqdn} = { enableACME = true; forceSSL = true; locations."/_matrix".proxyPass = "http://localhost:${toString port}"; locations."/_synapse/client".proxyPass = "http://localhost:${toString port}"; - locations."/_matrix/client/unstable/org.matrix.msc3575/sync".proxyPass = "http://${toString matrix-sliding-sync.settings.SYNCV3_BINDADDR}"; }; }; } diff --git a/nixos/workstation.nix b/nixos/workstation.nix index b997b05..b3e428d 100644 --- a/nixos/workstation.nix +++ b/nixos/workstation.nix @@ -13,15 +13,10 @@ hardware.opentabletdriver.enable = true; - programs.nm-applet.enable = true; - - services.printing.enable = true; - services.dbus = { enable = true; packages = [pkgs.gcr]; }; - programs.light.enable = true; programs.dconf.enable = true; hardware.bluetooth.enable = true; @@ -53,11 +48,12 @@ }; targets = { gtk.enable = false; # fails to switch with cosmic overriding it (grr) + gnome.enable = false; grub = { useImage = true; }; nixvim = { - transparentBackground.main = true; + enable = false; }; }; }; @@ -69,7 +65,7 @@ ]; fonts.packages = with pkgs; [ - nerdfonts + nerd-fonts.symbols-only interalia ]; diff --git a/secrets/secrets.yaml b/secrets/secrets.yaml index d38eaa9..7ef2c52 100644 --- a/secrets/secrets.yaml +++ b/secrets/secrets.yaml @@ -28,7 +28,7 @@ mail: ssl: ENC[AES256_GCM,data:swCVBQ==,iv:Us4kZfQ2wIx/qJXDaPDuUNvGU2F+U8EtV21SPbTebe8=,tag:Zuc0y6aTyjQBe4ZV7zy3NA==,type:str] transmission: auth: - OPENVPN_PROVIDER: ENC[AES256_GCM,data:uk/rxQ==,iv:WycsUcM9qRW6ExylDK9kCD2PKT9XMijLBJXkYKUmhDI=,tag:AiBA+UVlKfMhpyV3MB9ZBA==,type:str] + OPENVPN_PROVIDER: ENC[AES256_GCM,data:cgYUsQ==,iv:KXddHlOwqbn97SmLkdRIDrqiAAihfXNpG64uD80UnKI=,tag:s6tkiawsfOOXV3ZMltL4MQ==,type:str] OPENVPN_CONFIG: ENC[AES256_GCM,data:mHMLA2Rqte+aEGstKCan3fNPEqwb,iv:wvLx3rWNcDVek6bmXBu+39AlnXpviNNwCItLAWWVDzY=,tag:1ArWMperFmOFSCdehWibNg==,type:str] OPENVPN_USERNAME: ENC[AES256_GCM,data:RQ+hGLE6YEgN/aaa2TLpkg==,iv:oG794WxGe0t1ZI0PyC45ZgCPA0Ar2m/dSVDdMYBKJvY=,tag:CGnEu8ds0s4aH4ImCrNWNQ==,type:str] OPENVPN_PASSWORD: ENC[AES256_GCM,data:Jw==,iv:uGAaXFWfpSaeqY7yC9cR9iqblH3E3hudnrnIlOvdRCg=,tag:P1XJ2SBY82z9YZP9J/n5SA==,type:str] @@ -48,8 +48,8 @@ sops: S3ZwcHhkdEEvY0pINDloand5S0NycHcKEpIt5EeIKhLQK7f74sWVN/x5gzh/Jq7x UUN5QtysRbWVGnWRxdNB8LIMjDJY9jRojycdQfSNebaz5ZLjEp8dZQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2025-01-17T23:54:41Z" - mac: ENC[AES256_GCM,data:kX07sYwKyAu2ElYoBIuaVVryIGIUowxS4ZMxIoX9/aDQY9+yVrmaWzj1kmQNyTqoSBZyetDGQzNV3mMjgCpIQ2XjJdCB5lH4M5DOV63A3pwDwDeHSzzTrURY6xubeswl8o+2k+gxD0/oLLB9j+YZxb9F1oKQt2cK1dzOYPdtUL8=,iv:ftaeEg78WejtZM6J8BiahmsSbQub/5Kz/oLVU3nJhtA=,tag:eobu6KIZwltpC43qXpTVaQ==,type:str] + lastmodified: "2025-01-18T02:00:29Z" + mac: ENC[AES256_GCM,data:x3J0tRfNynM2qlB4YUUAUMYI/94opN1kJ1j0kOyeZ1GZHx+EA4dQZif4nPQOERo+5xRt8C4YXVDZEnCjD1TpQE6LYik0n0iY+84sY5fSr2SYiXzq2P72Tk7BzBklI9/zjndeJLJbydTJDMzOCvdEWIfHYZsHODnKXBO9pYwjAqU=,iv:z+QD93t72S2w0CqMV5sQk9oK9LMnQAxyaiExmqEcSp0=,tag:dbtyHUQ+n2EQvHEkQa7zrw==,type:str] pgp: [] unencrypted_suffix: _unencrypted - version: 3.9.0 + version: 3.9.2