Kieran's opinionated (and probably slightly dumb) nix config

Compare changes

Choose any two refs to compare.

+4 -3
README.md
···
<details>
<summary>I've stuck the rest of the screenshots in a spoiler to preserve space</summary>
-
![the github page of this repo](.github/images/github.png)
-
![nautilus file manager](.github/images/nautilus.png)
-
![neofetch](.github/images/neofetch.png)
+
![the github page of this repo](.github/images/github.png)
+
![nautilus file manager](.github/images/nautilus.png)
+
![neofetch](.github/images/neofetch.png)
</details>
## Credits
···
- [hyprwm/contrib](https://github.com/hyprwm/contrib)
- [gtk with home manager](https://hoverbear.org/blog/declarative-gnome-configuration-in-nixos/)
- [setting up the proper portals](https://github.com/NixOS/nixpkgs/issues/274554)
+
- [tuigreet setup](https://github.com/sjcobb2022/nixos-config/blob/29077cee1fc82c5296908f0594e28276dacbe0b0/hosts/common/optional/greetd.nix)
+288 -177
flake.lock
···
{
"nodes": {
-
"Hyprnix": {
-
"inputs": {
-
"bird-nix-lib": "bird-nix-lib",
-
"hyprland": "hyprland",
-
"hyprland-protocols": "hyprland-protocols_2",
-
"hyprland-xdph": "hyprland-xdph",
-
"hyprlang": "hyprlang_3",
-
"nixpkgs": "nixpkgs_2",
-
"systems": "systems_3"
-
},
-
"locked": {
-
"lastModified": 1718089837,
-
"narHash": "sha256-E4Q+ruDcE1S+CrHLwdpB32NvcITKOJWrg9LhMs+/Of0=",
-
"owner": "hyprland-community",
-
"repo": "hyprnix",
-
"rev": "cfb8fb276e605699589c578e27f0ddd8dbba102b",
-
"type": "github"
-
},
-
"original": {
-
"owner": "hyprland-community",
-
"repo": "hyprnix",
-
"type": "github"
-
}
-
},
"agenix": {
"inputs": {
"darwin": "darwin",
"home-manager": "home-manager",
-
"nixpkgs": "nixpkgs_3",
-
"systems": "systems_4"
+
"nixpkgs": "nixpkgs",
+
"systems": "systems"
},
"locked": {
"lastModified": 1720546205,
···
"type": "github"
}
},
+
"aquamarine": {
+
"inputs": {
+
"hyprutils": [
+
"hyprnix",
+
"hyprutils"
+
],
+
"hyprwayland-scanner": [
+
"hyprnix",
+
"hyprwayland-scanner"
+
],
+
"nixpkgs": [
+
"hyprnix",
+
"nixpkgs"
+
],
+
"systems": [
+
"hyprnix",
+
"systems"
+
]
+
},
+
"locked": {
+
"lastModified": 1722705009,
+
"narHash": "sha256-U/FTS7uJVPy9jEcHdPfnIhq7e14TXOoxX9xlKltoQdY=",
+
"owner": "hyprwm",
+
"repo": "aquamarine",
+
"rev": "a70fc6a2fd53fc82f0cbb464fd8e91f00511cfc1",
+
"type": "github"
+
},
+
"original": {
+
"owner": "hyprwm",
+
"repo": "aquamarine",
+
"type": "github"
+
}
+
},
"bird-nix-lib": {
"inputs": {
-
"nixpkgs": "nixpkgs",
-
"systems": "systems"
+
"nixpkgs": [
+
"hyprnix",
+
"nixpkgs"
+
],
+
"systems": [
+
"hyprnix",
+
"systems"
+
]
},
"locked": {
"lastModified": 1718015582,
···
"owner": "catppuccin",
"repo": "nix",
"type": "github"
+
}
+
},
+
"catppuccin-vsc": {
+
"inputs": {
+
"nixpkgs": "nixpkgs_2"
+
},
+
"locked": {
+
"lastModified": 1713966373,
+
"narHash": "sha256-8bMRH+z426e6zWcS15QZsQ8moSAKbEDjtBnAE10+DW8=",
+
"rev": "4b857d9b86cbb393e121f0f2544a6efb549dbbf4",
+
"revCount": 482,
+
"type": "tarball",
+
"url": "https://api.flakehub.com/f/pinned/catppuccin/vscode/3.14.0/018f15b6-7a7e-7bae-80f2-cf902f1db7fe/source.tar.gz"
+
},
+
"original": {
+
"type": "tarball",
+
"url": "https://flakehub.com/f/catppuccin/vscode/%2A.tar.gz"
}
},
"darwin": {
···
"type": "github"
}
},
+
"flake-compat_2": {
+
"flake": false,
+
"locked": {
+
"lastModified": 1696426674,
+
"narHash": "sha256-kvjfFW7WAETZlt09AgDn1MrtKzP7t90Vf7vypd3OL1U=",
+
"owner": "edolstra",
+
"repo": "flake-compat",
+
"rev": "0f9255e01c2351cc7d116c072cb317785dd33b33",
+
"type": "github"
+
},
+
"original": {
+
"owner": "edolstra",
+
"repo": "flake-compat",
+
"type": "github"
+
}
+
},
+
"flake-utils": {
+
"inputs": {
+
"systems": "systems_3"
+
},
+
"locked": {
+
"lastModified": 1710146030,
+
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
+
"owner": "numtide",
+
"repo": "flake-utils",
+
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
+
"type": "github"
+
},
+
"original": {
+
"owner": "numtide",
+
"repo": "flake-utils",
+
"type": "github"
+
}
+
},
"hardware": {
"locked": {
"lastModified": 1721839713,
···
"type": "github"
}
},
-
"hyprland": {
+
"hyprcursor": {
"inputs": {
-
"hyprland-protocols": "hyprland-protocols",
-
"hyprlang": "hyprlang",
+
"hyprlang": [
+
"hyprnix",
+
"hyprlang"
+
],
"nixpkgs": [
-
"Hyprnix",
+
"hyprnix",
"nixpkgs"
],
"systems": [
-
"Hyprnix",
+
"hyprnix",
"systems"
-
],
-
"wlroots": "wlroots",
-
"xdph": "xdph"
+
]
},
"locked": {
-
"lastModified": 1708870181,
-
"narHash": "sha256-SRgG4MR7GXzZxgP0rMHxIkGp0yLEoVCV50nL8TKe+mA=",
+
"lastModified": 1722623071,
+
"narHash": "sha256-sLADpVgebpCBFXkA1FlCXtvEPu1tdEsTfqK1hfeHySE=",
"owner": "hyprwm",
-
"repo": "hyprland",
-
"rev": "54a8329936d31537411c7a1a4d1815820b98316a",
+
"repo": "hyprcursor",
+
"rev": "912d56025f03d41b1ad29510c423757b4379eb1c",
"type": "github"
},
"original": {
"owner": "hyprwm",
-
"repo": "hyprland",
+
"repo": "hyprcursor",
"type": "github"
}
},
+
"hyprland": {
+
"inputs": {
+
"aquamarine": [
+
"hyprnix",
+
"aquamarine"
+
],
+
"hyprcursor": [
+
"hyprnix",
+
"hyprcursor"
+
],
+
"hyprlang": [
+
"hyprnix",
+
"hyprlang"
+
],
+
"hyprutils": [
+
"hyprnix",
+
"hyprutils"
+
],
+
"hyprwayland-scanner": [
+
"hyprnix",
+
"hyprwayland-scanner"
+
],
+
"nixpkgs": [
+
"hyprnix",
+
"nixpkgs"
+
],
+
"systems": [
+
"hyprnix",
+
"systems"
+
],
+
"xdph": [
+
"hyprnix",
+
"xdg-desktop-portal-hyprland"
+
]
+
},
+
"locked": {
+
"lastModified": 1722707408,
+
"narHash": "sha256-hyTuWhcid8UklJBC4Yh3dpf7Xhx4oJDyM/3n10E1wSk=",
+
"ref": "refs/heads/main",
+
"rev": "51ffd7fa6f186419276e5d3d5fe141a3fdb3c55c",
+
"revCount": 5048,
+
"submodules": true,
+
"type": "git",
+
"url": "https://github.com/hyprwm/Hyprland"
+
},
+
"original": {
+
"submodules": true,
+
"type": "git",
+
"url": "https://github.com/hyprwm/Hyprland"
+
}
+
},
"hyprland-contrib": {
"inputs": {
-
"nixpkgs": "nixpkgs_4"
+
"nixpkgs": "nixpkgs_3"
},
"locked": {
"lastModified": 1720709712,
···
"hyprland-protocols": {
"inputs": {
"nixpkgs": [
-
"Hyprnix",
-
"hyprland",
+
"hyprnix",
"nixpkgs"
],
"systems": [
-
"Hyprnix",
-
"hyprland",
+
"hyprnix",
"systems"
]
},
"locked": {
-
"lastModified": 1691753796,
-
"narHash": "sha256-zOEwiWoXk3j3+EoF3ySUJmberFewWlagvewDRuWYAso=",
+
"lastModified": 1721326555,
+
"narHash": "sha256-zCu4R0CSHEactW9JqYki26gy8h9f6rHmSwj4XJmlHgg=",
"owner": "hyprwm",
"repo": "hyprland-protocols",
-
"rev": "0c2ce70625cb30aef199cb388f99e19a61a6ce03",
+
"rev": "5a11232266bf1a1f5952d5b179c3f4b2facaaa84",
"type": "github"
},
"original": {
···
"type": "github"
}
},
-
"hyprland-protocols_2": {
+
"hyprlang": {
"inputs": {
+
"hyprutils": [
+
"hyprnix",
+
"hyprutils"
+
],
"nixpkgs": [
-
"Hyprnix",
+
"hyprnix",
"nixpkgs"
],
"systems": [
-
"Hyprnix",
+
"hyprnix",
"systems"
]
},
"locked": {
-
"lastModified": 1691753796,
-
"narHash": "sha256-zOEwiWoXk3j3+EoF3ySUJmberFewWlagvewDRuWYAso=",
+
"lastModified": 1721324361,
+
"narHash": "sha256-BiJKO0IIdnSwHQBSrEJlKlFr753urkLE48wtt0UhNG4=",
"owner": "hyprwm",
-
"repo": "hyprland-protocols",
-
"rev": "0c2ce70625cb30aef199cb388f99e19a61a6ce03",
+
"repo": "hyprlang",
+
"rev": "adbefbf49664a6c2c8bf36b6487fd31e3eb68086",
"type": "github"
},
"original": {
"owner": "hyprwm",
-
"repo": "hyprland-protocols",
+
"repo": "hyprlang",
"type": "github"
}
},
-
"hyprland-xdph": {
+
"hyprnix": {
"inputs": {
-
"hyprland-protocols": [
-
"Hyprnix",
-
"hyprland-protocols"
-
],
-
"hyprlang": "hyprlang_2",
-
"nixpkgs": [
-
"Hyprnix",
-
"nixpkgs"
-
],
-
"systems": [
-
"Hyprnix",
-
"systems"
-
]
+
"aquamarine": "aquamarine",
+
"bird-nix-lib": "bird-nix-lib",
+
"hyprcursor": "hyprcursor",
+
"hyprland": "hyprland",
+
"hyprland-protocols": "hyprland-protocols",
+
"hyprlang": "hyprlang",
+
"hyprutils": "hyprutils",
+
"hyprwayland-scanner": "hyprwayland-scanner",
+
"nixpkgs": "nixpkgs_4",
+
"systems": "systems_2",
+
"xdg-desktop-portal-hyprland": "xdg-desktop-portal-hyprland"
},
"locked": {
-
"lastModified": 1708696469,
-
"narHash": "sha256-shh5wmpeYy3MmsBfkm4f76yPsBDGk6OLYRVG+ARy2F0=",
-
"owner": "hyprwm",
-
"repo": "xdg-desktop-portal-hyprland",
-
"rev": "1b713911c2f12b96c2574474686e4027ac4bf826",
+
"lastModified": 1722829543,
+
"narHash": "sha256-fUY2Z3GsiS2ID9LLiB7sCarkdlTjLVzORg+RItuqSOs=",
+
"owner": "hyprland-community",
+
"repo": "hyprnix",
+
"rev": "c061b6086210e635a906837947ccd5bbfce50c28",
"type": "github"
},
"original": {
-
"owner": "hyprwm",
-
"repo": "xdg-desktop-portal-hyprland",
+
"owner": "hyprland-community",
+
"ref": "rewrite",
+
"repo": "hyprnix",
"type": "github"
}
},
-
"hyprlang": {
+
"hyprutils": {
"inputs": {
"nixpkgs": [
-
"Hyprnix",
-
"hyprland",
+
"hyprnix",
"nixpkgs"
],
"systems": [
-
"Hyprnix",
-
"hyprland",
+
"hyprnix",
"systems"
]
},
"locked": {
-
"lastModified": 1708681732,
-
"narHash": "sha256-ULZZLZ9C33G13IaXLuAc4oTzHUvnATI8Fj2u6gzMfT0=",
+
"lastModified": 1722098849,
+
"narHash": "sha256-D3wIZlBNh7LuZ0NaoCpY/Pvu+xHxIVtSN+KkWZYvvVs=",
"owner": "hyprwm",
-
"repo": "hyprlang",
-
"rev": "f4466367ef0a92a6425d482050dc2b8840c0e644",
+
"repo": "hyprutils",
+
"rev": "5dcbbc1e3de40b2cecfd2007434d86e924468f1f",
"type": "github"
},
"original": {
"owner": "hyprwm",
-
"repo": "hyprlang",
+
"repo": "hyprutils",
"type": "github"
}
},
-
"hyprlang_2": {
+
"hyprwayland-scanner": {
"inputs": {
"nixpkgs": [
-
"Hyprnix",
-
"hyprland-xdph",
+
"hyprnix",
"nixpkgs"
],
-
"systems": "systems_2"
+
"systems": [
+
"hyprnix",
+
"systems"
+
]
},
"locked": {
-
"lastModified": 1708681732,
-
"narHash": "sha256-ULZZLZ9C33G13IaXLuAc4oTzHUvnATI8Fj2u6gzMfT0=",
+
"lastModified": 1721324119,
+
"narHash": "sha256-SOOqIT27/X792+vsLSeFdrNTF+OSRp5qXv6Te+fb2Qg=",
"owner": "hyprwm",
-
"repo": "hyprlang",
-
"rev": "f4466367ef0a92a6425d482050dc2b8840c0e644",
+
"repo": "hyprwayland-scanner",
+
"rev": "a048a6cb015340bd82f97c1f40a4b595ca85cc30",
"type": "github"
},
"original": {
"owner": "hyprwm",
-
"repo": "hyprlang",
+
"repo": "hyprwayland-scanner",
"type": "github"
}
},
-
"hyprlang_3": {
+
"nix-vscode-extensions": {
"inputs": {
-
"nixpkgs": [
-
"Hyprnix",
-
"nixpkgs"
-
],
-
"systems": [
-
"Hyprnix",
-
"systems"
-
]
+
"flake-compat": "flake-compat",
+
"flake-utils": "flake-utils",
+
"nixpkgs": "nixpkgs_5"
},
"locked": {
-
"lastModified": 1708787654,
-
"narHash": "sha256-7ACgM3ZuAhPqurXHUvR2nWMRcnmzGGPjLK6q4DSTelI=",
-
"owner": "hyprwm",
-
"repo": "hyprlang",
-
"rev": "0fce791ba2334aca183f2ed42399518947550d0d",
+
"lastModified": 1722302960,
+
"narHash": "sha256-byZl18UZCHy3vLhxrXp8THzlzmwNfil93ZQLY30i7/Q=",
+
"owner": "nix-community",
+
"repo": "nix-vscode-extensions",
+
"rev": "e1a1e6cabd0140ed353e173290e6d92510f5fd66",
"type": "github"
},
"original": {
-
"owner": "hyprwm",
-
"repo": "hyprlang",
+
"owner": "nix-community",
+
"repo": "nix-vscode-extensions",
"type": "github"
}
},
···
},
"nixpkgs": {
"locked": {
-
"lastModified": 1717868076,
-
"narHash": "sha256-c83Y9t815Wa34khrux81j8K8ET94ESmCuwORSKm2bQY=",
-
"owner": "nixos",
+
"lastModified": 1703013332,
+
"narHash": "sha256-+tFNwMvlXLbJZXiMHqYq77z/RfmpfpiI3yjL6o/Zo9M=",
+
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "cd18e2ae9ab8e2a0a8d715b60c91b54c0ac35ff9",
+
"rev": "54aac082a4d9bb5bbc5c4e899603abfb76a3f6d6",
"type": "github"
},
"original": {
-
"owner": "nixos",
-
"ref": "nixpkgs-unstable",
+
"owner": "NixOS",
+
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
-
"nixpkgs_2": {
+
"nixpkgs-unstable": {
"locked": {
-
"lastModified": 1697723726,
-
"narHash": "sha256-SaTWPkI8a5xSHX/rrKzUe+/uVNy6zCGMXgoeMb7T9rg=",
+
"lastModified": 1722185531,
+
"narHash": "sha256-veKR07psFoJjINLC8RK4DiLniGGMgF3QMlS4tb74S6k=",
"owner": "nixos",
"repo": "nixpkgs",
-
"rev": "7c9cc5a6e5d38010801741ac830a3f8fd667a7a0",
+
"rev": "52ec9ac3b12395ad677e8b62106f0b98c1f8569d",
"type": "github"
},
"original": {
···
"type": "github"
}
},
-
"nixpkgs_3": {
+
"nixpkgs_2": {
"locked": {
-
"lastModified": 1703013332,
-
"narHash": "sha256-+tFNwMvlXLbJZXiMHqYq77z/RfmpfpiI3yjL6o/Zo9M=",
+
"lastModified": 1712963716,
+
"narHash": "sha256-WKm9CvgCldeIVvRz87iOMi8CFVB1apJlkUT4GGvA0iM=",
"owner": "NixOS",
"repo": "nixpkgs",
-
"rev": "54aac082a4d9bb5bbc5c4e899603abfb76a3f6d6",
+
"rev": "cfd6b5fc90b15709b780a5a1619695a88505a176",
"type": "github"
},
"original": {
···
"type": "github"
}
},
-
"nixpkgs_4": {
+
"nixpkgs_3": {
"locked": {
"lastModified": 1712163089,
"narHash": "sha256-Um+8kTIrC19vD4/lUCN9/cU9kcOsD1O1m+axJqQPyMM=",
···
"type": "github"
}
},
+
"nixpkgs_4": {
+
"locked": {
+
"lastModified": 1722421184,
+
"narHash": "sha256-/DJBI6trCeVnasdjUo9pbnodCLZcFqnVZiLUfqLH4jA=",
+
"owner": "nixos",
+
"repo": "nixpkgs",
+
"rev": "9f918d616c5321ad374ae6cb5ea89c9e04bf3e58",
+
"type": "github"
+
},
+
"original": {
+
"owner": "nixos",
+
"ref": "nixos-unstable",
+
"repo": "nixpkgs",
+
"type": "github"
+
}
+
},
"nixpkgs_5": {
"locked": {
+
"lastModified": 1713805509,
+
"narHash": "sha256-YgSEan4CcrjivCNO5ZNzhg7/8ViLkZ4CB/GrGBVSudo=",
+
"owner": "NixOS",
+
"repo": "nixpkgs",
+
"rev": "1e1dc66fe68972a76679644a5577828b6a7e8be4",
+
"type": "github"
+
},
+
"original": {
+
"owner": "NixOS",
+
"ref": "nixpkgs-unstable",
+
"repo": "nixpkgs",
+
"type": "github"
+
}
+
},
+
"nixpkgs_6": {
+
"locked": {
"lastModified": 1721686456,
"narHash": "sha256-nw/BnNzATDPfzpJVTnY8mcSKKsz6BJMEFRkJ332QSN0=",
"owner": "nixos",
···
},
"root": {
"inputs": {
-
"Hyprnix": "Hyprnix",
"agenix": "agenix",
"catppuccin": "catppuccin",
+
"catppuccin-vsc": "catppuccin-vsc",
"disko": "disko",
"hardware": "hardware",
"home-manager": "home-manager_2",
"hyprland-contrib": "hyprland-contrib",
+
"hyprnix": "hyprnix",
+
"nix-vscode-extensions": "nix-vscode-extensions",
"nixos-hardware": "nixos-hardware",
-
"nixpkgs": "nixpkgs_5",
+
"nixpkgs": "nixpkgs_6",
+
"nixpkgs-unstable": "nixpkgs-unstable",
"spicetify-nix": "spicetify-nix"
}
},
"spicetify-nix": {
"inputs": {
-
"flake-compat": "flake-compat",
+
"flake-compat": "flake-compat_2",
"nixpkgs": [
"nixpkgs"
]
···
}
},
"systems_2": {
+
"flake": false,
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
···
},
"systems_3": {
"locked": {
-
"lastModified": 1689347949,
-
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
-
"owner": "nix-systems",
-
"repo": "default-linux",
-
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
-
"type": "github"
-
},
-
"original": {
-
"owner": "nix-systems",
-
"repo": "default-linux",
-
"type": "github"
-
}
-
},
-
"systems_4": {
-
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
···
"type": "github"
}
},
-
"wlroots": {
-
"flake": false,
-
"locked": {
-
"host": "gitlab.freedesktop.org",
-
"lastModified": 1708558866,
-
"narHash": "sha256-Mz6hCtommq7RQfcPnxLINigO4RYSNt23HeJHC6mVmWI=",
-
"owner": "wlroots",
-
"repo": "wlroots",
-
"rev": "0cb091f1a2d345f37d2ee445f4ffd04f7f4ec9e5",
-
"type": "gitlab"
-
},
-
"original": {
-
"host": "gitlab.freedesktop.org",
-
"owner": "wlroots",
-
"repo": "wlroots",
-
"rev": "0cb091f1a2d345f37d2ee445f4ffd04f7f4ec9e5",
-
"type": "gitlab"
-
}
-
},
-
"xdph": {
+
"xdg-desktop-portal-hyprland": {
"inputs": {
"hyprland-protocols": [
-
"Hyprnix",
-
"hyprland",
+
"hyprnix",
"hyprland-protocols"
],
"hyprlang": [
-
"Hyprnix",
-
"hyprland",
+
"hyprnix",
"hyprlang"
],
"nixpkgs": [
-
"Hyprnix",
-
"hyprland",
+
"hyprnix",
"nixpkgs"
],
"systems": [
-
"Hyprnix",
-
"hyprland",
+
"hyprnix",
"systems"
]
},
"locked": {
-
"lastModified": 1708696469,
-
"narHash": "sha256-shh5wmpeYy3MmsBfkm4f76yPsBDGk6OLYRVG+ARy2F0=",
+
"lastModified": 1722365976,
+
"narHash": "sha256-Khdm+mDzYA//XaU0M+hftod+rKr5q9SSHSEuiQ0/9ow=",
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
-
"rev": "1b713911c2f12b96c2574474686e4027ac4bf826",
+
"rev": "7f2a77ddf60390248e2a3de2261d7102a13e5341",
"type": "github"
},
"original": {
+20 -1
flake.nix
···
inputs = {
# Nixpkgs
nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05";
+
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
# NixOS hardware configuration
hardware.url = "github:NixOS/nixos-hardware/master";
···
home-manager.inputs.nixpkgs.follows = "nixpkgs";
# hyprland nix
-
Hyprnix.url = "github:hyprland-community/hyprnix";
+
hyprnix.url = "github:hyprland-community/hyprnix/rewrite";
hyprland-contrib = {
url = "github:hyprwm/contrib";
};
···
# catppuccin
catppuccin.url = "github:catppuccin/nix";
+
catppuccin-vsc.url = "https://flakehub.com/f/catppuccin/vscode/\*.tar.gz";
+
+
nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions";
};
outputs = {
self,
nixpkgs,
+
nixpkgs-unstable,
agenix,
home-manager,
nixos-hardware,
···
...
} @ inputs: let
inherit (self) outputs;
+
system = "x86_64-linux";
+
unstable-overlays = {
+
nixpkgs.overlays = [
+
(final: prev: {
+
unstable = import nixpkgs-unstable {
+
inherit system;
+
config.allowUnfree = true;
+
};
+
})
+
];
+
};
in {
# NixOS configuration entrypoint
# Available through 'nixos-rebuild --flake .#your-hostname'
nixosConfigurations = {
moonlark = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
+
specialArgs = {inherit inputs outputs;};
+
# > Our main nixos configuration file <
modules = [
inputs.disko.nixosModules.disko
{ disko.devices.disk.disk1.device = "/dev/vda"; }
agenix.nixosModules.default
./moonlark/configuration.nix
+
unstable-overlays
];
};
};
+6 -6
home-manager/dots/hyprland.conf
···
bind = CTRL + SHIFT, F, exec, firefox
bind = CTRL + SHIFT, S, exec, spotify
bind = CTRL + SHIFT, L, exec, slack
+
bind = CTRL + SHIFT, O, exec, obs
+
bind = CTRL + SHIFT, K, exec, export GTK_THEME=Adwaita:dark && kicad
bind = $mainMod, RETURN, exec, alacritty
-
-
# Launcher
-
bind = $mainMod, S, exec, sh ~/.config/bspwm/rofi/bin/launcher
-
bind = $mainMod, X, exec, sh ~/.config/bspwm/rofi/bin/powermenu
# System
bind = $mainMod, Q, killactive,
bind = $mainMod, M, exit
bind = $mainMod, L, exec, hyprlock
+
bind = $mainMod, ESC, exec, hyprlock
bind = $mainMod, V, togglefloating,
-
bind = $mainMod, R, exec, wofi --show drun
+
bind = $mainMod, S, exec, tofi-run | xargs xargs hyprctl dispatch exec --
bind = $mainMod, P, pseudo, # dwindle
bind = $mainMod, J, togglesplit, # dwindle
-
bind = $mainMod, L, exec, ~/.config/hypr/scripts/lock.sh
# Tools
bind=CTRL,PRINT,exec,grimblast copy area; notify-desktop "copied screenshot of selection to the clipboard"
bind=ALT,PRINT,exec,grimblast copy active; notify-desktop "copied screenshot of active window to clipboard"
bind=,PRINT,exec,grimblast copy output; notify-desktop "copied screenshot of screen to the clipboard"
+
+
bind=$mainMod, O, exec, hyprpicker -a -f hex
# Controls
bindel =,XF86MonBrightnessDown, exec, brightnessctl set 5%-; notify-desktop "brightness decreased 5%" "Curretly; $(echo "scale=1; 100 * $(brightnessctl g) / $(brightnessctl m)" | bc)%" -t 1200
+121 -2
home-manager/home.nix
···
# inputs.Hyprnix.homeManagerModules.hyprland
-
./hyprland.nix
-
# ./hyprland
+
# ./hyprland.nix
+
./hyprland
./waybar.nix
+
+
./neovim.nix
];
nixpkgs = {
+
overlays = [
+
inputs.nix-vscode-extensions.overlays.default
+
inputs.catppuccin-vsc.overlays.default
+
];
# Configure your nixpkgs instance
config = {
# Disable if you don't want unfree packages
···
update = "sudo nixos-rebuild switch";
gc = "git commit";
gp = "git push";
+
rr = "rm -Rf";
+
ghrpc = "gh repo create -c";
};
+
initExtra = ''
+
#ssh auto reconnect
+
assh() {
+
local host=$1
+
local port=$2
+
while true; do
+
ssh -p $port -o "BatchMode yes" $host || sleep 1
+
done
+
}
+
'';
history = {
size = 10000;
path = "${config.xdg.dataHome}/zsh/history";
···
];
};
+
programs.zoxide = {
+
enable = true;
+
enableZshIntegration = true;
+
};
+
# alacritty
programs.alacritty = {
enable = true;
···
margin = "58,6";
font = "Fira Sans 12";
borderRadius = 5;
+
};
+
+
programs.tofi = {
+
enable = true;
+
catppuccin.enable = false;
+
settings = {
+
font = "Fira Sans";
+
font-size = 24;
+
+
prompt-text = ''"> "'';
+
placeholder-text = "search for something";
+
hide-cursor = true;
+
+
corner-radius = 10;
+
outline-width = 3;
+
border-width = 0;
+
padding-left = "4%";
+
padding-top = "2%";
+
padding-right = 0;
+
padding-bottom = 0;
+
+
outline-color = "#1E2030";
+
text-color = "#cad3f5";
+
prompt-color = "#ed8796";
+
placeholder-color = "#8087A2";
+
selection-color = "#eed49f";
+
background-color = "#24273a";
+
+
width = "35%";
+
height = "15%";
+
};
+
};
+
+
programs.vscode = {
+
enable = true;
+
extensions = with pkgs.vscode-marketplace; [
+
ms-vscode.live-server
+
formulahendry.auto-rename-tag
+
edwinkofler.vscode-assorted-languages
+
golang.go
+
catppuccin.catppuccin-vsc-icons
+
eamodio.gitlens
+
yzhang.markdown-all-in-one
+
github.vscode-github-actions
+
yoavbls.pretty-ts-errors
+
esbenp.prettier-vscode
+
vsciot-vscode.vscode-arduino
+
ms-vscode.cpptools
+
ms-vscode.vscode-serial-monitor
+
prisma.prisma
+
ms-azuretools.vscode-docker
+
astro-build.astro-vscode
+
github.copilot
+
github.copilot-chat
+
dotjoshjohnson.xml
+
johnpapa.vscode-cloak
+
mikestead.dotenv
+
]
+
++ [(pkgs.catppuccin-vsc.override {
+
accent = "blue";
+
})];
+
+
userSettings = {
+
"editor.semanticHighlighting.enabled" = true;
+
"terminal.integrated.minimumContrastRatio" = 1;
+
"window.titleBarStyle" = "custom";
+
+
"gopls" = {
+
"ui.semanticTokens" = true;
+
};
+
"workbench.colorTheme" = "Catppuccin Macchiato";
+
"workbench.iconTheme" = "catppuccin-macchiato";
+
"catppuccin.accentColor" = "blue";
+
"editor.fontFamily" = "'FiraCode Nerd Font', 'monospace', monospace";
+
"git.autofetch" = true;
+
"git.confirmSync" = false;
+
"github.copilot.editor.enableAutoCompletions" = false;
+
+
"editor.formatOnSave" = true;
+
+
"[json]" = {
+
"editor.defaultFormatter" = "esbenp.prettier-vscode";
+
};
+
"[javascript]" = {
+
"editor.defaultFormatter" = "esbenp.prettier-vscode";
+
};
+
};
+
};
+
+
programs.obs-studio = {
+
enable = true;
+
plugins = with pkgs.obs-studio-plugins; [
+
wlrobs
+
obs-backgroundremoval
+
obs-pipewire-audio-capture
+
];
};
# Nicely reload system units when changing configs
+4 -62
home-manager/hyprland/config.nix
···
{ lib, ... }:
-
let
-
inherit (lib.birdos.colors) grayRGB;
-
hyprRGBA = rgb: a: "rgba(${lib.birdos.colors.hexRGBA rgb a})";
-
gb = (lib.birdos.colors.formats.custom hyprRGBA).gruvbox.dark;
-
shadow = hyprRGBA (grayRGB 6.0e-2); # 6% of each channel
-
in {
+
{
wayland.windowManager.hyprland = {
# <https://wiki.hyprland.org/Configuring/Variables/#general>
config.general = {
border_size = 2;
gaps_inside = 5;
gaps_outside = 10;
-
active_border_color = gb.fg3 1.0;
-
inactive_border_color = gb.bg3 1.0;
-
cursor_inactive_timeout = 10;
-
no_cursor_warps = true;
resize_on_border = true;
extend_border_grab_area = 10;
};
···
rounding = 0;
shadow_range = 8;
shadow_render_power = 2;
-
active_shadow_color = shadow 0.9;
-
inactive_shadow_color = shadow 0.6;
blur = {
size = 3; # 8
passes = 2; # 1
···
in {
follow_mouse = LOOSE;
float_switch_override_focus = DISABLED;
+
touchpad = {
+
natural_scroll = true;
+
};
};
# <https://wiki.hyprland.org/Configuring/Variables/#binds>
···
insert_after_current = true;
focus_removed_window = true;
-
active_border_color = gb.hl_yellow 1.0;
-
inactive_border_color = gb.bg3 1.0;
-
locked_active_border_color = gb.hl_blue 1.0;
-
locked_inactive_border_color = gb.bg3 1.0;
-
# These features are not polished yet:
# <https://github.com/hyprwm/Hyprland/issues/2415>
# @MightyPlaza is working on this, but not doing it how we expect.
···
gradients = false;
render_titles = true;
scrolling = true;
-
text_color = gb.fg0 1.0;
-
-
active_color = gb.fg3 1.0;
-
inactive_color = gb.bg1 0.6;
-
locked_active_color = active_color;
-
locked_inactive_color = inactive_color;
};
};
···
};
# <https://wiki.hyprland.org/Configuring/Animations/#curves>
-
animations.animation = {
-
# window creation
-
windowsIn = {
-
enable = true;
-
duration = 200;
-
curve = "easeOutCirc";
-
style = "popin 60%";
-
};
-
fadeIn = {
-
enable = true;
-
duration = 100;
-
curve = "easeOutCirc";
-
};
-
# window destruction
-
windowsOut = {
-
enable = true;
-
duration = 200;
-
curve = "easeOutCirc";
-
style = "popin 60%";
-
};
-
fadeOut = {
-
enable = true;
-
duration = 100;
-
curve = "easeOutCirc";
-
};
-
# window movement
-
windowsMove = {
-
enable = true;
-
duration = 300;
-
curve = "easeInOutCubic";
-
style = "popin";
-
};
-
workspaces = {
-
enable = true;
-
duration = 200;
-
curve = "easeOutCirc";
-
style = "slide";
-
};
-
};
};
}
+7 -24
home-manager/hyprland/default.nix
···
{ self, config, lib, pkgs, inputs, ... }: {
imports = [
-
inputs.hyprland-nix.homeManagerModules.hyprland
-
# inputs.hyprland-nix.homeManagerModules.xdg-desktop-portals
-
#./config.nix
-
#./windowrules.nix
-
#./keybinds.nix
-
#./waybar.nix
+
inputs.hyprnix.homeManagerModules.hyprland
+
./config.nix
+
./windowrules.nix
+
./keybinds.nix
+
../waybar.nix
];
wayland.windowManager.hyprland = {
···
systemdIntegration = true;
recommendedEnvironment = true;
+
fufexan.enable = true;
+
xwayland.enable = true;
config.exec_once = [
···
"${lib.getExe pkgs.xorg.xhost} +local:"
];
};
-
-
# xdg.desktopPortals = {
-
# enable = true;
-
# extraPortals = [
-
# pkgs.xdg-desktop-portal-hyprland
-
# pkgs.xdg-desktop-portal-kde
-
# pkgs.xdg-desktop-portal-gtk
-
# ];
-
# configPackages = [ config.wayland.windowManager.hyprland.package ];
-
# config = {
-
# x-cinnamon = { default = [ "xapp" "gtk" ]; };
-
# pantheon = {
-
# default = [ "pantheon" "gtk" ];
-
# "org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ];
-
# };
-
# common = { default = [ "gtk" ]; };
-
# };
-
# };
}
+1 -58
home-manager/hyprland/keybinds.nix
···
MOUSE_EX1 = "mouse:275";
MOUSE_EX2 = "mouse:276";
-
exec = {
-
screenshotWindow = pkgs.patchShellScript ./scripts/screenshot.sh {
-
runtimeInputs = with pkgs; [
-
jq
-
grim
-
wl-clipboard
-
libnotify
-
config.wayland.windowManager.hyprland.package
-
];
-
};
-
playerctl = lib.getExe pkgs.playerctl;
-
slight = lib.getExe pkgs.slight;
-
osdFunc = lib.getExe config.utilities.osd-functions.package;
-
airplaneMode = "sudo /run/current-system/sw/bin/airplane-mode";
-
toggleGroupOrLock =
-
pkgs.patchShellScript ./scripts/toggle-group-or-lock.sh {
-
runtimeInputs = with pkgs; [
-
jq
-
config.wayland.windowManager.hyprland.package
-
];
-
};
-
};
-
# Collections of keybinds common across multiple submaps are collected into
# groups, which can be merged together granularly.
groups = {
···
launchPrograms = {
# Launch the program with a shortcut.
bind."SUPER, E" = "exec, dolphin";
-
bind."SUPER, Enter" = "exec, alacritty";
+
bind."SUPER, Enter" = "exec, foot";
};
# Kill the active window.
···
# Forcefully kill a program after selecting its window with the mouse.
bind."SUPER_SHIFT, Q" = "exec, hyprctl kill";
-
# Screenshot the currently focused window and copy to clipboard.
-
bind."SUPER, print" = "exec, ${exec.screenshotWindow}";
-
# Select a region and take a screenshot, saving to the clipboard.
bind."SUPER_SHIFT, print" = "exec, prtsc -c -m r -D -b 00000066";
···
bind."SUPER, Space" = "exec, rofi -show drun -show-icons";
# Open Rofi to run a command.
bind."SUPER, R" = "exec, rofi -show run";
-
}
-
### FUNCTION KEYS ###
-
{
-
# The names of these keys can be found at:
-
# <https://github.com/xkbcommon/libxkbcommon/blob/master/include/xkbcommon/xkbcommon-keysyms.h>
-
-
bindl."SHIFT, XF86WLAN" = "exec, ${exec.airplaneMode}";
-
-
# Mute/unmute the active audio output.
-
bindl.", XF86AudioMute" = "exec, ${exec.osdFunc} output mute";
-
-
# Raise and lower the volume of the active audio output.
-
bindel.", XF86AudioRaiseVolume" = "exec, ${exec.osdFunc} output +0.05";
-
bindel.", XF86AudioLowerVolume" = "exec, ${exec.osdFunc} output -0.05";
-
-
# Mute the active microphone or audio source.
-
bindl.", XF86AudioMicMute" = "exec, ${exec.osdFunc} input mute";
-
-
# Raise and lower display brightness.
-
bindel.", XF86MonBrightnessUp" = "exec, ${exec.slight} inc 10 -t 300ms";
-
bindel.", XF86MonBrightnessDown" = "exec, ${exec.slight} dec 10 -t 300ms";
-
-
# Regular media control keys, if your laptop or bluetooth device has them.
-
bindl.", XF86AudioPlay" = "exec, ${exec.playerctl} play-pause";
-
bindl.", XF86AudioPrev" = "exec, ${exec.playerctl} previous";
-
bindl.", XF86AudioNext" = "exec, ${exec.playerctl} next";
-
-
# Poor-man's media player control keys.
-
bindl."SUPER, slash" = "exec, ${exec.playerctl} play-pause";
-
bindl."SUPER, comma" = "exec, ${exec.playerctl} previous";
-
bindl."SUPER, period" = "exec, ${exec.playerctl} next";
}
### WINDOW FOCUS & MOVEMENT ###
groups.moveFocusOrWindow
-384
home-manager/hyprland/waybar.nix
···
-
{ config, lib, pkgs, ... }:
-
let
-
package = pkgs.waybar;
-
-
# the fonts that will be included with the waybar package
-
fontPackages = [ pkgs.ubuntu_font_family pkgs.material-design-icons ];
-
-
# patch those fonts in
-
package' = let super = package;
-
in pkgs.symlinkJoin {
-
inherit (super) name pname version meta;
-
paths = [ super ] ++ fontPackages;
-
};
-
-
compileSCSS = name: source:
-
"${
-
pkgs.runCommandLocal name { } ''
-
mkdir -p $out
-
${lib.getExe pkgs.sassc} -t expanded '${source}' > $out/${name}.css
-
''
-
}/${name}.css";
-
-
# TODO when using store paths to executables, they do not inherit the user's
-
# environment (at least with systemd) and therefore GUIs use the default theme
-
commands = let
-
slight = "${lib.getExe pkgs.slight}";
-
hyprctl = "${config.wayland.windowManager.hyprland.package}/bin/hyprctl";
-
# TODO this is duplicated from the hyprland config, make it a module
-
kbFns = lib.getExe config.utilities.osd-functions.package;
-
pavucontrol = lib.getExe pkgs.lxqt.pavucontrol-qt;
-
blueman-manager = "${pkgs.blueman}/bin/blueman-manager";
-
bluetoothctl = "${pkgs.bluez}/bin/bluetoothctl";
-
systemctl = "${pkgs.systemd}/bin/systemctl";
-
iwgtk = lib.getExe pkgs.iwgtk;
-
in {
-
backlightUp = "${slight} inc 5% -t 150ms";
-
backlightDown = "${slight} dec 5% -t 150ms";
-
# TODO --tab no longer works, what is the identifier to use?
-
outputSoundSettings = "${pavucontrol} --tab 'Output Devices'";
-
outputVolumeMute = "${kbFns} output mute";
-
outputVolumeUp = "${kbFns} output +0.05";
-
outputVolumeDown = "${kbFns} output -0.05";
-
# TODO --tab no longer works, what is the identifier to use?
-
inputSoundSettings = "${pavucontrol} --tab 'Input Devices'";
-
inputVolumeMute = "${kbFns} input mute";
-
# inputVolumeUp = "${kbFns} input +0.05";
-
# inputVolumeDown = "${kbFns} input -0.05";
-
bluetoothSettings = (pkgs.writeShellScript "waybar-bluetooth-settings" ''
-
set -eux
-
export PATH="${
-
lib.makeBinPath
-
(with pkgs; [ coreutils gawk util-linux bluez nettools blueman ])
-
}:$PATH"
-
is_powered_on="$(
-
bluetoothctl show | \
-
awk '/Name: '"$(hostname)"'$/{p=1} p && /Powered: yes/{print "true"; exit} END{if(!NR || !p) print "false"}'
-
)"
-
if [[ $is_powered_on == 'true' ]]; then
-
blueman-manager
-
else
-
rfkill unblock bluetooth && sleep 1 || true
-
bluetoothctl power on
-
sleep 0.5
-
blueman-manager
-
fi
-
'').outPath;
-
bluetoothToggle = (pkgs.writeShellScript "waybar-bluetooth-toggle" ''
-
set -eux
-
export PATH="${
-
lib.makeBinPath
-
(with pkgs; [ coreutils gawk util-linux bluez nettools ])
-
}:$PATH"
-
is_powered_on="$(
-
bluetoothctl show | \
-
awk '/Name: '"$(hostname)"'$/{p=1} p && /Powered: yes/{print "true"; exit} END{if(!NR || !p) print "false"}'
-
)"
-
if [[ $is_powered_on == 'true' ]]; then
-
bluetoothctl power off
-
else
-
rfkill unblock bluetooth && sleep 1 || true
-
bluetoothctl power on
-
fi
-
'').outPath;
-
bluetoothKill =
-
"rfkill block bluetooth && ${systemctl} restart bluetooth.service";
-
bluetoothOff = "${bluetoothctl} power off";
-
wirelessSettings = iwgtk;
-
workspaceSwitchPrev = "${hyprctl} dispatch workspace m-1";
-
workspaceSwitchNext = "${hyprctl} dispatch workspace m+1";
-
};
-
in {
-
programs.waybar.enable = true;
-
programs.waybar.package = package';
-
-
programs.waybar.systemd.enable = true;
-
-
programs.waybar.style =
-
builtins.readFile (compileSCSS "waybar-style" ./waybar.scss);
-
-
programs.waybar.settings = {
-
mainBar = {
-
layer = "top";
-
position = "top";
-
# Causes tooltips to be shown behind windows.
-
# mode = "dock";
-
height = 26;
-
-
modules-left = [ # #
-
"clock#time"
-
"clock#date"
-
# "wlr/workspaces"
-
"tray"
-
"mpris"
-
];
-
-
modules-center = [ # #
-
"hyprland/workspaces"
-
];
-
-
modules-right = [
-
"hyprland/submap"
-
"pulseaudio#output"
-
"pulseaudio#input"
-
"backlight"
-
"memory"
-
"cpu"
-
"temperature"
-
"battery"
-
"network"
-
"bluetooth"
-
"idle_inhibitor"
-
];
-
-
## MODULES-LEFT ##
-
-
# Hyprland dropped support unfortunately.
-
-
# "wlr/workspaces" = {
-
# sort-by-number = true;
-
-
# on-click = "activate";
-
# on-scroll-up = commands.workspaceSwitchPrev;
-
# on-scroll-down = commands.workspaceSwitchNext;
-
# };
-
-
"hyprland/workspaces" = {
-
format = "{name}";
-
# sort-by-number = true;
-
-
# on-click = "activate";
-
on-scroll-up = commands.workspaceSwitchPrev;
-
on-scroll-down = commands.workspaceSwitchNext;
-
};
-
-
tray = {
-
show-passive-items = true;
-
icon-size = 12;
-
spacing = 16;
-
};
-
-
mpris = {
-
player = "playerctld";
-
interval = 1;
-
-
format = "{status_icon} {dynamic}";
-
dynamic-len = 70;
-
dynamic-separator = " — ";
-
dynamic-order = [ "title" "artist" "position" "length" ];
-
dynamic-importance = [ "position" "title" "artist" ];
-
status-icons = {
-
playing = "󰐊";
-
paused = "󰏤";
-
stopped = "󰓛";
-
};
-
-
tooltip-format = lib.trim ''
-
<b>Player:</b> {player} ({status})
-
<b>Title:</b> {title}
-
<b>Artist:</b> {artist}
-
<b>Album:</b> {album}
-
<b>Length:</b> {position}/{length}
-
'';
-
};
-
-
"hyprland/submap" = {
-
format = "󰘳 {}";
-
tooltip = false;
-
};
-
-
"hyprland/window" = { max-length = 50; };
-
-
## MODULES-CENTER ##
-
-
"clock#time" = { format = "{:%I:%M %p}"; };
-
-
"clock#date" = { format = "{:%A, %B %d}"; };
-
-
## MODULES-RIGHT ##
-
-
"pulseaudio#output" = {
-
format = "{icon} {volume}%";
-
format-muted = "󰖁 {volume}%";
-
format-icons = {
-
headphone = "󰋋";
-
# speaker = "󰓃";
-
hdmi = "󰽟";
-
headset = "󰋎";
-
# hands-free = "󰋎";
-
# portable = "";
-
# car = "󰄋";
-
# hifi = "󰓃";
-
# phone = "󰏲";
-
default = [ "󰕿" "󰖀" "󰕾" ];
-
};
-
-
# anything below 100% is "safe" volume levels,
-
# the default style will be used,
-
# anything higher than this will have no CSS class,
-
# that will be considered "warning" state
-
# `#pulseaudio.output:not(.safe)`
-
states = { safe = 100; };
-
-
ignored-sinks = [ "Easy Effects Sink" ];
-
-
on-click = commands.outputSoundSettings;
-
on-click-right = commands.outputVolumeMute;
-
on-scroll-up = commands.outputVolumeUp;
-
on-scroll-down = commands.outputVolumeDown;
-
};
-
-
# TODO volume
-
"pulseaudio#input" = {
-
format = "{format_source}";
-
# format-source = "󰍬 {volume}%";
-
# format-source-muted = "󰍭 {volume}%";
-
format-source = "󰍬";
-
format-source-muted = "󰍭";
-
-
on-click = commands.inputSoundSettings;
-
on-click-right = commands.inputVolumeMute;
-
# on-scroll-up = commands.inputVolumeUp;
-
# on-scroll-down = commands.inputVolumeDown;
-
};
-
-
backlight = {
-
device = "amdgpu_bl0";
-
format = "{icon} {percent}%";
-
# format-icons = ["󰃜" "󰃛" "󰃝" "󰃟" "󰃠"];
-
format-icons = [ "󱩎" "󱩏" "󱩐" "󱩑" "󱩒" "󱩓" "󱩔" "󱩕" "󱩖" "󰛨" ];
-
-
on-scroll-up = commands.backlightUp;
-
on-scroll-down = commands.backlightDown;
-
};
-
-
memory = {
-
interval = 10;
-
format = "󰆼 {used:.2g}/{total:.2g}GiB";
-
};
-
-
cpu = {
-
interval = 5;
-
format = "󰘚 {usage}%";
-
};
-
-
temperature = {
-
interval = 5;
-
hwmon-path-abs = "/sys/devices/pci0000:00/0000:00:18.3/hwmon";
-
input-filename = "temp1_input";
-
critical-threshold =
-
90; # 15C lower than Tjmax <https://www.amd.com/en/product/9686>
-
format = "{icon} {temperatureC}°C";
-
format-critical = "󰈸 {temperatureC}°C";
-
# 4x low, 2x mid, 3x high, for 0-90
-
format-icons = [ "󱃃" "󱃃" "󱃃" "󱃃" "󰔏" "󰔏" "󱃂" "󱃂" "󱃂" ];
-
};
-
-
network = let
-
tooltip = ''
-
<b>Address:</b> {ipaddr}
-
<b>Netmask:</b> {netmask}
-
<b>Gateway:</b> {gwaddr}
-
<b>Speeds:</b> {bandwidthUpBytes} UL, {bandwidthDownBytes} DL
-
'';
-
in {
-
format-ethernet = "󰈀 {bandwidthDownBytes}";
-
format-wifi = "{icon} {bandwidthDownBytes}";
-
format-linked = "󱫱 {bandwidthDownBytes}";
-
format-disconnected = "󰲛";
-
format-icons = [ "󰤟" "󰤢" "󰤥" "󰤨" ];
-
-
tooltip-format = lib.trim ''
-
<b>Interface</b>: {ifname}
-
${tooltip}
-
'';
-
tooltip-format-wifi = lib.trim ''
-
<b>SSID:</b> {essid}
-
<b>Strength:</b> {signaldBm} dBmW ({signalStrength}%)
-
<b>Frequency:</b> {frequency} GHz
-
${tooltip}
-
'';
-
tooltip-format-disconnected = "Network disconnected.";
-
-
on-click = commands.wirelessSettings;
-
};
-
-
bluetooth = {
-
controller = "C0:3C:59:02:25:C3";
-
format-on = "󰂯";
-
format-off = "󰂲";
-
format-disabled = "󰂲";
-
format-connected = "󰂱 {num_connections}";
-
format-connected-battery =
-
"󰂱 {device_alias} ({device_battery_percentage}%) ({num_connections})";
-
-
on-click = commands.bluetoothSettings;
-
on-click-middle = commands.bluetoothKill;
-
on-click-right = commands.bluetoothToggle;
-
};
-
-
battery = {
-
interval = 5;
-
bat = "BAT0";
-
# full-at = 94;
-
format = "{icon} {capacity}%";
-
format-icons = [ "󰁺" "󰁻" "󰁼" "󰁽" "󰁾" "󰁿" "󰂀" "󰂁" "󰂂" "󰁹" ];
-
states = {
-
battery-10 = 10;
-
battery-20 = 20;
-
battery-30 = 30;
-
battery-40 = 40;
-
battery-50 = 50;
-
battery-60 = 60;
-
battery-70 = 70;
-
battery-80 = 80;
-
battery-90 = 90;
-
battery-100 = 100;
-
};
-
# <https://github.com/Alexays/Waybar/issues/1938>
-
# the wiki lies about this, does not match
-
# /sys/class/power_supply/BAT0/status
-
format-plugged = "󰚥 AC";
-
format-charging-battery-10 = "󰢜 {capacity}%";
-
format-charging-battery-20 = "󰂆 {capacity}%";
-
format-charging-battery-30 = "󰂇 {capacity}%";
-
format-charging-battery-40 = "󰂈 {capacity}%";
-
format-charging-battery-50 = "󰢝 {capacity}%";
-
format-charging-battery-60 = "󰂉 {capacity}%";
-
format-charging-battery-70 = "󰢞 {capacity}%";
-
format-charging-battery-80 = "󰂊 {capacity}%";
-
format-charging-battery-90 = "󰂋 {capacity}%";
-
format-charging-battery-100 = "󰂅 {capacity}%";
-
};
-
-
idle_inhibitor = {
-
format = "{icon}";
-
format-icons = {
-
activated = "󰈈";
-
deactivated = "󱎫";
-
};
-
tooltip-format-activated =
-
"Idle timer inhibited, device will not sleep.";
-
tooltip-format-deactivated =
-
"Idle timer enabled, device will sleep when not in use.";
-
};
-
};
-
};
-
-
imports = [
-
(lib.mkIf config.programs.waybar.systemd.enable {
-
xdg.configFile."waybar/config".onChange = lib.mkOverride 90 ''
-
if [ -z "''${_reloaded_waybar-}" ]; then
-
_reloaded_waybar=1
-
${pkgs.systemd}/bin/systemctl --user restart waybar.service
-
fi
-
'';
-
xdg.configFile."waybar/style.css".onChange = lib.mkOverride 90 ''
-
if [ -z "''${_reloaded_waybar-}" ]; then
-
_reloaded_waybar=1
-
${pkgs.systemd}/bin/systemctl --user restart waybar.service
-
fi
-
'';
-
})
-
];
-
}
-236
home-manager/hyprland/waybar.scss
···
-
$default-foreground: #ebdbb2;
-
$highlight-foreground: #fbf1c7;
-
-
* {
-
all: unset;
-
font-family: Ubuntu, "Material Design Icons";
-
font-size: 10.5pt;
-
color: $default-foreground;
-
}
-
-
@mixin oscillate-highlight($function, $stop, $background, $duration) {
-
$name: inline-#{unique-id()};
-
-
@keyframes #{$name} {
-
#{$stop} {
-
background: $background;
-
color: $highlight-foreground;
-
}
-
}
-
-
animation-name: $name;
-
animation-duration: $duration;
-
animation-iteration-count: infinite;
-
animation-timing-function: $function;
-
}
-
-
@mixin breathe-highlight($background, $duration) {
-
@include oscillate-highlight(ease-in-out, 50%, $background, $duration);
-
}
-
-
@mixin pulse-highlight($stop, $background, $duration) {
-
@include oscillate-highlight(ease-out, $stop, $background, $duration);
-
}
-
-
@mixin indicate-active($color, $selector) {
-
transition:
-
box-shadow 300ms ease-in,
-
background 300ms ease-in;
-
-
#{$selector} {
-
transition:
-
box-shadow 600ms ease-out,
-
background 600ms ease-out;
-
box-shadow: 0 2px 0 0 $color inset;
-
background: #3c3836;
-
}
-
}
-
-
@mixin indicate-hover($color) {
-
transition:
-
background 120ms ease-in;
-
-
&:hover {
-
transition:
-
background 120ms ease-out;
-
background: $color;
-
}
-
}
-
-
#clock,
-
#submap,
-
#backlight,
-
#network,
-
#bluetooth,
-
#cpu,
-
#temperature,
-
#pulseaudio,
-
#memory,
-
#battery,
-
#idle_inhibitor,
-
#tray,
-
#mpris,
-
#window {
-
padding-left: 8px;
-
padding-right: 8px;
-
}
-
-
window#waybar {
-
// background: #1d2021;
-
background: #000000;
-
// border-bottom: 1px solid #3c3836;
-
}
-
-
tooltip,
-
window.popup {
-
background: #282828;
-
border: 1px solid #665c54;
-
// border-radius: 3px;
-
}
-
-
window.popup {
-
menu {
-
padding: 5px 0;
-
-
arrow {
-
min-width: 16px;
-
min-height: 16px;
-
-
&.top {
-
-gtk-icon-source: -gtk-icontheme("pan-up-symbolic");
-
}
-
-
&.bottom {
-
-gtk-icon-source: -gtk-icontheme("pan-down-symbolic");
-
}
-
-
&.right {
-
-gtk-icon-source: -gtk-icontheme("pan-end-symbolic");
-
}
-
-
&.left {
-
-gtk-icon-source: -gtk-icontheme("pan-start-symbolic");
-
}
-
}
-
-
menuitem {
-
padding: 4px 8px;
-
-
transition:
-
color 66ms ease-in,
-
background 66ms ease-in;
-
-
&:hover {
-
transition:
-
color 100ms ease-out,
-
background 100ms ease-out;
-
-
color: $highlight-foreground;
-
background: #689d6a;
-
}
-
}
-
-
separator {
-
min-height: 1px;
-
background: #665c54;
-
margin: 4px 0;
-
}
-
}
-
}
-
-
#clock.time {
-
font-weight: bold;
-
}
-
-
#tray {
-
&>* {
-
@include indicate-hover(#282828);
-
}
-
}
-
-
#mpris {
-
@include indicate-hover(#282828);
-
}
-
-
#submap {
-
@include indicate-active(#d3869b, "&");
-
}
-
-
#workspaces {
-
button {
-
min-width: 26px;
-
padding: 6px;
-
-
@include indicate-hover(#282828);
-
@include indicate-active(#f38019, "&.active");
-
-
&.urgent {
-
animation-delay: 5s;
-
@include pulse-highlight(10%, #458588, 1.5s);
-
}
-
}
-
}
-
-
#network {
-
@include indicate-hover(#282828);
-
@include indicate-active(#689d6a, "&.wifi");
-
@include indicate-active(#458588, "&.ethernet");
-
@include indicate-active(#b16286, "&.linked");
-
}
-
-
#bluetooth {
-
@include indicate-hover(#282828);
-
@include indicate-active(#458588, "&.on");
-
@include indicate-active(#98971a, "&.connected");
-
-
&.on {
-
@include breathe-highlight(#458588, 5s);
-
}
-
-
// &.discoverable {
-
// @include breathe-highlight(#b16286, 5s);
-
// }
-
-
// &.discovering {
-
// @include breathe-highlight(#b16286, 5s);
-
// }
-
-
// &.pairable:not(.connected) {
-
// @include breathe-highlight(#b16286, 5s);
-
// }
-
}
-
-
#battery {
-
&.battery-30:not(.charging) {
-
@include breathe-highlight(#d64d0e, 10s);
-
}
-
-
&.battery-20:not(.charging) {
-
@include pulse-highlight(10%, #d64d0e, 5s);
-
}
-
-
&.battery-10:not(.charging) {
-
@include pulse-highlight(30%, #cc241d, 750ms);
-
}
-
}
-
-
#temperature.critical {
-
@include pulse-highlight(30%, #cc241d, 750ms);
-
}
-
-
#idle_inhibitor {
-
@include indicate-hover(#282828);
-
@include indicate-active(#d79921, "&.activated");
-
-
&.activated {
-
@include pulse-highlight(10%, #d79921, 5s);
-
}
-
}
-
-
#pulseaudio {
-
@include indicate-hover(#282828);
-
-
&.output:not(.safe) {
-
@include breathe-highlight(#cc241d, 10s);
-
}
-
}
+126
home-manager/neovim.nix
···
+
{ config, lib, pkgs, ... }:
+
+
{
+
programs.neovim = {
+
enable = true;
+
extraPackages = with pkgs; [
+
# LazyVim
+
lua-language-server
+
gopls
+
stylua
+
# Telescope
+
ripgrep
+
];
+
+
plugins = with pkgs.vimPlugins; [
+
lazy-nvim
+
];
+
+
defaultEditor = true;
+
viAlias = true;
+
vimAlias = true;
+
+
extraLuaConfig =
+
let
+
plugins = with pkgs.vimPlugins; [
+
# LazyVim
+
LazyVim
+
bufferline-nvim
+
cmp-buffer
+
cmp-nvim-lsp
+
cmp-path
+
cmp_luasnip
+
conform-nvim
+
dashboard-nvim
+
dressing-nvim
+
flash-nvim
+
friendly-snippets
+
gitsigns-nvim
+
indent-blankline-nvim
+
lualine-nvim
+
neo-tree-nvim
+
neoconf-nvim
+
neodev-nvim
+
noice-nvim
+
nui-nvim
+
nvim-cmp
+
nvim-lint
+
nvim-lspconfig
+
nvim-notify
+
nvim-spectre
+
nvim-treesitter
+
nvim-treesitter-context
+
nvim-treesitter-textobjects
+
nvim-ts-autotag
+
nvim-ts-context-commentstring
+
nvim-web-devicons
+
persistence-nvim
+
plenary-nvim
+
telescope-fzf-native-nvim
+
telescope-nvim
+
todo-comments-nvim
+
tokyonight-nvim
+
trouble-nvim
+
vim-illuminate
+
vim-startuptime
+
which-key-nvim
+
{ name = "LuaSnip"; path = luasnip; }
+
{ name = "catppuccin"; path = catppuccin-nvim; }
+
{ name = "mini.ai"; path = mini-nvim; }
+
{ name = "mini.bufremove"; path = mini-nvim; }
+
{ name = "mini.comment"; path = mini-nvim; }
+
{ name = "mini.indentscope"; path = mini-nvim; }
+
{ name = "mini.pairs"; path = mini-nvim; }
+
{ name = "mini.surround"; path = mini-nvim; }
+
];
+
mkEntryFromDrv = drv:
+
if lib.isDerivation drv then
+
{ name = "${lib.getName drv}"; path = drv; }
+
else
+
drv;
+
lazyPath = pkgs.linkFarm "lazy-plugins" (builtins.map mkEntryFromDrv plugins);
+
in
+
''
+
require("lazy").setup({
+
defaults = {
+
lazy = true,
+
},
+
dev = {
+
-- reuse files from pkgs.vimPlugins.*
+
path = "${lazyPath}",
+
patterns = { "." },
+
-- fallback to download
+
fallback = true,
+
},
+
spec = {
+
{ "LazyVim/LazyVim", import = "lazyvim.plugins" },
+
-- The following configs are needed for fixing lazyvim on nix
+
-- force enable telescope-fzf-native.nvim
+
{ "nvim-telescope/telescope-fzf-native.nvim", enabled = true },
+
-- disable mason.nvim, use programs.neovim.extraPackages
+
{ "williamboman/mason-lspconfig.nvim", enabled = false },
+
{ "williamboman/mason.nvim", enabled = false },
+
-- import/override with your plugins
+
{ import = "plugins" },
+
-- treesitter handled by xdg.configFile."nvim/parser", put this line at the end of spec to clear ensure_installed
+
{ "nvim-treesitter/nvim-treesitter", opts = { ensure_installed = {} } },
+
},
+
})
+
'';
+
};
+
+
# https://github.com/nvim-treesitter/nvim-treesitter#i-get-query-error-invalid-node-type-at-position
+
xdg.configFile."nvim/parser".source =
+
let
+
parsers = pkgs.symlinkJoin {
+
name = "treesitter-parsers";
+
paths = (pkgs.vimPlugins.nvim-treesitter.withPlugins (plugins: with plugins; [
+
c
+
lua
+
])).dependencies;
+
};
+
in
+
"${parsers}/parser";
+
+
# Normal LazyVim config here, see https://github.com/LazyVim/starter/tree/main/lua
+
}
+17 -3
home-manager/waybar.nix
···
modules-right = [
# "custom/gammastep" TODO: currently broken for some reason
"network"
+
"bluetooth"
"tray"
"privacy"
"custom/webcam"
···
window-rewrite = {
"title<.*github.*>" = "󰊤";
"title<.*youtube.*>" = "";
-
"title<\*Gmail*>" = "󰊫";
+
"title<*Gmail*>" = "󰊫";
"class<firefox>" = "";
+
"class<com.obsproject.Studio>" = "";
+
"title<OBS*>" = "";
"alacritty" = "";
"code" = "󰨞";
"slack" = "󰒱";
"initialtitle<Spotify*>" = "󰓇";
"class<org.gnome.Nautilus>" = "󰉓";
+
"class<kicad>" = "";
};
};
network = {
interval = 3;
-
format-wifi = " {essid}";
+
format-wifi = "{icon} {essid}";
+
format-icons = [ "󰤟" "󰤢" "󰤥" "󰤨" ];
format-ethernet = "󰈁 Connected";
format-disconnected = "󱐤 ";
tooltip-format = ''
···
deps = [pkgs.wpa_supplicant pkgs.notify-desktop];
script = ''wpa_cli reconnect; notify-desktop "reconnecting to wifi" -t 1200'';
};
+
};
+
+
bluetooth = {
+
format-on = "󰂯";
+
format-off = "󰂲";
+
format-disabled = "󰂲";
+
format-connected = "󰂱 {num_connections}";
+
format-connected-battery = "󰂱 {device_alias} ({device_battery_percentage}%) ({num_connections})";
+
on-click = "overskride";
};
"custom/menu" = {
···
}
'';
};
-
}
+
}
+67 -12
moonlark/configuration.nix
···
lib,
config,
pkgs,
+
pkgs-unstable,
...
}: {
# You can import other NixOS modules here
···
# ./hyprland
./pam.nix
+
+
# tuigreet
+
./greetd.nix
];
nixpkgs = {
···
environment.systemPackages = map lib.lowPrio [
pkgs.curl
+
pkgs.wget
+
pkgs.dogdns
inputs.agenix.packages.x86_64-linux.default
pkgs.wpa_supplicant_gui
+
pkgs.overskride
pkgs.alacritty
pkgs.zsh
pkgs.starship
+
pkgs.gh
pkgs.swww
pkgs.sunwait
pkgs.sunpaper
···
pkgs.brightnessctl
inputs.hyprland-contrib.packages.${pkgs.system}.grimblast
pkgs.mako
+
pkgs.hyprpicker
pkgs.notify-desktop
pkgs.bc
pkgs.wl-clipboard
···
pkgs.firefox
pkgs.slack
pkgs.gnome.nautilus
+
pkgs.gnome.totem
+
pkgs.loupe
+
pkgs.gnome.simple-scan
pkgs.gnome.file-roller
pkgs.polkit_gnome
pkgs.fprintd
pkgs.gitMinimal
-
(pkgs.vscode-with-extensions.override {
-
vscodeExtensions = with pkgs.vscode-extensions; [
-
bbenoist.nix
-
];
-
})
pkgs.github-desktop
pkgs.udiskie
pkgs.neofetch
pkgs.cava
+
pkgs.go
+
pkgs.unstable.bun
+
pkgs.pitivi
+
pkgs.unstable.arduino-ide
+
pkgs.unstable.arduino-cli
+
pkgs.lazygit
+
pkgs.vhs
+
pkgs.lightworks
+
pkgs.ffmpeg
+
pkgs.ngrok
+
pkgs.openssl
+
pkgs.unstable.nodePackages_latest.prisma
+
pkgs.nodejs_22
+
pkgs.invoice
+
pkgs.pop
+
pkgs.gum
+
pkgs.unstable.netlify-cli
+
pkgs.unstable.kicad
];
services.gnome.gnome-keyring.enable = true;
···
fira
];
+
# import the secret
+
age.identityPaths = [ "/home/kierank/.ssh/id_rsa" "/etc/ssh/id_rsa" "/mnt/etc/ssh/id_rsa" ];
+
age.secrets = {
+
wifi = {
+
file = ../secrets/wifi.age;
+
owner = "kierank";
+
};
+
resend = {
+
file = ../secrets/resend.age;
+
owner = "kierank";
+
};
+
};
+
environment.sessionVariables = {
XDG_CACHE_HOME = "$HOME/.cache";
XDG_CONFIG_HOME = "$HOME/.config";
···
SUNPAPERDIR = "${lib.getExe pkgs.sunpaper}";
XDG_STATE_HOME = "$HOME/.local/state";
NIXOS_OZONE_WL = "1";
-
};
-
-
# import the secret
-
age.identityPaths = [ "/home/kierank/.ssh/id_rsa" "/etc/ssh/id_rsa" "/mnt/etc/ssh/id_rsa" ];
-
age.secrets.wifi = {
-
file = ../secrets/wifi.age;
-
owner = "kierank";
+
PRISMA_QUERY_ENGINE_LIBRARY = "${pkgs.prisma-engines}/lib/libquery_engine.node";
+
PRISMA_QUERY_ENGINE_BINARY = "${pkgs.prisma-engines}/bin/query-engine";
+
PRISMA_SCHEMA_ENGINE_BINARY = "${pkgs.prisma-engines}/bin/schema-engine";
+
RESEND_API_KEY = ''$(${pkgs.coreutils}/bin/cat ${config.age.secrets.resend.path})'';
+
POP_FROM = "me@dunkirk.sh";
};
# setup the network
···
# enable cups
services.printing.enable = true;
+
services.avahi = {
+
enable = true;
+
nssmdns4 = true;
+
openFirewall = true;
+
};
+
# enable bluetooth
hardware.bluetooth.enable = true;
···
};
};
+
networking.firewall = {
+
enable = true;
+
allowedTCPPorts = [ 4455 ];
+
allowedUDPPorts = [ 4455 ];
+
};
+
+
services.devmon.enable = true;
services.gvfs.enable = true;
services.udisks2.enable = true;
+
+
services.logind.extraConfig = ''
+
# don't shutdown when power button is short-pressed
+
HandlePowerKey=ignore
+
HandlePowerKeyLongPress=poweroff
+
'';
# Requires at least 5.16 for working wi-fi and bluetooth.
# https://community.frame.work/t/using-the-ax210-with-linux-on-the-framework-laptop/1844/89
+36
moonlark/greetd.nix
···
+
{ pkgs, ... }:
+
let
+
tuigreet = "${pkgs.greetd.tuigreet}/bin/tuigreet";
+
in
+
{
+
services.greetd = {
+
enable = true;
+
settings = {
+
default_session = {
+
command = "${tuigreet} --time -g 'WARNING: UNAUTHORIZED ACCESS WILL RESULT IN TERMINATION OF SESSION. IDENTIFY YOURSELF' --remember --cmd Hyprland";
+
user = "greeter";
+
};
+
};
+
};
+
+
# this is a life saver.
+
# literally no documentation about this anywhere.
+
# might be good to write about this...
+
# https://www.reddit.com/r/NixOS/comments/u0cdpi/tuigreet_with_xmonad_how/
+
systemd.services.greetd.serviceConfig = {
+
Type = "idle";
+
StandardInput = "tty";
+
StandardOutput = "tty";
+
StandardError = "journal"; # Without this errors will spam on screen
+
# Without these bootlogs will spam on screen
+
TTYReset = true;
+
TTYVHangup = true;
+
TTYVTDisallocate = true;
+
};
+
+
#environment.etc."greetd/environments".text = ''
+
# Hyprland
+
# fish
+
# bash
+
#'';
+
}
+23
secrets/resend.age
···
+
age-encryption.org/v1
+
-> ssh-rsa DqcG0Q
+
QVtoU4x4NGS4wDmzRDa98V76GXXWiE1ArRyVxYood6/QbXP5ZakEh5m0RQX7zU+6
+
8CXZyA9ME24eMIyCGN7jvgYurUVH32grFbqO0SV6Ozsdd+8KZw3MeWp+08z9xJlU
+
ZkROo4yTViJO8XfigTdQlfkEJu8f/uwWPZyDG0vEr5aXteePffkEmgbP7IZ6uSwC
+
G3a5LoCOx2/lcZ2VA0trQpapFezTUotdLbMQ6+Eu+Rv1Eh9SjBNJZ2gN+CiHko/2
+
jSBsiOvJDJ7iMg9f2qS7A8NOD0VTHxFxG4WMoYJ6FjIdNX5Yghdz7vkcHZzAgZBy
+
jQ3F3kXZ+M0gDUT9eKFPP9q5qk3IK9HAUlnZElJS+J07KSOOgD34P7I6AT8mcmJ0
+
xXl7idqlX/NmmBlh8HbhdB+TX79IoKkm5G+Bi+YbRBvMAh9Xy5ig9uIUJKJcnpnR
+
cL0uDBoRsbyxdJpUF5NfXJj2EmERynnMpUuvh2ThNMcsQKeVNii5Mvk+HwngF72Q
+
+
-> ssh-rsa DqcG0Q
+
V/Qx/lo8OPBqrcx9FSLYN+5q+Gf/fouyGS4ksd+Ruag+v3LtUgzR+t8y6VNo3PD6
+
lM1DeMuDQmie70jP/rW7NcUS4SzJ1xWKina+Ix4uA8BM2W4aEZwn6qgWdOzkryhJ
+
8tB0MZuogcvyz5DHZYg2riKQkLnkD0oGbZIfeRM9cFz7UX2KjnGQl2fitnASk+Ub
+
hIaF0MPJo0uZrBhdGulHH5qx4v5vahK/M3vcgIY8NTAHG3/fU75kJ5mcQd4Kwesm
+
O1Q2rato95ddM98IngNQ7hgbeSL9Pr6cRM2BaNsQsI09RUjV/PN8LmAH0eHhWT1k
+
KIIjlAzRjOb4cN133zS63H6kkur2LdjHbBxmvt0XcCNc/sbOZdHnB6oQQa0cPuqc
+
Qi/j9nkinAiDxSuJfrsMZqZGbA7AQbCd7DtlJsZn18/nKusjCKuagiWXhcZFs64C
+
o7teM8YUrzb8vBjYkMMzs/BJoytzxoW7yxLkuAs28Wj8C0K3/dPSWesPiz9pUUHp
+
+
--- E9XQg8S6Hb5LUQciLQZWeIt8cAfJz2jR7L+Rh56hKmI
+
AO���=����9���l��-�g��z�a)��>�;�0n>{�rZt� ���~_RP���'[;4���n�* &L
+1
secrets/secrets.nix
···
in
{
"wifi.age".publicKeys = [ kierank moonlark ];
+
"resend.age".publicKeys = [ kierank moonlark ];
}