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

Compare changes

Choose any two refs to compare.

.github/images/github.png

This is a binary file and will not be displayed.

.github/images/nautilus.png

This is a binary file and will not be displayed.

.github/images/neofetch.png

This is a binary file and will not be displayed.

.github/images/spotify.png

This is a binary file and will not be displayed.

+12 -1
README.md
···
# Kieran's Dots
+
![spotify with cava next to it](.github/images/spotify.png)
+
> [!CAUTION]
> These dots are highly prone to change / breakage. I am not a nix os expert (this is my first time touching nix), so I'm not sure if this will work or not. I'm just trying to get my dots up on github. If you have any suggestions, please let me know.
···
14. Move the config to your local directory with `mkdir ~/etc; sudo mv /etc/nixos ~/etc`
15. Link the config back to `/etc/nixos` with `sudo ln -s ~/etc/nixos /etc`
16. Change the config permissions: `sudo chown -R $(id -un):users ~/etc/nixos`, `sudo chown kierank -R ~/etc/nixos`, and `sudo chown kierank -R ~/etc/nixos/.*`
+
17. Setup the fingerprint reader with `sudo fprintd-enroll -f right-index-finger kierank` and then verify it worked with `sudo fprintd-verify kierank` (you may need to swipe your finger across the fingerprint sensor instead of simply laying it there)
## Screenshots
+
<details>
+
<summary>I've stuck the rest of the screenshots in a spoiler to preserve space</summary>
-
🫡 Will report back!
+
![the github page of this repo](.github/images/github.png)
+
![nautilus file manager](.github/images/nautilus.png)
+
![neofetch](.github/images/neofetch.png)
+
</details>
## Credits
···
- [nerd fonts cheat sheet](https://www.nerdfonts.com/cheat-sheet)
- [setting the default shell in nix](https://www.reddit.com/r/NixOS/comments/z16mt8/cant_seem_to_set_default_shell_using_homemanager/)
- [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
];
};
};
+7 -6
home-manager/dots/hyprland.conf
···
exec-once = wluma
exec-once = waybar
exec-once = hypridle
+
exec-once = udiskie
exec-once=[workspace 8 silent] slack
exec-once=[workspace 9 silent] spotify
···
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
+165 -4
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
···
};
};
+
dconf.settings = {
+
"org/gnome/desktop/interface" = {
+
color-scheme = "prefer-dark";
+
};
+
};
+
+
xdg.portal = {
+
enable = true;
+
extraPortals = with pkgs; [ xdg-desktop-portal-gtk ];
+
configPackages = with pkgs; [ xdg-desktop-portal-gtk ];
+
};
+
+
gtk = {
+
enable = true;
+
catppuccin = {
+
enable = true;
+
tweaks = [ "normal" ];
+
};
+
};
+
+
+
qt = {
+
style.name = "kvantum";
+
platformTheme.name = "kvantum";
+
enable = true;
+
};
+
+
services.udiskie = {
+
enable = true;
+
settings = {
+
program_options = {
+
udisks_version = 2;
+
tray = false;
+
};
+
notifications = {
+
device_unmounted = false;
+
device_added = -1;
+
device_removed = -1;
+
device_mounted = -1;
+
};
+
};
+
};
+
# git config
programs.git = {
enable = true;
···
directory = {
truncation_length = 1;
truncation_symbol = "…/";
-
home_symbol = " ~";
+
home_symbol = " ~";
read_only_style = "197";
read_only = "  ";
format = "at [$path]($style)[$read_only]($read_only_style) ";
···
programs.zsh = {
enable = true;
enableCompletion = true;
-
#autosuggestion.enable = true;
syntaxHighlighting.enable = true;
shellAliases = {
···
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);
-
}
-
}
+6 -2
home-manager/hyprland.nix
···
listener = [
{
-
timeout = 10;
+
timeout = 30;
on-timeout = "kill $(pidof wluma); brightnessctl -s set 10";
on-resume = "brightnessctl -r; wluma &";
}
···
on-timeout = "loginctl lock-session";
}
{
-
timeout = 105;
+
timeout = 90;
on-timeout = "hyprctl dispatch dpms off";
on-resume = "hyprctl dispatch dpms on";
+
}
+
{
+
timeout = 150;
+
on-timeout = "systemctl suspend";
}
];
};
+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
+
}
+63 -21
home-manager/waybar.nix
···
modules-center = [
"cpu"
"memory"
+
"disk"
"clock"
"pulseaudio"
"battery"
+
"idle_inhibitor"
# "custom/unread-mail"
];
modules-right = [
# "custom/gammastep" TODO: currently broken for some reason
"network"
+
"bluetooth"
"tray"
"privacy"
"custom/webcam"
···
interval = 5;
};
+
disk = {
+
interval = 5;
+
unit = "GB";
+
format = "󰋊 {percentage_used}%";
+
};
+
pulseaudio = {
format = "{icon} {volume}%";
format-muted = " 0%";
···
idle_inhibitor = {
format = "{icon}";
format-icons = {
-
activated = "󰒳";
-
deactivated = "󰒲";
+
activated = "󰅶 ";
+
deactivated = "󰾫 ";
};
+
tooltip-format-activated =
+
"Caffinated! device will not sleep.";
+
tooltip-format-deactivated =
+
"no caffeine :( device will sleep when not in use.";
};
battery = {
-
interval = 10;
-
format-icons = [
-
"󰁺"
-
"󰁻"
-
"󰁼"
-
"󰁽"
-
"󰁾"
-
"󰁿"
-
"󰂀"
-
"󰂁"
-
"󰂂"
-
"󰁹"
-
];
+
interval = 5;
+
bat = "BAT1";
+
# full-at = 94;
format = "{icon} {capacity}%";
-
format-charging = "󰂄 {capacity}%";
-
onclick = "";
+
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}%";
};
"hyprland/workspaces" = {
···
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 = ''
···
};
};
+
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" = {
interval = 1;
return-type = "json";
···
awk '{print $2 " " $3}' |\
# filter out the program path
awk -F "/" '{print "{\"tooltip\": \"" $1 " " $NF "\"}"}' |\
-
jq -s 'if length > 0 then {text: "󰄀 ", tooltip: (map(.tooltip) | join("\r"))} else {text: "󱦿 ", tooltip: "No applications are using your webcam!"} end' |\
+
jq -s 'if length > 0 then {text: "󰄀 ", tooltip: (map(.tooltip) | join("\r"))} else {text: "", tooltip: ""} end' |\
jq --unbuffered --compact-output
'';
};
···
}
'';
};
-
}
+
}
+97 -15
moonlark/configuration.nix
···
lib,
config,
pkgs,
+
pkgs-unstable,
...
}: {
# You can import other NixOS modules here
···
# hpyrland config
# ./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.fprintd.enable = true;
-
security.pam.services.hyprlock = {};
+
services.gnome.gnome-keyring.enable = true;
+
programs.dconf.enable = true;
+
+
systemd = {
+
user.services.polkit-gnome-authentication-agent-1 = {
+
description = "polkit-gnome-authentication-agent-1";
+
wantedBy = [ "graphical-session.target" ];
+
wants = [ "graphical-session.target" ];
+
after = [ "graphical-session.target" ];
+
serviceConfig = {
+
Type = "simple";
+
ExecStart = "${pkgs.polkit_gnome}/libexec/polkit-gnome-authentication-agent-1";
+
Restart = "on-failure";
+
RestartSec = 1;
+
TimeoutStopSec = 10;
+
};
+
};
+
};
fonts.packages = with pkgs; [
nerdfonts
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
···
openssh.authorizedKeys.keys = [
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCzEEjvbL/ttqmYoDjxYQmDIq36BabROJoXgQKeh9liBxApwp+2PmgxROzTg42UrRc9pyrkq5kVfxG5hvkqCinhL1fMiowCSEs2L2/Cwi40g5ZU+QwdcwI8a4969kkI46PyB19RHkxg54OUORiIiso/WHGmqQsP+5wbV0+4riSnxwn/JXN4pmnE//stnyAyoiEZkPvBtwJjKb3Ni9n3eNLNs6gnaXrCtaygEZdebikr9kS2g9mM696HvIFgM6cdR/wZ7DcLbG3IdTXuHN7PC3xxL+Y4ek5iMreQIPmuvs4qslbthPGYoYbYLUQiRa9XO5s/ksIj5Z14f7anHE6cuTQVpvNWdGDOigyIVS5qU+4ZF7j+rifzOXVL48gmcAvw/uV68m5Wl/p0qsC/d8vI3GYwEsWG/EzpAlc07l8BU2LxWgN+d7uwBFaJV9VtmUDs5dcslsh8IbzmtC9gq3OLGjklxTfIl6qPiL8U33oc/UwqzvZUrI2BlbagvIZYy6rP+q0= kierank@mockingjay"
];
-
extraGroups = ["wheel" "networkmanager" "audio" "video" "docker" "plugdev"];
+
extraGroups = ["wheel" "networkmanager" "audio" "video" "docker" "plugdev" "input"];
};
root.openssh.authorizedKeys.keys = [
"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCzEEjvbL/ttqmYoDjxYQmDIq36BabROJoXgQKeh9liBxApwp+2PmgxROzTg42UrRc9pyrkq5kVfxG5hvkqCinhL1fMiowCSEs2L2/Cwi40g5ZU+QwdcwI8a4969kkI46PyB19RHkxg54OUORiIiso/WHGmqQsP+5wbV0+4riSnxwn/JXN4pmnE//stnyAyoiEZkPvBtwJjKb3Ni9n3eNLNs6gnaXrCtaygEZdebikr9kS2g9mM696HvIFgM6cdR/wZ7DcLbG3IdTXuHN7PC3xxL+Y4ek5iMreQIPmuvs4qslbthPGYoYbYLUQiRa9XO5s/ksIj5Z14f7anHE6cuTQVpvNWdGDOigyIVS5qU+4ZF7j+rifzOXVL48gmcAvw/uV68m5Wl/p0qsC/d8vI3GYwEsWG/EzpAlc07l8BU2LxWgN+d7uwBFaJV9VtmUDs5dcslsh8IbzmtC9gq3OLGjklxTfIl6qPiL8U33oc/UwqzvZUrI2BlbagvIZYy6rP+q0= kierank@mockingjay"
···
# 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
boot = {
···
efiSupport = true;
efiInstallAsRemovable = true;
};
+
supportedFilesystems = [ "ntfs" ];
};
# https://nixos.wiki/wiki/FAQ/When_do_I_update_stateVersion
+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
+
#'';
+
}
+68
moonlark/pam.nix
···
+
{
+
lib,
+
config,
+
pkgs,
+
...
+
}: {
+
services.fprintd.enable = true;
+
security.pam.services.hyprlock = lib.mkIf (config.services.fprintd.enable) {
+
text = ''
+
# Account management.
+
account required pam_unix.so # unix (order 10900)
+
+
# Authentication management.
+
auth sufficient pam_unix.so try_first_pass likeauth nullok
+
auth sufficient ${pkgs.fprintd}/lib/security/pam_fprintd.so
+
auth required pam_deny.so # deny
+
+
# Password management.
+
password sufficient pam_unix.so nullok yescrypt # unix
+
+
# Session management.
+
session required pam_env.so conffile=/etc/pam/environment readenv=0 # env (order 10100)
+
session required pam_unix.so # unix (order 10200)
+
'';
+
};
+
+
security.pam.services.sudo = lib.mkIf (config.services.fprintd.enable) {
+
text = ''
+
# Account management.
+
account required pam_unix.so # unix (order 10900)
+
+
# Authentication management.
+
auth sufficient pam_unix.so try_first_pass likeauth nullok
+
auth sufficient ${pkgs.fprintd}/lib/security/pam_fprintd.so
+
auth required pam_deny.so # deny
+
+
# Password management.
+
password sufficient pam_unix.so nullok yescrypt # unix
+
+
# Session management.
+
session required pam_env.so conffile=/etc/pam/environment readenv=0 # env (order 10100)
+
session required pam_unix.so # unix (order 10200)
+
'';
+
};
+
+
security.pam.services.su = lib.mkIf (config.services.fprintd.enable) {
+
text = ''
+
# Account management.
+
account required pam_unix.so # unix (order 10900)
+
+
# Authentication management.
+
auth sufficient pam_rootok.so # rootok (order 10200)
+
auth required pam_faillock.so # faillock (order 10400)
+
auth sufficient pam_unix.so try_first_pass likeauth nullok
+
auth sufficient ${pkgs.fprintd}/lib/security/pam_fprintd.so
+
auth required pam_deny.so # deny
+
+
# Password management.
+
password sufficient pam_unix.so nullok yescrypt # unix
+
+
# Session management.
+
session required pam_env.so conffile=/etc/pam/environment readenv=0 # env (order 10100)
+
session required pam_unix.so # unix (order 10200)
+
session required pam_unix.so # unix (order 10200)
+
session optional pam_xauth.so systemuser=99 xauthpath=${pkgs.xorg.xauth}/bin/xauth # xauth (order 12100)
+
'';
+
};
+
}
+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 ];
}