Compare commits
536 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d74fa4e552 | |||
| 92a3fef81b | |||
| d009ca3d3a | |||
| 6696db16ab | |||
| 1a48e22c9d | |||
| ac55b09c68 | |||
| 4592a9cda0 | |||
| 0e446fa4bd | |||
| dfbd9950d6 | |||
| cc9df9f425 | |||
| 8451c0e844 | |||
| 47de61c982 | |||
| d4be82176d | |||
| ca7968ae14 | |||
| 4412cd119d | |||
| 1db6f4dddd | |||
| d30bfc951e | |||
| 6694ed268a | |||
| eed6bfd51b | |||
| b6aa962496 | |||
| 98fb607238 | |||
| 9190eb6281 | |||
| c85cdcf54d | |||
| 68da7615ee | |||
| 95b71a562f | |||
| 62e5b210e4 | |||
| d28ef117fa | |||
| e96f291048 | |||
| d3b073fda4 | |||
| 1a3559b9c0 | |||
| d662e5dcc7 | |||
| 59340e4d6d | |||
| 34a0243c43 | |||
| 3dc1fa61e0 | |||
| 1fd59ceb04 | |||
| 66adb9d1d6 | |||
| 27c471addd | |||
| 3f5f2fbcd6 | |||
| 7d04d1d840 | |||
| f8cdd03c17 | |||
| 3b35cc12d3 | |||
| 08b78610f3 | |||
| 32cf771c69 | |||
| 16b7b342d1 | |||
| a78fdfcaeb | |||
| a5e9acad20 | |||
| c47e115020 | |||
| a92d654fe0 | |||
| 57333f3a73 | |||
| 32cd6760b6 | |||
| 999710d44c | |||
| 938c244704 | |||
| 6ab0623c55 | |||
| fa543b059f | |||
| 780afcbda6 | |||
| 9b3b09f6e5 | |||
| a234c2d573 | |||
| 602acee708 | |||
| cb9c91c7a7 | |||
| 4d9d68e7e6 | |||
| 3aad507ba8 | |||
| 1cd2b54e6a | |||
| 8372715482 | |||
| eb10aa526e | |||
| e8abbff15e | |||
| b9471c83ed | |||
| 46c08d95ec | |||
| f302399b70 | |||
| c9387525eb | |||
| c1a76f2b2b | |||
| ef68c8191e | |||
| 16a14f9863 | |||
| 10cb0370b6 | |||
| 5bf24e41fb | |||
| af2a4738a8 | |||
| 20e39113a9 | |||
| f5d81a5a43 | |||
| 39f692919b | |||
| fed7db4fbc | |||
| 9fa7d0c4f5 | |||
| d1a3e369e4 | |||
| ab9247bc45 | |||
| 4b1d5c5f02 | |||
| fe39db683a | |||
| 5fa73c0bad | |||
| 8231d88a5b | |||
| b9595f283a | |||
| 4cf1c3e74d | |||
| a97d65ac0e | |||
| 5e905af198 | |||
| f113b5d9b8 | |||
| 4ce7ab874f | |||
| 2049c94a1c | |||
| 2e14ccbe1a | |||
| 80190502ba | |||
| 6ca530741e | |||
| 3505aabbc7 | |||
| c124898b8c | |||
| e3bac0adc6 | |||
| af1ae030a4 | |||
| f0b48b9f61 | |||
| 8f6dc9796d | |||
| a9f2e86491 | |||
| 8ac3c21228 | |||
| cf2f942f0b | |||
| 0ac2ceba5c | |||
| b241a5c5f4 | |||
| 69154e639a | |||
| 6e8c747a5c | |||
| e753361e07 | |||
| d96148bf06 | |||
| 2d9f95e8e5 | |||
| c604816aa9 | |||
| cf28f0cede | |||
| 22fc29f8f1 | |||
| 51419d6171 | |||
| 37dde66dc4 | |||
| fa1baa128f | |||
| ad64748ad7 | |||
| 381c4876d9 | |||
| 06383737d7 | |||
| 069e53d66f | |||
| 00ea547c8d | |||
| aa7e045303 | |||
| f9ab7268d2 | |||
| 9e49f7f433 | |||
| 6621b7aa7b | |||
| bd5f8eec2b | |||
| 11b4f2410d | |||
| 4c0fe82453 | |||
| 830165aab8 | |||
| 93e5181cb6 | |||
| 7d5a24c7f8 | |||
| 882063c6c6 | |||
| 7fe00a1375 | |||
| 6d0963827b | |||
| 74bef0c5cd | |||
| 684ee6f23d | |||
| 3135e1cec4 | |||
| be4b66fdd2 | |||
| 8b66ff719b | |||
| edfa915586 | |||
| 3980c8ae88 | |||
| 348d2b46e6 | |||
| a4f41a0371 | |||
| 7cd5b88c45 | |||
| bf3e18d17c | |||
| 7af0cfd06d | |||
| 6628c4d589 | |||
| 260ca708a8 | |||
| ef7c3d23a3 | |||
| c2cb932c66 | |||
| 21b805741f | |||
| 44fa744312 | |||
| 445f70a5ec | |||
| eb9d3f2d16 | |||
| 66f6ae06d7 | |||
| 08868fc241 | |||
| 811011d6d6 | |||
| 7df49ad646 | |||
| 2caa21482f | |||
| 573231b99a | |||
| 04190ab15c | |||
| 63832528f2 | |||
| 18a687f114 | |||
| e0edcb77e1 | |||
| 9795d54dd4 | |||
| fd28c24d7a | |||
| e05f9d387e | |||
| 0ad80cf7a1 | |||
| c4639d88c5 | |||
| e4e90059e3 | |||
| 07879586b4 | |||
| 2d3ec51eb1 | |||
| 88eaa7a242 | |||
| 5faef18601 | |||
| c9d7932bda | |||
| 7ebc2f366b | |||
| 69b3d42f9a | |||
| 587266c904 | |||
| ded05e23fc | |||
| 07d33b60dc | |||
| cd647e7d7b | |||
| facce75d9f | |||
| ab6eb6db5b | |||
| a036da9b76 | |||
| b796260c7e | |||
| 4a23455792 | |||
| bbe6ef38b7 | |||
| 3b7ed586c6 | |||
| f9c11e0dc0 | |||
| 5e093d351b | |||
| 2c88a52d5a | |||
| b55c662a1b | |||
| 73b5b2c9f6 | |||
| f155563ca0 | |||
| 9b615f3825 | |||
| 56a829cdb3 | |||
| d7c275f6e9 | |||
| 420d4f173c | |||
| ec424cd6d8 | |||
| fc765ee94f | |||
| b86646816b | |||
| 12dbe7536f | |||
| 1bbac664e7 | |||
| e5a5189158 | |||
| fa0e502472 | |||
| 562d1f30e4 | |||
| b86499aec5 | |||
| 1fdfb9f62a | |||
| 2b6a99b191 | |||
| 454673329f | |||
| a4e661d6ad | |||
| dc38c2d88a | |||
| c267da0953 | |||
| c5e76b1a44 | |||
| 335d41cf19 | |||
| 4360edef9e | |||
| fde813460a | |||
| 7a6e450c8f | |||
| 59656b7dc8 | |||
| f18f33c9c3 | |||
| 10c6f094f6 | |||
| a6fdaf9a27 | |||
| 1b8e5032f9 | |||
| aaef1dccb2 | |||
| 21a61f528b | |||
| 7ab78044b7 | |||
| 28e9c06ea8 | |||
| 960ac31702 | |||
| f6b1976809 | |||
| f6156cad67 | |||
| 88b4ff68a6 | |||
| a4e2cf06e9 | |||
| 67fa3f06ed | |||
| 20930ea6c2 | |||
| deb4749489 | |||
| 96b228aadc | |||
| 2dc8180d1b | |||
| dd1213c5b7 | |||
| 47bd23b3dd | |||
| 25bba64185 | |||
| ffdb003aa2 | |||
| d3c0b74ab5 | |||
| c9b98978fa | |||
| 7cec25fdb9 | |||
| 446cfea7dd | |||
| 3fd62d4525 | |||
| 69253992df | |||
| 35845cac3a | |||
| 33c6170c15 | |||
| dd36c2711a | |||
| e9c69c2cc1 | |||
| 30fbcec7f5 | |||
| c0f21fa798 | |||
| cb61d6ad3d | |||
| 7588100a62 | |||
| 5ce6b68252 | |||
| 5a6cdb3171 | |||
| dcf30faa51 | |||
| 3096697e35 | |||
| cdce0628ab | |||
| 1c82b5eafe | |||
| 216011d9f6 | |||
| 73a837925b | |||
| 47258d9e4d | |||
| 8ae075d84c | |||
| 6e4fe781ab | |||
| dfbdf1cd87 | |||
| f947721819 | |||
| c3fdb180ff | |||
| e1b503b43b | |||
| a46fa6344d | |||
| 2ab60c6047 | |||
| 2a3c6ae6a9 | |||
| 0181c007fe | |||
| 83cdb81173 | |||
| 2580cf8aa5 | |||
| de8e083e92 | |||
| 49460feb44 | |||
| 4768918d0d | |||
| a534ad610f | |||
| 4015222d6a | |||
| b23774d0a2 | |||
| 58c1860ecf | |||
| 302c5e11b2 | |||
| 757d9e523d | |||
| 673d824c26 | |||
| 8355d35aaf | |||
| 1601f4b622 | |||
| ee5165b068 | |||
| 76138fc342 | |||
| 2f1b33d070 | |||
| bde12c7a04 | |||
| 658d489fd5 | |||
| 95f95e208d | |||
| b5eb134f69 | |||
| 6264269817 | |||
| 8151c56cc4 | |||
| 3a75206afb | |||
| b5a542a37c | |||
| bd2465d356 | |||
| e5bc8801a4 | |||
| c97a5887df | |||
| ec55ac55b2 | |||
| 65f04a69ae | |||
| ad40c37d1e | |||
| 4f3fe9be8b | |||
| 6f3c0e8f6c | |||
| 481fb8c6c4 | |||
| 94f5d8ba01 | |||
| ea18baa039 | |||
| 1653fe3eb2 | |||
| 162321eb28 | |||
| d947870a55 | |||
| 6550d6e871 | |||
| 352f2d923b | |||
| e10deb6ae5 | |||
| 90123ac18d | |||
| 1bd3096d53 | |||
| ca68b1de73 | |||
| f8386beb6c | |||
| b9f125e76a | |||
| 3717ecc642 | |||
| 377cd79704 | |||
| fea33ada52 | |||
| a4cf2833bc | |||
| 8491971427 | |||
| b4f4b67a8b | |||
| f59110c87e | |||
| 3dd4f2783e | |||
| d8657c7eeb | |||
| 3c4ed456cf | |||
| 551302a00e | |||
| 9aaffe2677 | |||
| 11cee2638a | |||
| e35dc3d28e | |||
| b686cf7751 | |||
| 7fd7cfac70 | |||
| 2023828364 | |||
| 2d8ba9f7ea | |||
| bc70242a99 | |||
| 0eabcc4fc1 | |||
| 1e301b958e | |||
| 4a4f66c08e | |||
| e33dbea82e | |||
| 50813851cb | |||
| b3c502fdf3 | |||
| 3587a7042d | |||
| cfc2f01e57 | |||
| ebef97f84b | |||
| 3740928c70 | |||
| 435742f29c | |||
| 0ebe999f92 | |||
| 005c744cb6 | |||
| a2b4b0d8ea | |||
| e8c6cb073f | |||
| 17b01cbf1c | |||
| 6d5cd6d78e | |||
| c48d1543a4 | |||
| ac41162a6e | |||
| 74f26f5997 | |||
| 0a1acae08a | |||
| 54f2f1e8f9 | |||
| a25d41100a | |||
| 381830a767 | |||
| d1c11014de | |||
| b41a820dcc | |||
| 38ba3a2fdb | |||
| 998f4905b0 | |||
| 9cc45e426d | |||
| 7053adc718 | |||
| 8d6af2f936 | |||
| f4788f863e | |||
| 2ba8639dfd | |||
| a609216012 | |||
| b6911bc045 | |||
| 09fbbec45e | |||
| b697c89aae | |||
| 0e0b8a40c7 | |||
| 555fea04b4 | |||
| fee08ad3d2 | |||
| b3e0e3e76f | |||
| 4dee2bf44f | |||
| f23d023551 | |||
| 61ac2f71d5 | |||
| ca9e487111 | |||
| f8e327d46d | |||
| 835a7fdad3 | |||
| 6034a9797c | |||
| c204eed76e | |||
| 0abf1447af | |||
| 73ece504c9 | |||
| 30f2178b6f | |||
| 5b0a8b3c49 | |||
| da0db9551c | |||
| f1b1dcdd9e | |||
| b3bcc0f058 | |||
| 2b1bc85514 | |||
| 6517af5889 | |||
| 43f8d827f6 | |||
| f7d3c7a7c4 | |||
| 7f7cbe74f7 | |||
| e3c5d8c166 | |||
| 8957622879 | |||
| 657fde7545 | |||
| f757369821 | |||
| e623b83d68 | |||
| 2b8d4a1dce | |||
| e6103c3153 | |||
| 6b0a342cdd | |||
| 280a2da2db | |||
| 363d470386 | |||
| f715f08831 | |||
| c4e0681c33 | |||
| a3121c0ce0 | |||
| 6af25e5453 | |||
| fd8da098ed | |||
| e83c8ded35 | |||
| 229b0041a6 | |||
| 128e6a04c2 | |||
| a92159168c | |||
| 1fb2d40aa8 | |||
| 7ec496be3d | |||
| 35a794a648 | |||
| b8dfddd2e8 | |||
| 4a49aba2ba | |||
| d1bffc3952 | |||
| 8b2e901680 | |||
| a5db5cc54d | |||
| efede58a6d | |||
| 7df80623d5 | |||
| 028df1fd35 | |||
| 12e64d34e6 | |||
| ba7174224c | |||
| c794974b20 | |||
| d9fdab315c | |||
| b3d37d7b20 | |||
| 88076292de | |||
| 25c0a328e6 | |||
| ab855f18ea | |||
| b7659157fa | |||
| 608df0bd38 | |||
| 1871ca6ef6 | |||
| d7eed2ecf6 | |||
| 789e6786cc | |||
| 8e9bfe9522 | |||
| 0c99dfefbb | |||
| c16cedf981 | |||
| 4f0c6d3e46 | |||
| 752a6ad1de | |||
| 802c2aa6bf | |||
| 2a6b5bc2c7 | |||
| e986b99ce7 | |||
| c17dabdbd8 | |||
| 0ab12aabff | |||
| 30ecca57ba | |||
| cd734937c0 | |||
| 477b592b06 | |||
| fda9681b84 | |||
| 694042f027 | |||
| 7e77b1acd4 | |||
| 6b765f1b54 | |||
| 97d65f2f7e | |||
| 9186f2cc28 | |||
| 6ae2221007 | |||
| e862ce8f9b | |||
| 6dbe009076 | |||
| 598abbf308 | |||
| 17ccf2ba8c | |||
| ca5b15b377 | |||
| a11926ee85 | |||
| f19b7ab674 | |||
| 306e540a67 | |||
| 5185edce48 | |||
| b3f9882c7e | |||
| ee7b59c521 | |||
| 113a15cd69 | |||
| 2ea4f6631c | |||
| e21cf63216 | |||
| f31387ab12 | |||
| 4ec339c53b | |||
| eb70a6dd52 | |||
| a9aef32984 | |||
| 58d575ebeb | |||
| be57946347 | |||
| 63c2f887db | |||
| 36222bdb63 | |||
| de69800662 | |||
| f2a1604009 | |||
| dfec0bc5da | |||
| 45ce1678d1 | |||
| 5022c31815 | |||
| 2534d83bdd | |||
| 3e7917aee3 | |||
| 530a7c9777 | |||
| a3b195da1f | |||
| fa1a376d85 | |||
| 25d034d7dc | |||
| a0572f8a95 | |||
| 6e32ac5ceb | |||
| 5278908420 | |||
| 6044c4e063 | |||
| d0532495e0 | |||
| 3339960062 | |||
| 77854b1c69 | |||
| b1ca82da64 | |||
| 72bc56a934 | |||
| aac77be6ec | |||
| 6404fbd36d | |||
| f442452a2e | |||
| 35f515e828 | |||
| 3215644a87 | |||
| 05198ddeab | |||
| 67402c3e54 | |||
| 78abaed26f | |||
| 64a56ea346 | |||
| 453bc1f249 | |||
| 7fc61d7d27 | |||
| d9edf3f389 | |||
| 4a29a676b5 | |||
| 6a61e05ae7 | |||
| ce1301af38 | |||
| dd3caf07d2 | |||
| c62421cfb6 | |||
| d4026e1559 | |||
| 53346c17ea | |||
| 52356a4a87 | |||
| c603389ebc | |||
| 2d8e528b6f | |||
| 87dea595d3 | |||
| 9629dd0ba0 | |||
| 9a722c915a | |||
| 65e7e86739 | |||
| 1b0dcd2863 | |||
| c1e4ef47f3 |
@@ -1 +0,0 @@
|
|||||||
hosts/desktop/hardware-configuration.nix
|
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
keys:
|
||||||
|
- &user_kenji age1dhmt5tdyxd9zam542zkr9hq4tku7lzmf6j057sjtepk80deky5fqemczs5
|
||||||
|
creation_rules:
|
||||||
|
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
|
||||||
|
key_groups:
|
||||||
|
- age:
|
||||||
|
- *user_kenji
|
||||||
@@ -1,58 +1,57 @@
|
|||||||
# Sakamoto NixOS
|
# HakaseOS
|
||||||
|
HakaseOS is an opinionated NixOS configuration heavily inspired by OmarchyOS.
|
||||||
|
|
||||||
Sakamoto NixOS is built with various profiles intended for reproducibility.
|
## Features
|
||||||
|
* Vim keybindings
|
||||||
|
* Simple Setup
|
||||||
|
* Pre-configured Firefox
|
||||||
|
|
||||||
## Available Hosts
|
## How to Use SOPS
|
||||||
|
SOPS is an important aspect of this operating system. Learning to use it is important for security and modularity. It is impertinent that you do not lose the `private key`, as it is irrecoverable.
|
||||||
|
|
||||||
- MacBook M series
|
To get started, follow the instructions below.
|
||||||
- Linux
|
1. Create a folder.
|
||||||
|
```sh
|
||||||
|
mkdir -p ~/.config/sops/age
|
||||||
|
```
|
||||||
|
2. Generate a private key using `age`
|
||||||
|
```sh
|
||||||
|
nix-shell -p age --run "age-keygen -o ~/.config/sops/age/keys.txt"
|
||||||
|
```
|
||||||
|
**OR**
|
||||||
|
Use `ssh-to-age` to convert `id_ed22519` to `age`.
|
||||||
|
```sh
|
||||||
|
nix-shell -p ssh-to-age --run "ssh-to-age -private-key -i ~/.ssh/id_ed25519 > ~/.config/sops/age/keys.txt"
|
||||||
|
```
|
||||||
|
There are other ways of generating a private key. Refer to [sops-nix](https://github.com/Mic92/sops-nix).
|
||||||
|
3. Get a **public key**.
|
||||||
|
```sh
|
||||||
|
nix-shell -p age --run "age-keygen -y ~/.config/sops/age/keys.txt"
|
||||||
|
```
|
||||||
|
4. On the same directory as `flake.nix`, create `.sops.yaml` and paste the following below.
|
||||||
|
```yaml
|
||||||
|
# This example uses YAML anchors which allows reuse of multiple keys
|
||||||
|
# without having to repeat yourself.
|
||||||
|
# Also see https://github.com/Mic92/dotfiles/blob/d6114726d859df36ccaa32891c4963ae5717ef7f/nixos/.sops.yaml
|
||||||
|
# for a more complex example.
|
||||||
|
keys:
|
||||||
|
- &admin_alice 2504791468b153b8a3963cc97ba53d1919c5dfd4
|
||||||
|
- &admin_bob age12zlz6lvcdk6eqaewfylg35w0syh58sm7gh53q5vvn7hd7c6nngyseftjxl
|
||||||
|
creation_rules:
|
||||||
|
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
|
||||||
|
key_groups:
|
||||||
|
- pgp:
|
||||||
|
- *admin_alice
|
||||||
|
age:
|
||||||
|
- *admin_bob
|
||||||
|
|
||||||
## Installation
|
```
|
||||||
|
Replace as according to your needs.
|
||||||
1. Install [Nix](https://nixos.org/download/).
|
5. Create a sops `.yaml` file.
|
||||||
|
```sh
|
||||||
2. Ensure Nix is installed properly by running the following (this also gives you `nano` for editing later):
|
nix-shell -p sops --run "sops secrets/example.yaml"
|
||||||
|
```
|
||||||
```sh
|
NOTE: If you add a new host to your `.sops.yaml`, you will need to update the keys for all secrets.
|
||||||
nix-shell -p nano
|
```sh
|
||||||
```
|
nix-shell -p sops --run "sops updatekeys secrets/example.yaml"
|
||||||
|
```
|
||||||
3. Clone the git repository:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
git clone https://git.sakamoto.dev/kenji/nixos.git ~/.config/nixos && cd ~/.config/nixos/
|
|
||||||
```
|
|
||||||
|
|
||||||
4. Copy `info.default.nix` and rename it to `info.local.nix`:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
cp ~/.config/nixos/info.default.nix ~/.config/nixos/info.local.nix
|
|
||||||
```
|
|
||||||
|
|
||||||
🚨 **CRITICAL STEP:** Edit `info.local.nix`:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
nano ~/.config/nixos/info.local.nix
|
|
||||||
```
|
|
||||||
|
|
||||||
Modify it to fit your system — especially your **username**.
|
|
||||||
If you accidentally leave the default `biscuit`, that user will be created.
|
|
||||||
**Login password for `biscuit` is `Your-generic-password`.**
|
|
||||||
|
|
||||||
5. Execute the following command based on your host:
|
|
||||||
|
|
||||||
- **MacBook M series:**
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo nix run nix-darwin --extra-experimental-features "nix-command flakes" -- switch --flake ~/.config/nixos#macos
|
|
||||||
```
|
|
||||||
|
|
||||||
- **Linux:**
|
|
||||||
|
|
||||||
```sh
|
|
||||||
sudo nixos-rebuild --flake ~/.config/nixos#desktop --impure
|
|
||||||
sudo nix run home-manager -- init --switch
|
|
||||||
home-manager switch --flake ~/.config/nixos#desktop --impure
|
|
||||||
nix-channel --add https://nixos.org/channels/nixos-unstable nixos nix-channel --update
|
|
||||||
reboot
|
|
||||||
```
|
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
* fix: special workspace preload always loads first. Toggling it back is easy, but i'd rather create a new sh script that forces back to normal workspace.
|
||||||
|
* add: hypridle
|
||||||
|
* add: similar to omarchy-menu
|
||||||
|
* cleanup: stylix configurations and wallpaper
|
||||||
|
* cleanup: convert `anonymize` fixme's to secret keys
|
||||||
|
* add: hyprlock
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
programs.btop = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
vim_keys = true;
|
||||||
|
color_theme = "TTY";
|
||||||
|
theme_background = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
cava
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,146 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
myConfig,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
inputs.textfox.homeManagerModules.default
|
||||||
|
./textfox.nix
|
||||||
|
];
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
pywalfox-native
|
||||||
|
tridactyl-native
|
||||||
|
];
|
||||||
|
|
||||||
|
home.file.".config/tridactyl/tridactylrc".text = ''
|
||||||
|
set focusbypass true
|
||||||
|
set smoothscroll true
|
||||||
|
bind J tabnext
|
||||||
|
bind K tabprev
|
||||||
|
unbind <C-e>
|
||||||
|
'';
|
||||||
|
|
||||||
|
programs.firefox = {
|
||||||
|
enable = true;
|
||||||
|
languagePacks = ["en-US"];
|
||||||
|
nativeMessagingHosts = [
|
||||||
|
pkgs.pywalfox-native
|
||||||
|
pkgs.tridactyl-native
|
||||||
|
];
|
||||||
|
|
||||||
|
profiles = {
|
||||||
|
youtube = import ./profiles/youtube.nix {inherit pkgs myConfig;};
|
||||||
|
hakase = {
|
||||||
|
search.force = true;
|
||||||
|
isDefault = true;
|
||||||
|
search.default = "ddg";
|
||||||
|
extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
|
||||||
|
ublock-origin
|
||||||
|
bitwarden
|
||||||
|
tridactyl
|
||||||
|
# pywalfox
|
||||||
|
];
|
||||||
|
|
||||||
|
bookmarks = {
|
||||||
|
force = true;
|
||||||
|
settings = [
|
||||||
|
{
|
||||||
|
name = "Toolbar Bookmarks";
|
||||||
|
toolbar = true;
|
||||||
|
bookmarks = myConfig.firefox.bookmarks;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
# --- Privacy & Hardening ---
|
||||||
|
"browser.contentblocking.category" = "strict";
|
||||||
|
"privacy.trackingprotection.enabled" = true;
|
||||||
|
"privacy.resistFingerprinting" = true; # Note: Spoofs timezone and caps FPS to 60
|
||||||
|
"geo.enabled" = false;
|
||||||
|
"media.peerconnection.enabled" = false; # Prevents WebRTC IP leaks
|
||||||
|
"network.dns.disablePrefetch" = true;
|
||||||
|
"network.prefetch-next" = false;
|
||||||
|
|
||||||
|
# --- NixOS / Hyprland Integration ---
|
||||||
|
"widget.use-xdg-desktop-portal.file-picker" = 1; # Use native file picker
|
||||||
|
|
||||||
|
# --- UI & Behavior ---
|
||||||
|
"accessibility.typeaheadfind" = false;
|
||||||
|
"browser.compactmode.show" = true;
|
||||||
|
"browser.tabs.closeWindowWithLastTab" = false;
|
||||||
|
"extensions.pocket.enabled" = false;
|
||||||
|
"extensions.screenshots.disabled" = true;
|
||||||
|
"browser.topsites.contile.enabled" = false;
|
||||||
|
"browser.formfill.enable" = false;
|
||||||
|
"browser.search.suggest.enabled" = false;
|
||||||
|
"browser.search.suggest.enabled.private" = false;
|
||||||
|
"browser.urlbar.suggest.searches" = false;
|
||||||
|
"browser.urlbar.showSearchSuggestionsFirst" = false;
|
||||||
|
"browser.newtabpage.activity-stream.feeds.section.topstories" = false;
|
||||||
|
"browser.newtabpage.activity-stream.feeds.snippets" = false;
|
||||||
|
"browser.newtabpage.activity-stream.section.highlights.includePocket" = false;
|
||||||
|
"browser.newtabpage.activity-stream.section.highlights.includeBookmarks" = false;
|
||||||
|
"browser.newtabpage.activity-stream.section.highlights.includeDownloads" = false;
|
||||||
|
"browser.newtabpage.activity-stream.section.highlights.includeVisited" = false;
|
||||||
|
"browser.newtabpage.activity-stream.showSponsored" = false;
|
||||||
|
"browser.newtabpage.activity-stream.system.showSponsored" = false;
|
||||||
|
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
|
||||||
|
|
||||||
|
# --- Homepage & Navigation ---
|
||||||
|
"browser.startup.homepage" = "https://dash.sakamoto.dev";
|
||||||
|
"browser.newtabpage.pinned" = myConfig.firefox.newtabpage;
|
||||||
|
|
||||||
|
# --- DNS over HTTPS (Quad9) ---
|
||||||
|
"network.trr.mode" = 2; # Use DoH with system fallback
|
||||||
|
"network.trr.uri" = "https://dns.quad9.net/dns-query";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
policies = {
|
||||||
|
DisableTelemetry = true;
|
||||||
|
DisableFirefoxStudies = true;
|
||||||
|
EnableTrackingProtection = {
|
||||||
|
Value = true;
|
||||||
|
Locked = false;
|
||||||
|
Cryptomining = true;
|
||||||
|
Fingerprinting = true;
|
||||||
|
};
|
||||||
|
DisablePocket = true;
|
||||||
|
DisableFirefoxAccounts = true;
|
||||||
|
DisableAccounts = true;
|
||||||
|
DisableFirefoxScreenshots = true;
|
||||||
|
OverrideFirstRunPage = "";
|
||||||
|
OverridePostUpdatePage = "";
|
||||||
|
DontCheckDefaultBrowser = true;
|
||||||
|
DisplayBookmarksToolbar = "always";
|
||||||
|
SearchBar = "unified";
|
||||||
|
|
||||||
|
# Power User Messaging
|
||||||
|
UserMessaging = {
|
||||||
|
ExtensionRecommendations = false;
|
||||||
|
SkipOnboarding = true;
|
||||||
|
FeatureRecommendations = false;
|
||||||
|
UrlbarInterventions = false;
|
||||||
|
WhatsNew = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# ExtensionSettings = {
|
||||||
|
# "uBlock0@raymondhill.net" = {
|
||||||
|
# install_url = "https://addons.mozilla.org/firefox/downloads/latest/ublock-origin/latest.xpi";
|
||||||
|
# installation_mode = "force_installed";
|
||||||
|
# };
|
||||||
|
# "{446900e4-71c2-419f-a6a7-df9c091e268b}" = {
|
||||||
|
# install_url = "https://addons.mozilla.org/firefox/downloads/latest/bitwarden-password-manager/latest.xpi";
|
||||||
|
# installation_mode = "force_installed";
|
||||||
|
# };
|
||||||
|
# "tridactyl.vim@cmcaine.co.uk" = {
|
||||||
|
# install_url = "https://addons.mozilla.org/firefox/downloads/latest/tridactyl-vim/latest.xpi";
|
||||||
|
# installation_mode = "force_installed";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
myConfig,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
id = 1;
|
||||||
|
name = "YouTube";
|
||||||
|
search.force = true;
|
||||||
|
search.default = "ddg";
|
||||||
|
extensions.force = true;
|
||||||
|
extensions.packages = with pkgs.nur.repos.rycee.firefox-addons; [
|
||||||
|
ublock-origin
|
||||||
|
bitwarden
|
||||||
|
tridactyl
|
||||||
|
];
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
# --- Privacy & Hardening ---
|
||||||
|
"browser.contentblocking.category" = "strict";
|
||||||
|
"privacy.trackingprotection.enabled" = true;
|
||||||
|
"privacy.resistFingerprinting" = true; # Note: Spoofs timezone and caps FPS to 60
|
||||||
|
"geo.enabled" = false;
|
||||||
|
"media.peerconnection.enabled" = false; # Prevents WebRTC IP leaks
|
||||||
|
"network.dns.disablePrefetch" = true;
|
||||||
|
"network.prefetch-next" = false;
|
||||||
|
|
||||||
|
# --- NixOS / Hyprland Integration ---
|
||||||
|
"widget.use-xdg-desktop-portal.file-picker" = 1; # Use native file picker
|
||||||
|
|
||||||
|
# --- UI & Behavior ---
|
||||||
|
"browser.compactmode.show" = true;
|
||||||
|
"browser.tabs.closeWindowWithLastTab" = false;
|
||||||
|
"extensions.pocket.enabled" = false;
|
||||||
|
"extensions.screenshots.disabled" = true;
|
||||||
|
"browser.topsites.contile.enabled" = false;
|
||||||
|
"browser.formfill.enable" = false;
|
||||||
|
"browser.search.suggest.enabled" = false;
|
||||||
|
"browser.search.suggest.enabled.private" = false;
|
||||||
|
"browser.urlbar.suggest.searches" = false;
|
||||||
|
"browser.urlbar.showSearchSuggestionsFirst" = false;
|
||||||
|
"browser.newtabpage.activity-stream.feeds.section.topstories" = false;
|
||||||
|
"browser.newtabpage.activity-stream.feeds.snippets" = false;
|
||||||
|
"browser.newtabpage.activity-stream.section.highlights.includePocket" = false;
|
||||||
|
"browser.newtabpage.activity-stream.section.highlights.includeBookmarks" = false;
|
||||||
|
"browser.newtabpage.activity-stream.section.highlights.includeDownloads" = false;
|
||||||
|
"browser.newtabpage.activity-stream.section.highlights.includeVisited" = false;
|
||||||
|
"browser.newtabpage.activity-stream.showSponsored" = false;
|
||||||
|
"browser.newtabpage.activity-stream.system.showSponsored" = false;
|
||||||
|
"browser.newtabpage.activity-stream.showSponsoredTopSites" = false;
|
||||||
|
"toolkit.legacyUserProfileCustomizations.stylesheets" = true;
|
||||||
|
"extensions.autoDisableScopes" = 0; # Enable extensions by default
|
||||||
|
|
||||||
|
# --- Homepage & Navigation ---
|
||||||
|
"browser.startup.homepage" = "https://youtube.com";
|
||||||
|
"browser.newtabpage.pinned" = myConfig.firefox.newtabpage;
|
||||||
|
|
||||||
|
# --- DNS over HTTPS (Quad9) ---
|
||||||
|
"network.trr.mode" = 2; # Use DoH with system fallback
|
||||||
|
"network.trr.uri" = "https://dns.quad9.net/dns-query";
|
||||||
|
};
|
||||||
|
|
||||||
|
userChrome = ''
|
||||||
|
/* --- Floating Autohide Toolbox (Tabs Only) --- */
|
||||||
|
|
||||||
|
/* Take toolbox out of the document flow so web content is 100% height */
|
||||||
|
#navigator-toolbox {
|
||||||
|
position: fixed !important;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
z-index: 9999 !important;
|
||||||
|
background-color: var(--toolbar-bgcolor, #1c1b22) !important;
|
||||||
|
|
||||||
|
/* Start hidden */
|
||||||
|
transform: translateY(-100%) !important;
|
||||||
|
opacity: 0 !important;
|
||||||
|
transition: transform 0.2s ease, opacity 0.2s ease !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Trigger zone */
|
||||||
|
#navigator-toolbox::after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
top: 100%;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 10px;
|
||||||
|
z-index: 10000 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Reveal when hovering */
|
||||||
|
#navigator-toolbox:hover {
|
||||||
|
transform: translateY(0) !important;
|
||||||
|
opacity: 1 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* --- Hide specific bars --- */
|
||||||
|
|
||||||
|
/* Hide Navigation Bar (Address Bar) COMPLETELY */
|
||||||
|
#nav-bar {
|
||||||
|
visibility: collapse !important;
|
||||||
|
height: 0px !important;
|
||||||
|
min-height: 0px !important;
|
||||||
|
padding: 0 !important;
|
||||||
|
margin: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Hide Bookmarks Toolbar */
|
||||||
|
#PersonalToolbar { visibility: collapse !important; }
|
||||||
|
|
||||||
|
/* Hide Titlebar */
|
||||||
|
#titlebar { appearance: none !important; }
|
||||||
|
|
||||||
|
/* Ensure TabsToolbar looks okay on its own */
|
||||||
|
#TabsToolbar {
|
||||||
|
border: none !important;
|
||||||
|
background: transparent !important;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
{
|
||||||
|
textfox = {
|
||||||
|
enable = true;
|
||||||
|
profile = "hakase";
|
||||||
|
config = {
|
||||||
|
# background = {
|
||||||
|
# color = "#123456";
|
||||||
|
# };
|
||||||
|
# border = {
|
||||||
|
# color = "#654321";
|
||||||
|
# width = "4px";
|
||||||
|
# transition = "1.0s ease";
|
||||||
|
# radius = "3px";
|
||||||
|
# };
|
||||||
|
# displayWindowControls = true;
|
||||||
|
# displayNavButtons = true;
|
||||||
|
# displayUrlbarIcons = true;
|
||||||
|
# displaySidebarTools = false;
|
||||||
|
displayTitles = true;
|
||||||
|
# newtabLogo = " __ __ ____ \A / /____ _ __/ /_/ __/___ _ __\A / __/ _ \\| |/_/ __/ /_/ __ \\| |/_/\A / /_/ __/> </ /_/ __/ /_/ /> < \A \\__/\\___/_/|_|\\__/_/ \\____/_/|_| ";
|
||||||
|
# font = {
|
||||||
|
# family = "Fira Code";
|
||||||
|
# size = "15px";
|
||||||
|
# accent = "#654321";
|
||||||
|
# };
|
||||||
|
tabs = {
|
||||||
|
horizontal.enable = false;
|
||||||
|
# horizontal.enable = true;
|
||||||
|
# vertical.enable = true;
|
||||||
|
# vertical.margin = "1.0rem";
|
||||||
|
};
|
||||||
|
# navbar = {
|
||||||
|
# margin = "8px 8px 2px";
|
||||||
|
# padding = "4px";
|
||||||
|
# };
|
||||||
|
bookmarks = {
|
||||||
|
alignment = "left";
|
||||||
|
};
|
||||||
|
# icons = {
|
||||||
|
# toolbar.extensions.enable = true;
|
||||||
|
# context.extensions.enable = true;
|
||||||
|
# context.firefox.enable = true;
|
||||||
|
# };
|
||||||
|
# textTransform = "uppercase";
|
||||||
|
# extraConfig = "/* custom css here */";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -3,16 +3,15 @@
|
|||||||
myConfig,
|
myConfig,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
programs.zoxide.enable = true;
|
|
||||||
programs.fish = {
|
programs.fish = {
|
||||||
enable = true;
|
enable = true;
|
||||||
interactiveShellInit = ''
|
interactiveShellInit = ''
|
||||||
set fish_greeting
|
set fish_greeting
|
||||||
fish_vi_key_bindings
|
fish_vi_key_bindings
|
||||||
zoxide init fish | source
|
zoxide init fish | source
|
||||||
|
zoxide init fish --cmd cd | source
|
||||||
'';
|
'';
|
||||||
shellAliases = myConfig.general.terminal.Aliases;
|
shellAliases = myConfig.terminal.aliases;
|
||||||
|
|
||||||
plugins = with pkgs.fishPlugins; [
|
plugins = with pkgs.fishPlugins; [
|
||||||
];
|
];
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
gemini-cli
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
home.file.".config/ghostty/screensaver".text = ''
|
||||||
|
window-padding-x = 0
|
||||||
|
window-padding-y = 0
|
||||||
|
window-padding-color = "extend-always"
|
||||||
|
'';
|
||||||
|
programs.ghostty = {
|
||||||
|
enable = true;
|
||||||
|
package =
|
||||||
|
if pkgs.stdenv.isDarwin
|
||||||
|
then pkgs.ghostty-bin
|
||||||
|
else pkgs.ghostty;
|
||||||
|
enableFishIntegration = true;
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
confirm-close-surface = false;
|
||||||
|
app-notifications = false;
|
||||||
|
window-padding-x = 15;
|
||||||
|
window-padding-y = 15;
|
||||||
|
window-padding-balance = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{myConfig, ...}: {
|
||||||
|
programs.git = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
user.name = "${myConfig.git.username}";
|
||||||
|
user.email = "${myConfig.git.email}";
|
||||||
|
init.defaultBranch = "${myConfig.git.defaultBranch}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
myConfig,
|
||||||
|
inputs,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
programs.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland;
|
||||||
|
portalPackage = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.xdg-desktop-portal-hyprland;
|
||||||
|
withUWSM = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = [
|
||||||
|
pkgs.hyprpicker
|
||||||
|
pkgs.hyprlock
|
||||||
|
pkgs.hypridle
|
||||||
|
pkgs.hyprpaper
|
||||||
|
pkgs.hyprsunset
|
||||||
|
pkgs.hyprpolkitagent
|
||||||
|
];
|
||||||
|
|
||||||
|
xdg.terminal-exec = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
default = ["${myConfig.terminal.default}"];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# systemd.user.services.hyprpolkitagent = {
|
||||||
|
# description = "Hyprland Polkit Agent";
|
||||||
|
# wantedBy = ["graphical-session.target"];
|
||||||
|
# serviceConfig = {
|
||||||
|
# ExecStart = "${pkgs.hyprpolkitagent}/libexec/hyprpolkitagent";
|
||||||
|
# Restart = "on-failure";
|
||||||
|
# };
|
||||||
|
# };
|
||||||
|
}
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./hypr/binds.nix
|
||||||
|
./hypr/general.nix
|
||||||
|
./hypr/exec.nix
|
||||||
|
./hypr/rules.nix
|
||||||
|
./hypr/animation.nix
|
||||||
|
./hypr/misc.nix
|
||||||
|
./hypr/input.nix
|
||||||
|
];
|
||||||
|
wayland.windowManager.hyprland.enable = true;
|
||||||
|
wayland.windowManager.hyprland.systemd.enable = false; # for UWSM support...
|
||||||
|
}
|
||||||
@@ -0,0 +1,51 @@
|
|||||||
|
{
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
animations = {
|
||||||
|
enabled = true;
|
||||||
|
|
||||||
|
bezier = [
|
||||||
|
"easeOutQuint,0.23,1,0.32,1"
|
||||||
|
"easeInOutCubic,0.65,0.05,0.36,1"
|
||||||
|
"linear,0,0,1,1"
|
||||||
|
"almostLinear,0.5,0.5,0.75,1.0"
|
||||||
|
"quick,0.15,0,0.1,1"
|
||||||
|
];
|
||||||
|
|
||||||
|
animation = [
|
||||||
|
"global, 1, 10, default"
|
||||||
|
"border, 1, 5.39, easeOutQuint"
|
||||||
|
"windows, 1, 4.79, easeOutQuint"
|
||||||
|
"windowsIn, 1, 4.1, easeOutQuint, popin 87%"
|
||||||
|
"windowsOut, 1, 1.49, linear, popin 87%"
|
||||||
|
"fadeIn, 1, 1.73, almostLinear"
|
||||||
|
"fadeOut, 1, 1.46, almostLinear"
|
||||||
|
"fade, 1, 3.03, quick"
|
||||||
|
"layers, 1, 3.81, easeOutQuint"
|
||||||
|
"layersIn, 1, 4, easeOutQuint, fade"
|
||||||
|
"layersOut, 1, 1.5, linear, fade"
|
||||||
|
"fadeLayersIn, 1, 1.79, almostLinear"
|
||||||
|
"fadeLayersOut, 1, 1.39, almostLinear"
|
||||||
|
"workspaces, 0, 0, ease"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
decoration = {
|
||||||
|
rounding = 0;
|
||||||
|
|
||||||
|
shadow = {
|
||||||
|
enabled = true;
|
||||||
|
range = 2;
|
||||||
|
render_power = 3;
|
||||||
|
color = "rgba(1a1a1aee)";
|
||||||
|
};
|
||||||
|
|
||||||
|
blur = {
|
||||||
|
enabled = true;
|
||||||
|
size = 2;
|
||||||
|
passes = 2;
|
||||||
|
special = true;
|
||||||
|
brightness = 0.60;
|
||||||
|
contrast = 0.75;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
services.swayosd.enable = true;
|
||||||
|
home.packages = [
|
||||||
|
pkgs.playerctl
|
||||||
|
];
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
bindel = [
|
||||||
|
", XF86AudioRaiseVolume, exec, swayosd-client --output-volume raise"
|
||||||
|
", XF86AudioLowerVolume, exec, swayosd-client --output-volume lower"
|
||||||
|
", XF86MonBrightnessUp, exec, ddcutil setvcp 10 + 10"
|
||||||
|
", XF86MonBrightnessDown, exec, ddcutil setvcp 10 - 10"
|
||||||
|
];
|
||||||
|
|
||||||
|
bindl = [
|
||||||
|
", XF86AudioMute, exec, swayosd-client --output-volume mute-toggle"
|
||||||
|
", Caps_Lock, exec, swayosd-client --caps-lock"
|
||||||
|
", XF86AudioPlay, exec, playerctl play-pause && notify-send -u low -t 1000 \"Media\" \"$(playerctl status)\""
|
||||||
|
", XF86AudioPrev, exec, playerctl previous && notify-send -u low -t 1000 \"Previous Track\" \"$(playerctl metadata title)\""
|
||||||
|
", XF86AudioNext, exec, playerctl next && notify-send -u low -t 1000 \"Next Track\" \"$(playerctl metadata title)\""
|
||||||
|
", XF86AudioMute, exec, swayosd-client --output-volume mute-toggle"
|
||||||
|
]; # FIXME: not working
|
||||||
|
bindm = [
|
||||||
|
"SUPER, mouse:272, movewindow"
|
||||||
|
"SUPER, mouse:273, resizewindow"
|
||||||
|
];
|
||||||
|
|
||||||
|
bindd =
|
||||||
|
[
|
||||||
|
# essential
|
||||||
|
"SUPER, Return, Open Terminal, exec, uwsm app -- xdg-terminal-exec"
|
||||||
|
"SUPER, Q, Kill active, killactive"
|
||||||
|
|
||||||
|
# resize
|
||||||
|
"SUPER CTRL, H, Resize Left, resizeactive, -40 0"
|
||||||
|
"SUPER CTRL, J, Resize Down, resizeactive, 0 40"
|
||||||
|
"SUPER CTRL, K, Resize Up, resizeactive, 0 -40"
|
||||||
|
"SUPER CTRL, L, Resize Right, resizeactive, 40 0"
|
||||||
|
|
||||||
|
# move focus
|
||||||
|
"SUPER, J, Move focus down, movefocus, d"
|
||||||
|
"SUPER, K, Move focus up, movefocus, u"
|
||||||
|
"SUPER, H, Move focus left, movefocus, l"
|
||||||
|
"SUPER, L, Move focus right, movefocus, r"
|
||||||
|
|
||||||
|
# move window
|
||||||
|
"SUPER SHIFT, h, Move window left, swapwindow, l"
|
||||||
|
"SUPER SHIFT, j, Move window down, swapwindow, d"
|
||||||
|
"SUPER SHIFT, k, Move window up, swapwindow, u"
|
||||||
|
"SUPER SHIFT, l, Move window right, swapwindow, r"
|
||||||
|
|
||||||
|
# fullscreen
|
||||||
|
"SUPER, F, Toggle Fullscreen, fullscreen, 0"
|
||||||
|
"SUPER SHIFT, F, Toggle Maximized Fullscreen, fullscreen, 1"
|
||||||
|
|
||||||
|
# layout
|
||||||
|
"SUPER, O, Toggle Split, layoutmsg, togglesplit"
|
||||||
|
|
||||||
|
# apps
|
||||||
|
"SUPER, W, Open Browser, exec, uwsm app -- firefox" # FIXME: must be xdg-open
|
||||||
|
"SUPER, SPACE, Open App Launcher, exec, nc -U $XDG_RUNTIME_DIR/walker/walker.sock"
|
||||||
|
"SUPER, T, Toggle Steam, togglespecialworkspace, steam"
|
||||||
|
"SUPER, M, Toggle Music, togglespecialworkspace, music"
|
||||||
|
"SUPER, Y, Toggle YouTube, togglespecialworkspace, youtube"
|
||||||
|
"SUPER, P, Toggle Preload, togglespecialworkspace, preload"
|
||||||
|
|
||||||
|
# [Workspaces] Toggle between most recent workspaces
|
||||||
|
"SUPER, Tab, Cycle workspaces, workspace, previous"
|
||||||
|
]
|
||||||
|
++ (
|
||||||
|
# Generate binds for Super + [1-10] to switch workspaces
|
||||||
|
# and Super + Shift + [1-10] to move window to workspace
|
||||||
|
builtins.concatLists (builtins.genList (
|
||||||
|
i: let
|
||||||
|
ws = i + 1;
|
||||||
|
key = toString (
|
||||||
|
if ws == 10
|
||||||
|
then 0
|
||||||
|
else ws
|
||||||
|
);
|
||||||
|
in [
|
||||||
|
"SUPER, ${key}, Switch to workspace ${toString ws}, workspace, ${toString ws}"
|
||||||
|
"SUPER SHIFT, ${key}, Move window to workspace ${toString ws}, movetoworkspace, ${toString ws}"
|
||||||
|
]
|
||||||
|
)
|
||||||
|
10)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = [
|
||||||
|
pkgs.gum
|
||||||
|
];
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
env = [
|
||||||
|
"GUM_CONFIRM_PROMPT_FOREGROUND,6"
|
||||||
|
"GUM_CONFIRM_SELECTED_FOREGROUND,0"
|
||||||
|
"GUM_CONFIRM_SELECTED_BACKGROUND,2"
|
||||||
|
"GUM_CONFIRM_UNSELECTED_FOREGROUND,0"
|
||||||
|
"GUM_CONFIRM_UNSELECTED_BACKGROUND,8"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
psmisc
|
||||||
|
];
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
exec = [
|
||||||
|
# "pkill -x hyprpaper; uwsm app -- hyprpaper"
|
||||||
|
"killall -SIGUSR2 .ghostty-wrappe"
|
||||||
|
];
|
||||||
|
exec-once = [
|
||||||
|
"[workspace special:preload silent] uwsm app -- firefox"
|
||||||
|
"[workspace special:preload silent] uwsm app -- xdg-terminal-exec"
|
||||||
|
"[workspace special:preload silent] uwsm app -- firefox -P YouTube"
|
||||||
|
|
||||||
|
"uwsm app -- waybar"
|
||||||
|
"uwsm app -- hyprpaper"
|
||||||
|
"uwsm app -- elephant"
|
||||||
|
"uwsm app -- swayosd-server"
|
||||||
|
"uwsm app -- pywalfox start"
|
||||||
|
|
||||||
|
"walker --gapplication-service"
|
||||||
|
|
||||||
|
# "sh -c 'sleep 2; hyprctl dispatch workspace 1; sleep 2; hyprctl dispatch workspace 1'" # FIXME: tard wrangling edition
|
||||||
|
|
||||||
|
"[workspace 1] uwsm app -- xdg-terminal-exec"
|
||||||
|
|
||||||
|
"[workspace special:steam silent] uwsm app -- steam"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{myConfig, ...}: {
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
general = {
|
||||||
|
gaps_in = 5;
|
||||||
|
gaps_out = 15;
|
||||||
|
layout = "dwindle";
|
||||||
|
};
|
||||||
|
monitor = myConfig.hyprland.monitors;
|
||||||
|
dwindle = {
|
||||||
|
pseudotile = true;
|
||||||
|
preserve_split = true;
|
||||||
|
smart_split = false;
|
||||||
|
};
|
||||||
|
master = {
|
||||||
|
new_status = "master";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
input = {
|
||||||
|
repeat_rate = 50;
|
||||||
|
repeat_delay = 300;
|
||||||
|
};
|
||||||
|
cursor = {
|
||||||
|
hide_on_key_press = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
misc = {
|
||||||
|
disable_hyprland_logo = true;
|
||||||
|
disable_splash_rendering = true;
|
||||||
|
focus_on_activate = true;
|
||||||
|
anr_missed_pings = 3;
|
||||||
|
new_window_takes_over_fullscreen = 1;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
{
|
||||||
|
wayland.windowManager.hyprland.settings = {
|
||||||
|
workspace = [
|
||||||
|
"special:youtube, on-created-empty:uwsm app -- firefox -P YouTube --name youtube"
|
||||||
|
"special:music, on-created-empty:hakase-music-launch"
|
||||||
|
];
|
||||||
|
|
||||||
|
windowrulev2 = [
|
||||||
|
# --- POPUP RULES (Wifi, BT, Audio) ---
|
||||||
|
"float, class:^(org\.hakase\.popup\..*)$"
|
||||||
|
"animation slide right, class:^(org\.hakase\.popup\..*)$"
|
||||||
|
"dimaround, class:^(org\.hakase\.popup\..*)$"
|
||||||
|
# --- WALLPAPER PICKER ---
|
||||||
|
"float, class:^(org\.hakase\.switch-wallpaper)$"
|
||||||
|
"float, initialTitle:^(Wallpaper Selector)$"
|
||||||
|
"center, class:^(org\.hakase\.switch-wallpaper)$"
|
||||||
|
"center, initialTitle:^(Wallpaper Selector)$"
|
||||||
|
"size 60% 60%, class:^(org\.hakase\.switch-wallpaper)$"
|
||||||
|
"size 60% 60%, initialTitle:^(Wallpaper Selector)$"
|
||||||
|
"dimaround, class:^(org\.hakase\.switch-wallpaper)$"
|
||||||
|
"dimaround, initialTitle:^(Wallpaper Selector)$"
|
||||||
|
|
||||||
|
# Prevent Firefox and Terminal from stealing focus on launch
|
||||||
|
"suppressevent activate, workspace:special:preload"
|
||||||
|
"noinitialfocus, workspace:special:preload"
|
||||||
|
|
||||||
|
# --- STEAM RULES ---
|
||||||
|
"workspace special:steam silent, class:^(steam)$"
|
||||||
|
"noinitialfocus, class:^(steam)$"
|
||||||
|
"suppressevent activate, class:^(steam)$"
|
||||||
|
|
||||||
|
# --- MUSIC RULES (Jellyfin-TUI) ---
|
||||||
|
"workspace special:music silent, title:^(jellyfin-tui)$"
|
||||||
|
"workspace special:music silent, initialTitle:^(jellyfin-tui)$"
|
||||||
|
|
||||||
|
# --- CAVA RULES ---
|
||||||
|
"workspace special:music silent, title:^(cava)$"
|
||||||
|
"workspace special:music silent, initialTitle:^(cava)$"
|
||||||
|
|
||||||
|
# --- YOUTUBE RULES ---
|
||||||
|
"workspace special:youtube, class:^(youtube)$"
|
||||||
|
|
||||||
|
# --- GAMING RULES ---
|
||||||
|
# Steam Apps, Gamescope, Lutris, Heroic, and Wine/Proton apps
|
||||||
|
"fullscreen, class:^steam_app_\d+$"
|
||||||
|
"monitor 0, class:^steam_app_\d+$"
|
||||||
|
"workspace 1, class:^steam_app_\d+$"
|
||||||
|
|
||||||
|
"fullscreen, class:^(gamescope)$"
|
||||||
|
"fullscreen, class:^(lutris)$"
|
||||||
|
"fullscreen, class:^(heroic)$"
|
||||||
|
"fullscreen, class:^wine-.*$"
|
||||||
|
"fullscreen, title:^Wine .*$"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
myConfig,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
wallpaperDir = "${config.home.homeDirectory}/.config/nixos/assets/Wallpapers";
|
||||||
|
defaultWallpaper = "${wallpaperDir}/${myConfig.hyprland.wallpaper}";
|
||||||
|
cacheWallpaper = "${config.home.homeDirectory}/.cache/current_wallpaper";
|
||||||
|
in {
|
||||||
|
services.hyprpaper = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
preload = [cacheWallpaper];
|
||||||
|
wallpaper = [
|
||||||
|
",${cacheWallpaper}"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
home.activation.setupWallpaper = lib.hm.dag.entryAfter ["writeBoundary"] ''
|
||||||
|
if [ ! -f "${cacheWallpaper}" ]; then
|
||||||
|
mkdir -p "$(dirname "${cacheWallpaper}")"
|
||||||
|
if [ -f "${defaultWallpaper}" ]; then
|
||||||
|
cp "${defaultWallpaper}" "${cacheWallpaper}"
|
||||||
|
else
|
||||||
|
echo "Default wallpaper not found at ${defaultWallpaper}"
|
||||||
|
touch "${cacheWallpaper}"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
systemd.user.startServices = "sd-switch";
|
||||||
|
}
|
||||||
@@ -0,0 +1,48 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
(writeShellScriptBin "hakase-wallpaper-switch" ''
|
||||||
|
if [[ "$1" != "run" ]]; then
|
||||||
|
if command -v ghostty &> /dev/null; then
|
||||||
|
ghostty --class="org.hakase.switch-wallpaper" --title="Wallpaper Selector" -e bash -c "hakase-wallpaper-switch run || read -p 'Hit Enter to close...'"
|
||||||
|
exit 0
|
||||||
|
elif command -v kitty &> /dev/null; then
|
||||||
|
kitty --class org.hakase.switch-wallpaper --title "Wallpaper Selector" -e bash -c "hakase-wallpaper-switch run || read -p 'Hit Enter to close...'"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
tmp_file=$(mktemp)
|
||||||
|
target_dir="$HOME/Pictures/Wallpapers"
|
||||||
|
if [ ! -d "$target_dir" ]; then
|
||||||
|
target_dir="$HOME"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Ensure we are in a terminal that supports yazi
|
||||||
|
${pkgs.yazi}/bin/yazi "$target_dir" --chooser-file="$tmp_file"
|
||||||
|
|
||||||
|
if [ ! -f "$tmp_file" ]; then
|
||||||
|
echo "No selection file created."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
WALLPAPER=$(cat "$tmp_file")
|
||||||
|
rm -f "$tmp_file"
|
||||||
|
|
||||||
|
if [ -z "$WALLPAPER" ]; then
|
||||||
|
echo "No wallpaper selected."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Persistence logic
|
||||||
|
CACHE_FILE="$HOME/.cache/current_wallpaper"
|
||||||
|
cp "$WALLPAPER" "$CACHE_FILE"
|
||||||
|
|
||||||
|
# Reload hyprpaper
|
||||||
|
${pkgs.hyprland}/bin/hyprctl hyprpaper unload all
|
||||||
|
${pkgs.hyprland}/bin/hyprctl hyprpaper preload "$CACHE_FILE"
|
||||||
|
${pkgs.hyprland}/bin/hyprctl hyprpaper wallpaper ",$CACHE_FILE"
|
||||||
|
|
||||||
|
exec matugen image "$CACHE_FILE"
|
||||||
|
'')
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
jellyfin-tui
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
jellyfin-media-player
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
[config] # FIXME: ~/.config feels unreliable. Use config.home.homeDirectory instead.
|
||||||
|
reload_on_change = true
|
||||||
|
|
||||||
|
[templates.ghostty]
|
||||||
|
input_path = "~/.config/matugen/templates/ghostty"
|
||||||
|
output_path = "~/.config/ghostty/themes/matugen"
|
||||||
|
post_hook = "killall -SIGUSR2 .ghostty-wrappe"
|
||||||
|
|
||||||
|
[templates.hyprland]
|
||||||
|
input_path = "~/.config/matugen/templates/hyprland"
|
||||||
|
output_path = "~/.config/hypr/matugen.conf"
|
||||||
|
post_hook = "hyprctl reload"
|
||||||
|
|
||||||
|
[templates.waybar]
|
||||||
|
input_path = "~/.config/matugen/templates/waybar"
|
||||||
|
output_path = "~/.config/waybar/matugen.css"
|
||||||
|
post_hook = "killall -SIGUSR2 .waybar-wrapped"
|
||||||
|
|
||||||
|
[templates.starship]
|
||||||
|
input_path = "~/.config/matugen/templates/starship"
|
||||||
|
output_path = "~/.config/starship.toml"
|
||||||
|
|
||||||
|
[templates.walker]
|
||||||
|
input_path = "~/.config/matugen/templates/walker"
|
||||||
|
output_path = "~/.config/walker/themes/nixos/style.css"
|
||||||
|
|
||||||
|
[templates.pywalfox]
|
||||||
|
input_path = '~/.config/matugen/templates/firefox'
|
||||||
|
output_path = '~/.cache/wal/colors.json'
|
||||||
|
post_hook = 'pywalfox update'
|
||||||
|
|
||||||
|
[templates.cava]
|
||||||
|
input_path = "~/.config/matugen/templates/cava"
|
||||||
|
output_path = "~/.config/cava/config"
|
||||||
|
post_hook = "pkill -USR1 cava"
|
||||||
|
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
matugen
|
||||||
|
psmisc # for killall
|
||||||
|
];
|
||||||
|
home.file.".config/matugen/config.toml" = {
|
||||||
|
source = ./config.toml;
|
||||||
|
};
|
||||||
|
|
||||||
|
home.file.".config/matugen/templates" = {
|
||||||
|
source = ./templates;
|
||||||
|
recursive = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.ghostty.settings.theme = "matugen";
|
||||||
|
programs.starship.enable = true;
|
||||||
|
wayland.windowManager.hyprland.settings.source = ["./matugen.conf"];
|
||||||
|
programs.walker.config.theme = "nixos";
|
||||||
|
}
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
[general]
|
||||||
|
framerate = 60
|
||||||
|
autosens = 1
|
||||||
|
bars = 0
|
||||||
|
bar_width = 3
|
||||||
|
bar_spacing = 1
|
||||||
|
sleep_timer = 5
|
||||||
|
|
||||||
|
[input]
|
||||||
|
method = pipewire
|
||||||
|
source = auto
|
||||||
|
|
||||||
|
[output]
|
||||||
|
method = ncurses
|
||||||
|
style = stereo
|
||||||
|
|
||||||
|
[color]
|
||||||
|
gradient = 1
|
||||||
|
gradient_count = 6
|
||||||
|
gradient_color_1 = '{{colors.primary.default.hex}}'
|
||||||
|
gradient_color_2 = '{{colors.primary_container.default.hex}}'
|
||||||
|
gradient_color_3 = '{{colors.secondary.default.hex}}'
|
||||||
|
gradient_color_4 = '{{colors.secondary_container.default.hex}}'
|
||||||
|
gradient_color_5 = '{{colors.tertiary.default.hex}}'
|
||||||
|
gradient_color_6 = '{{colors.tertiary_container.default.hex}}'
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"wallpaper": "{{image}}",
|
||||||
|
"alpha": "100",
|
||||||
|
"colors": {
|
||||||
|
"color0": "{{colors.background.default.hex}}",
|
||||||
|
"color1": "",
|
||||||
|
"color2": "",
|
||||||
|
"color3": "",
|
||||||
|
"color4": "",
|
||||||
|
"color5": "",
|
||||||
|
"color6": "",
|
||||||
|
"color7": "",
|
||||||
|
"color8": "",
|
||||||
|
"color9": "",
|
||||||
|
"color10": "{{colors.primary.default.hex}}",
|
||||||
|
"color11": "",
|
||||||
|
"color12": "",
|
||||||
|
"color13": "{{colors.surface_bright.default.hex}}",
|
||||||
|
"color14": "",
|
||||||
|
"color15": "{{colors.on_surface.default.hex}}"
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
background = {{colors.background.default.hex}}
|
||||||
|
foreground = {{colors.on_surface.default.hex}}
|
||||||
|
cursor-color = {{colors.on_surface.default.hex}}
|
||||||
|
cursor-text = {{colors.on_surface_variant.default.hex}}
|
||||||
|
selection-background = {{colors.secondary_fixed_dim.default.hex}}
|
||||||
|
selection-foreground = {{colors.on_secondary.default.hex}}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
<* for name, value in colors *>
|
||||||
|
$image = {{image}}
|
||||||
|
${{name}} = rgba({{value.default.hex_stripped}}ff)
|
||||||
|
<* endfor *>
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
format = '''
|
||||||
|
[╭─](color1)$username$hostname$directory$git_branch$git_state$git_status$cmd_duration$line_break[╰─](color1)$python$character'''
|
||||||
|
|
||||||
|
palette = 'colors'
|
||||||
|
|
||||||
|
[palettes.colors]
|
||||||
|
mustard = '#af8700' # example
|
||||||
|
color1 = '{{colors.primary_fixed_dim.default.hex}}'
|
||||||
|
color2 = '{{colors.on_primary.default.hex}}'
|
||||||
|
color3 = '{{colors.on_surface_variant.default.hex}}'
|
||||||
|
color4 = '{{colors.surface_container.default.hex}}'
|
||||||
|
color5 = '{{colors.on_primary.default.hex}}'
|
||||||
|
color6 = '{{colors.surface_dim.default.hex}}'
|
||||||
|
color7 = '{{colors.surface.default.hex}}'
|
||||||
|
color8 = '{{colors.primary.default.hex}}'
|
||||||
|
color9 = '{{colors.tertiary.default.hex}}'
|
||||||
|
|
||||||
|
[directory]
|
||||||
|
style = "bold color8"
|
||||||
|
|
||||||
|
[character]
|
||||||
|
success_symbol = "[❯](bold color9)"
|
||||||
|
error_symbol = "[❯](bold red)"
|
||||||
|
vicmd_symbol = "[❮](bold color3)"
|
||||||
|
|
||||||
|
[git_branch]
|
||||||
|
format = "[$branch]($style) "
|
||||||
|
style = "bold color3"
|
||||||
|
|
||||||
|
[git_status]
|
||||||
|
format = "[[(*$conflicted$untracked$modified$staged$renamed$deleted)](color9) ($ahead_behind$stashed)]($style) "
|
||||||
|
style = "bold color9"
|
||||||
|
conflicted = ""
|
||||||
|
untracked = ""
|
||||||
|
modified = ""
|
||||||
|
staged = ""
|
||||||
|
renamed = ""
|
||||||
|
deleted = ""
|
||||||
|
stashed = "≡"
|
||||||
|
|
||||||
|
[git_state]
|
||||||
|
format = '\([$state( $progress_current/$progress_total)]($style)\) '
|
||||||
|
style = "bold color3"
|
||||||
|
|
||||||
|
[cmd_duration]
|
||||||
|
format = "[$duration]($style) "
|
||||||
|
style = "bold mustard"
|
||||||
|
|
||||||
|
[python]
|
||||||
|
format = "[$virtualenv]($style) "
|
||||||
|
style = "bold color3"
|
||||||
|
detect_extensions = []
|
||||||
|
detect_files = []
|
||||||
@@ -0,0 +1,123 @@
|
|||||||
|
/* @import "../../../../../../../.config/omarchy/current/theme/walker.css"; */
|
||||||
|
|
||||||
|
/* Define Matugen Colors */
|
||||||
|
@define-color text {{colors.on_surface.default.hex}};
|
||||||
|
@define-color base {{colors.surface_container.default.hex}};
|
||||||
|
@define-color border {{colors.primary.default.hex}};
|
||||||
|
@define-color selected_text {{colors.primary.default.hex}};
|
||||||
|
@define-color background {{colors.surface.default.hex}};
|
||||||
|
|
||||||
|
* {
|
||||||
|
all: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
* {
|
||||||
|
font-family: monospace;
|
||||||
|
font-size: 18px;
|
||||||
|
color: @text;
|
||||||
|
}
|
||||||
|
|
||||||
|
scrollbar {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.normal-icons {
|
||||||
|
-gtk-icon-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.large-icons {
|
||||||
|
-gtk-icon-size: 32px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.box-wrapper {
|
||||||
|
background: alpha(@base, 0.95);
|
||||||
|
padding: 20px;
|
||||||
|
border: 2px solid @border;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview-box {
|
||||||
|
}
|
||||||
|
|
||||||
|
.box {
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-container {
|
||||||
|
background: @base;
|
||||||
|
padding: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input placeholder {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
.input {
|
||||||
|
}
|
||||||
|
|
||||||
|
.input:focus,
|
||||||
|
.input:active {
|
||||||
|
box-shadow: none;
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.content-container {
|
||||||
|
}
|
||||||
|
|
||||||
|
.placeholder {
|
||||||
|
}
|
||||||
|
|
||||||
|
.scroll {
|
||||||
|
}
|
||||||
|
|
||||||
|
.list {
|
||||||
|
}
|
||||||
|
|
||||||
|
child,
|
||||||
|
child > * {
|
||||||
|
}
|
||||||
|
|
||||||
|
child:hover .item-box {
|
||||||
|
}
|
||||||
|
|
||||||
|
child:selected .item-box {
|
||||||
|
}
|
||||||
|
|
||||||
|
child:selected .item-box * {
|
||||||
|
color: @selected_text;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-box {
|
||||||
|
padding-left: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-text-box {
|
||||||
|
all: unset;
|
||||||
|
padding: 14px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-text {
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-subtext {
|
||||||
|
font-size: 0px;
|
||||||
|
min-height: 0px;
|
||||||
|
margin: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.item-image {
|
||||||
|
margin-right: 14px;
|
||||||
|
-gtk-icon-transform: scale(0.9);
|
||||||
|
}
|
||||||
|
|
||||||
|
.current {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.keybind-hints {
|
||||||
|
background: @background;
|
||||||
|
padding: 10px;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.preview {
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
/*
|
||||||
|
* Css Colors
|
||||||
|
* Generated with Matugen
|
||||||
|
*/
|
||||||
|
<* for name, value in colors *>
|
||||||
|
@define-color {{name}} {{value.default.hex}};
|
||||||
|
<* endfor *>
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
inputs,
|
||||||
|
system,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
home.packages = [
|
||||||
|
inputs.nixovim.packages.${pkgs.system}.full
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
myConfig,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
inputs.stylix.homeModules.stylix
|
||||||
|
];
|
||||||
|
stylix = {
|
||||||
|
autoEnable = false;
|
||||||
|
targets = {
|
||||||
|
firefox = {
|
||||||
|
enable = false;
|
||||||
|
colorTheme.enable = true;
|
||||||
|
profileNames = [
|
||||||
|
"hakase"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
hyprpaper.enable = true;
|
||||||
|
gtk.enable = true;
|
||||||
|
};
|
||||||
|
enable = true;
|
||||||
|
# autoEnable = false;
|
||||||
|
image = ../../assets/Wallpapers/${myConfig.hyprland.wallpaper};
|
||||||
|
polarity = "dark";
|
||||||
|
# base16Scheme = lib.mkDefault {
|
||||||
|
# generator = "vibrant";
|
||||||
|
# };
|
||||||
|
iconTheme = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs.papirus-icon-theme; # The package to install
|
||||||
|
dark = "Papirus-Dark"; # The theme name for dark mode
|
||||||
|
light = "Papirus-Light"; # The theme name for light mode
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
#
|
||||||
|
hakase-screensaver-launch = pkgs.writeShellScriptBin "hakase-cmd-screensaver" ''
|
||||||
|
|
||||||
|
'';
|
||||||
|
in {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
hakase-screensaver-launch
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
terminaltexteffects
|
||||||
|
];
|
||||||
|
home.file.".config/hakase/branding/screensaver.txt" = {
|
||||||
|
source = ../../assets/branding.txt;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,573 @@
|
|||||||
|
{
|
||||||
|
inputs,
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
# ./style.nix
|
||||||
|
./layout.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.walker = {
|
||||||
|
enable = true;
|
||||||
|
runAsService = true;
|
||||||
|
package = inputs.walker.packages.${pkgs.system}.default;
|
||||||
|
|
||||||
|
# CSS Implementation using Stylix Colors
|
||||||
|
config = {
|
||||||
|
# General Settings
|
||||||
|
force_keyboard_focus = true;
|
||||||
|
close_when_open = true;
|
||||||
|
click_to_close = true;
|
||||||
|
single_click_activation = true;
|
||||||
|
selection_wrap = true;
|
||||||
|
global_argument_delimiter = "#";
|
||||||
|
exact_search_prefix = "'";
|
||||||
|
# theme = "default";
|
||||||
|
disable_mouse = false;
|
||||||
|
debug = false;
|
||||||
|
page_jump_items = 10;
|
||||||
|
hide_quick_activation = true;
|
||||||
|
hide_action_hints = true;
|
||||||
|
hide_action_hints_dmenu = true;
|
||||||
|
hide_return_action = false;
|
||||||
|
resume_last_query = false;
|
||||||
|
actions_as_menu = false;
|
||||||
|
|
||||||
|
# Shell positioning
|
||||||
|
shell = {
|
||||||
|
anchor_top = true;
|
||||||
|
anchor_bottom = true;
|
||||||
|
anchor_left = true;
|
||||||
|
anchor_right = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Column config
|
||||||
|
columns.symbols = 3;
|
||||||
|
|
||||||
|
# Placeholders
|
||||||
|
placeholders.default = {
|
||||||
|
input = "Search";
|
||||||
|
list = "No Results";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Keybinds
|
||||||
|
keybinds = {
|
||||||
|
close = ["Escape"];
|
||||||
|
next = ["Down"];
|
||||||
|
previous = ["Up"];
|
||||||
|
left = ["Left"];
|
||||||
|
right = ["Right"];
|
||||||
|
down = ["Down"];
|
||||||
|
up = ["Up"];
|
||||||
|
toggle_exact = ["ctrl e"];
|
||||||
|
resume_last_query = ["ctrl r"];
|
||||||
|
quick_activate = ["F1" "F2" "F3" "F4"];
|
||||||
|
page_down = ["Page_Down"];
|
||||||
|
page_up = ["Page_Up"];
|
||||||
|
show_actions = ["alt j"];
|
||||||
|
};
|
||||||
|
|
||||||
|
# Providers General
|
||||||
|
providers = {
|
||||||
|
default = ["desktopapplications" "calc" "websearch"];
|
||||||
|
empty = ["desktopapplications"];
|
||||||
|
ignore_preview = [];
|
||||||
|
max_results = 50;
|
||||||
|
|
||||||
|
argument_delimiter.runner = " ";
|
||||||
|
|
||||||
|
clipboard.time_format = "%d.%m. - %H:%M";
|
||||||
|
|
||||||
|
# Provider Prefixes
|
||||||
|
prefixes = [
|
||||||
|
{
|
||||||
|
prefix = ";";
|
||||||
|
provider = "providerlist";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
prefix = ">";
|
||||||
|
provider = "runner";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
prefix = "/";
|
||||||
|
provider = "files";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
prefix = ".";
|
||||||
|
provider = "symbols";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
prefix = "!";
|
||||||
|
provider = "todo";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
prefix = "%";
|
||||||
|
provider = "bookmarks";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
prefix = "=";
|
||||||
|
provider = "calc";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
prefix = "@";
|
||||||
|
provider = "websearch";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
prefix = ":";
|
||||||
|
provider = "clipboard";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
prefix = "$";
|
||||||
|
provider = "windows";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
# Actions
|
||||||
|
actions = {
|
||||||
|
fallback = [
|
||||||
|
{
|
||||||
|
action = "menus:open";
|
||||||
|
label = "open";
|
||||||
|
after = "Nothing";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "menus:default";
|
||||||
|
label = "run";
|
||||||
|
after = "Close";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "menus:parent";
|
||||||
|
label = "back";
|
||||||
|
bind = "Escape";
|
||||||
|
after = "Nothing";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "erase_history";
|
||||||
|
label = "clear hist";
|
||||||
|
bind = "ctrl h";
|
||||||
|
after = "AsyncReload";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
dmenu = [
|
||||||
|
{
|
||||||
|
action = "select";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
providerlist = [
|
||||||
|
{
|
||||||
|
action = "activate";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
after = "ClearReload";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
bluetooth = [
|
||||||
|
{
|
||||||
|
action = "find";
|
||||||
|
bind = "ctrl f";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "remove";
|
||||||
|
bind = "ctrl d";
|
||||||
|
after = "AsyncReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "trust";
|
||||||
|
bind = "ctrl t";
|
||||||
|
after = "AsyncReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "untrust";
|
||||||
|
bind = "ctrl t";
|
||||||
|
after = "AsyncReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "pair";
|
||||||
|
bind = "Return";
|
||||||
|
after = "AsyncReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "connect";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
after = "AsyncReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "disconnect";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
after = "AsyncReload";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
archlinuxpkgs = [
|
||||||
|
{
|
||||||
|
action = "install";
|
||||||
|
bind = "Return";
|
||||||
|
default = true;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "remove";
|
||||||
|
bind = "Return";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "show_all";
|
||||||
|
label = "show all";
|
||||||
|
bind = "ctrl i";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "refresh";
|
||||||
|
label = "refresh";
|
||||||
|
bind = "ctrl r";
|
||||||
|
after = "AsyncReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "visit_url";
|
||||||
|
label = "open URL";
|
||||||
|
bind = "ctrl o";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "show_installed";
|
||||||
|
label = "show installed";
|
||||||
|
bind = "ctrl i";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
calc = [
|
||||||
|
{
|
||||||
|
action = "copy";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "delete";
|
||||||
|
bind = "ctrl d";
|
||||||
|
after = "AsyncReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "save";
|
||||||
|
bind = "ctrl s";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
websearch = [
|
||||||
|
{
|
||||||
|
action = "search";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "open_url";
|
||||||
|
label = "open url";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
desktopapplications = [
|
||||||
|
{
|
||||||
|
action = "start";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "start:keep";
|
||||||
|
label = "open+next";
|
||||||
|
bind = "shift Return";
|
||||||
|
after = "KeepOpen";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "new_instance";
|
||||||
|
label = "new instance";
|
||||||
|
bind = "ctrl Return";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "new_instance:keep";
|
||||||
|
label = "new+next";
|
||||||
|
bind = "ctrl alt Return";
|
||||||
|
after = "KeepOpen";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "pin";
|
||||||
|
bind = "ctrl p";
|
||||||
|
after = "AsyncReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "unpin";
|
||||||
|
bind = "ctrl p";
|
||||||
|
after = "AsyncReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "pinup";
|
||||||
|
bind = "ctrl n";
|
||||||
|
after = "AsyncReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "pindown";
|
||||||
|
bind = "ctrl m";
|
||||||
|
after = "AsyncReload";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
files = [
|
||||||
|
{
|
||||||
|
action = "open";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "opendir";
|
||||||
|
label = "open dir";
|
||||||
|
bind = "ctrl Return";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "copypath";
|
||||||
|
label = "copy path";
|
||||||
|
bind = "ctrl shift c";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "copyfile";
|
||||||
|
label = "copy file";
|
||||||
|
bind = "ctrl c";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "localsend";
|
||||||
|
label = "localsend";
|
||||||
|
bind = "ctrl l";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "refresh_index";
|
||||||
|
label = "reload";
|
||||||
|
bind = "ctrl r";
|
||||||
|
after = "AsyncReload";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
# Note: "1password" key starts with a digit, must be quoted in Nix
|
||||||
|
"1password" = [
|
||||||
|
{
|
||||||
|
action = "copy_password";
|
||||||
|
label = "copy password";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "copy_username";
|
||||||
|
label = "copy username";
|
||||||
|
bind = "shift Return";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "copy_2fa";
|
||||||
|
label = "copy 2fa";
|
||||||
|
bind = "ctrl Return";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
todo = [
|
||||||
|
{
|
||||||
|
action = "save";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "save_next";
|
||||||
|
label = "save & new";
|
||||||
|
bind = "shift Return";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "delete";
|
||||||
|
bind = "ctrl d";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "active";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
after = "Nothing";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "inactive";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
after = "Nothing";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "done";
|
||||||
|
bind = "ctrl f";
|
||||||
|
after = "Nothing";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "change_category";
|
||||||
|
bind = "ctrl y";
|
||||||
|
label = "change category";
|
||||||
|
after = "Nothing";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "clear";
|
||||||
|
bind = "ctrl x";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "create";
|
||||||
|
bind = "ctrl a";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "search";
|
||||||
|
bind = "ctrl a";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
runner = [
|
||||||
|
{
|
||||||
|
action = "run";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "runterminal";
|
||||||
|
label = "run in terminal";
|
||||||
|
bind = "shift Return";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
symbols = [
|
||||||
|
{
|
||||||
|
action = "copy";
|
||||||
|
label = "select";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
unicode = [
|
||||||
|
{
|
||||||
|
action = "copy";
|
||||||
|
label = "select";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
nirisessions = [
|
||||||
|
{
|
||||||
|
action = "start";
|
||||||
|
label = "start";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "start_new";
|
||||||
|
label = "start blank";
|
||||||
|
bind = "ctrl Return";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
clipboard = [
|
||||||
|
{
|
||||||
|
action = "copy";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "remove";
|
||||||
|
bind = "ctrl d";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "remove_all";
|
||||||
|
label = "clear";
|
||||||
|
bind = "ctrl shift d";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "show_images_only";
|
||||||
|
label = "only images";
|
||||||
|
bind = "ctrl i";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "show_text_only";
|
||||||
|
label = "only text";
|
||||||
|
bind = "ctrl i";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "show_combined";
|
||||||
|
label = "show all";
|
||||||
|
bind = "ctrl i";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "pause";
|
||||||
|
bind = "ctrl p";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "unpause";
|
||||||
|
bind = "ctrl p";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "edit";
|
||||||
|
bind = "ctrl o";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "localsend";
|
||||||
|
bind = "ctrl l";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
bookmarks = [
|
||||||
|
{
|
||||||
|
action = "save";
|
||||||
|
bind = "Return";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "open";
|
||||||
|
default = true;
|
||||||
|
bind = "Return";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "delete";
|
||||||
|
bind = "ctrl d";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "change_category";
|
||||||
|
label = "Change category";
|
||||||
|
bind = "ctrl y";
|
||||||
|
after = "Nothing";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "change_browser";
|
||||||
|
label = "Change browser";
|
||||||
|
bind = "ctrl b";
|
||||||
|
after = "Nothing";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "import";
|
||||||
|
label = "Import";
|
||||||
|
bind = "ctrl i";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "create";
|
||||||
|
bind = "ctrl a";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
action = "search";
|
||||||
|
bind = "ctrl a";
|
||||||
|
after = "AsyncClearReload";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
home.file.".config/elephant/websearch.toml".text = ''
|
||||||
|
[[entries]]
|
||||||
|
name = "DuckDuckGo"
|
||||||
|
url = "https://duckduckgo.com/?q=%TERM%"
|
||||||
|
default = true
|
||||||
|
'';
|
||||||
|
}
|
||||||
@@ -0,0 +1,160 @@
|
|||||||
|
{
|
||||||
|
home.file.".config/walker/themes/nixos/layout.xml".text = ''
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<interface>
|
||||||
|
<requires lib="gtk" version="4.0"></requires>
|
||||||
|
<object class="GtkWindow" id="Window">
|
||||||
|
<style>
|
||||||
|
<class name="window"></class>
|
||||||
|
</style>
|
||||||
|
<property name="resizable">true</property>
|
||||||
|
<property name="title">Walker</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="BoxWrapper">
|
||||||
|
<style>
|
||||||
|
<class name="box-wrapper"></class>
|
||||||
|
</style>
|
||||||
|
<property name="width-request">644</property>
|
||||||
|
<property name="overflow">hidden</property>
|
||||||
|
<property name="orientation">horizontal</property>
|
||||||
|
<property name="valign">center</property>
|
||||||
|
<property name="halign">center</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="Box">
|
||||||
|
<style>
|
||||||
|
<class name="box"></class>
|
||||||
|
</style>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<property name="hexpand-set">true</property>
|
||||||
|
<property name="hexpand">true</property>
|
||||||
|
<property name="spacing">10</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="SearchContainer">
|
||||||
|
<style>
|
||||||
|
<class name="search-container"></class>
|
||||||
|
</style>
|
||||||
|
<property name="overflow">hidden</property>
|
||||||
|
<property name="orientation">horizontal</property>
|
||||||
|
<property name="halign">fill</property>
|
||||||
|
<property name="hexpand-set">true</property>
|
||||||
|
<property name="hexpand">true</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkEntry" id="Input">
|
||||||
|
<style>
|
||||||
|
<class name="input"></class>
|
||||||
|
</style>
|
||||||
|
<property name="halign">fill</property>
|
||||||
|
<property name="hexpand-set">true</property>
|
||||||
|
<property name="hexpand">true</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="ContentContainer">
|
||||||
|
<style>
|
||||||
|
<class name="content-container"></class>
|
||||||
|
</style>
|
||||||
|
<property name="orientation">horizontal</property>
|
||||||
|
<property name="spacing">10</property>
|
||||||
|
<property name="vexpand">true</property>
|
||||||
|
<property name="vexpand-set">true</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="ElephantHint">
|
||||||
|
<style>
|
||||||
|
<class name="elephant-hint"></class>
|
||||||
|
</style>
|
||||||
|
<property name="hexpand">true</property>
|
||||||
|
<property name="height-request">100</property>
|
||||||
|
<property name="label">Waiting for elephant...</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="Placeholder">
|
||||||
|
<style>
|
||||||
|
<class name="placeholder"></class>
|
||||||
|
</style>
|
||||||
|
<property name="label">No Results</property>
|
||||||
|
<property name="yalign">0.0</property>
|
||||||
|
<property name="hexpand">true</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkScrolledWindow" id="Scroll">
|
||||||
|
<style>
|
||||||
|
<class name="scroll"></class>
|
||||||
|
</style>
|
||||||
|
<property name="hexpand">true</property>
|
||||||
|
<property name="can_focus">false</property>
|
||||||
|
<property name="overlay-scrolling">true</property>
|
||||||
|
<property name="max-content-width">600</property>
|
||||||
|
<property name="max-content-height">300</property>
|
||||||
|
<property name="min-content-height">0</property>
|
||||||
|
<property name="propagate-natural-height">true</property>
|
||||||
|
<property name="propagate-natural-width">true</property>
|
||||||
|
<property name="hscrollbar-policy">automatic</property>
|
||||||
|
<property name="vscrollbar-policy">automatic</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkGridView" id="List">
|
||||||
|
<style>
|
||||||
|
<class name="list"></class>
|
||||||
|
</style>
|
||||||
|
<property name="max_columns">1</property>
|
||||||
|
<property name="can_focus">false</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="Preview">
|
||||||
|
<style>
|
||||||
|
<class name="preview"></class>
|
||||||
|
</style>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="Keybinds">
|
||||||
|
<property name="hexpand">true</property>
|
||||||
|
<property name="margin-top">10</property>
|
||||||
|
<style>
|
||||||
|
<class name="keybinds"></class>
|
||||||
|
</style>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="GlobalKeybinds">
|
||||||
|
<property name="spacing">10</property>
|
||||||
|
<style>
|
||||||
|
<class name="global-keybinds"></class>
|
||||||
|
</style>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="ItemKeybinds">
|
||||||
|
<property name="hexpand">true</property>
|
||||||
|
<property name="halign">end</property>
|
||||||
|
<property name="spacing">10</property>
|
||||||
|
<style>
|
||||||
|
<class name="item-keybinds"></class>
|
||||||
|
</style>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="Error">
|
||||||
|
<style>
|
||||||
|
<class name="error"></class>
|
||||||
|
</style>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<property name="visible">false</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
||||||
|
'';
|
||||||
|
}
|
||||||
@@ -0,0 +1,210 @@
|
|||||||
|
{config, ...}: {
|
||||||
|
# themes."nixos".style = ''
|
||||||
|
# @define-color window_bg_color #1f1f28;
|
||||||
|
# @define-color accent_bg_color #54546d;
|
||||||
|
# @define-color theme_fg_color #f2ecbc;
|
||||||
|
# @define-color error_bg_color #C34043;
|
||||||
|
# @define-color error_fg_color #DCD7BA;
|
||||||
|
#
|
||||||
|
# * {
|
||||||
|
# all: unset;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# popover {
|
||||||
|
# background: lighter(@window_bg_color);
|
||||||
|
# border: 1px solid darker(@accent_bg_color);
|
||||||
|
# border-radius: 18px;
|
||||||
|
# padding: 10px;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .normal-icons {
|
||||||
|
# -gtk-icon-size: 16px;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .large-icons {
|
||||||
|
# -gtk-icon-size: 32px;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# scrollbar {
|
||||||
|
# opacity: 0;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .box-wrapper {
|
||||||
|
# box-shadow:
|
||||||
|
# 0 19px 38px rgba(0, 0, 0, 0.3),
|
||||||
|
# 0 15px 12px rgba(0, 0, 0, 0.22);
|
||||||
|
# background: @window_bg_color;
|
||||||
|
# padding: 20px;
|
||||||
|
# border-radius: 20px;
|
||||||
|
# border: 1px solid darker(@accent_bg_color);
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .preview-box,
|
||||||
|
# .elephant-hint,
|
||||||
|
# .placeholder {
|
||||||
|
# color: @theme_fg_color;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .box {
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .search-container {
|
||||||
|
# border-radius: 10px;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .input placeholder {
|
||||||
|
# opacity: 0.5;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .input selection {
|
||||||
|
# background: lighter(lighter(lighter(@window_bg_color)));
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .input {
|
||||||
|
# caret-color: @theme_fg_color;
|
||||||
|
# background: lighter(@window_bg_color);
|
||||||
|
# padding: 10px;
|
||||||
|
# color: @theme_fg_color;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .input:focus,
|
||||||
|
# .input:active {
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .content-container {
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .placeholder {
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .scroll {
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .list {
|
||||||
|
# color: @theme_fg_color;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# child {
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .item-box {
|
||||||
|
# border-radius: 10px;
|
||||||
|
# padding: 10px;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .item-quick-activation {
|
||||||
|
# background: alpha(@accent_bg_color, 0.25);
|
||||||
|
# border-radius: 5px;
|
||||||
|
# padding: 10px;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# /* child:hover .item-box, */
|
||||||
|
# child:selected .item-box {
|
||||||
|
# background: alpha(@accent_bg_color, 0.25);
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .item-text-box {
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .item-subtext {
|
||||||
|
# font-size: 12px;
|
||||||
|
# opacity: 0.5;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .providerlist .item-subtext {
|
||||||
|
# font-size: unset;
|
||||||
|
# opacity: 0.75;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .item-image-text {
|
||||||
|
# font-size: 28px;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .preview {
|
||||||
|
# border: 1px solid alpha(@accent_bg_color, 0.25);
|
||||||
|
# /* padding: 10px; */
|
||||||
|
# border-radius: 10px;
|
||||||
|
# color: @theme_fg_color;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .calc .item-text {
|
||||||
|
# font-size: 24px;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .calc .item-subtext {
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .symbols .item-image {
|
||||||
|
# font-size: 24px;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .todo.done .item-text-box {
|
||||||
|
# opacity: 0.25;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .todo.urgent {
|
||||||
|
# font-size: 24px;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .todo.active {
|
||||||
|
# font-weight: bold;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .bluetooth.disconnected {
|
||||||
|
# opacity: 0.5;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .preview .large-icons {
|
||||||
|
# -gtk-icon-size: 64px;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .keybinds {
|
||||||
|
# padding-top: 10px;
|
||||||
|
# border-top: 1px solid lighter(@window_bg_color);
|
||||||
|
# font-size: 12px;
|
||||||
|
# color: @theme_fg_color;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .global-keybinds {
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .item-keybinds {
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .keybind {
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .keybind-button {
|
||||||
|
# opacity: 0.5;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .keybind-button:hover {
|
||||||
|
# opacity: 0.75;
|
||||||
|
# cursor: pointer;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .keybind-bind {
|
||||||
|
# text-transform: lowercase;
|
||||||
|
# opacity: 0.35;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .keybind-label {
|
||||||
|
# padding: 2px 4px;
|
||||||
|
# border-radius: 4px;
|
||||||
|
# border: 1px solid @theme_fg_color;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .error {
|
||||||
|
# padding: 10px;
|
||||||
|
# background: @error_bg_color;
|
||||||
|
# color: @error_fg_color;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# :not(.calc).current {
|
||||||
|
# font-style: italic;
|
||||||
|
# }
|
||||||
|
#
|
||||||
|
# .preview-content.archlinuxpkgs {
|
||||||
|
# font-family: monospace;
|
||||||
|
# } '';
|
||||||
|
}
|
||||||
@@ -0,0 +1,169 @@
|
|||||||
|
{pkgs, ...}: let
|
||||||
|
# 1. The Brain: Logic to find a window or launch a new one
|
||||||
|
hakase-launch-or-focus = pkgs.writeShellScriptBin "hakase-launch-or-focus" ''
|
||||||
|
if (($# == 0)); then
|
||||||
|
echo "Usage: hakase-launch-or-focus [window-pattern] [launch-command]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
WINDOW_PATTERN="$1"
|
||||||
|
# Escaped Nix interpolation for shell default value logic
|
||||||
|
LAUNCH_COMMAND="''${2:-"uwsm-app -- $WINDOW_PATTERN"}"
|
||||||
|
|
||||||
|
# Locate window address via hyprctl and jq
|
||||||
|
WINDOW_ADDRESS=$(${pkgs.hyprland}/bin/hyprctl clients -j | ${pkgs.jq}/bin/jq -r --arg p "$WINDOW_PATTERN" \
|
||||||
|
'.[] | select((.class | test("\\b" + $p + "\\b"; "i")) or (.title | test("\\b" + $p + "\\b"; "i"))) | .address' | head -n1)
|
||||||
|
|
||||||
|
if [[ -n $WINDOW_ADDRESS ]]; then
|
||||||
|
# If found, focus the existing window
|
||||||
|
${pkgs.hyprland}/bin/hyprctl dispatch focuswindow "address:$WINDOW_ADDRESS"
|
||||||
|
else
|
||||||
|
# If not found, execute the launch command
|
||||||
|
eval exec setsid $LAUNCH_COMMAND
|
||||||
|
fi
|
||||||
|
'';
|
||||||
|
|
||||||
|
hakase-launch-tui = pkgs.writeShellScriptBin "hakase-launch-tui" ''
|
||||||
|
APP_NAME=$(basename "$1")
|
||||||
|
# Using org.hakase prefix so the focus script can find it via class name
|
||||||
|
exec setsid uwsm-app -- xdg-terminal-exec --app-id=org.hakase."$APP_NAME" -e "$@"
|
||||||
|
'';
|
||||||
|
|
||||||
|
hakase-focus-wrapper = pkgs.writeShellScriptBin "hakase-focus-wrapper" ''
|
||||||
|
APP_NAME=$(basename "$1")
|
||||||
|
WINDOW_PATTERN="org.hakase.$APP_NAME"
|
||||||
|
LAUNCH_CMD="hakase-launch-tui $*"
|
||||||
|
|
||||||
|
exec hakase-launch-or-focus "$WINDOW_PATTERN" "$LAUNCH_CMD"
|
||||||
|
'';
|
||||||
|
|
||||||
|
hakase-launch-wifi = pkgs.writeShellScriptBin "hakase-launch-wifi" ''
|
||||||
|
# Unblock the WiFi radio (requires appropriate user groups/permissions)
|
||||||
|
# ${pkgs.util-linux}/bin/rfkill unblock wifi
|
||||||
|
|
||||||
|
# Use the focus wrapper to launch or switch to Impala
|
||||||
|
exec hakase-focus-wrapper impala
|
||||||
|
'';
|
||||||
|
|
||||||
|
hakase-launch-bluetooth =
|
||||||
|
pkgs.writeShellScriptBin "hakase-launch-bluetooth"
|
||||||
|
''
|
||||||
|
# ${pkgs.util-linux}/bin/rfkill unblock wifi
|
||||||
|
exec hakase-focus-wrapper bluetui
|
||||||
|
|
||||||
|
'';
|
||||||
|
hakase-launch-popup = pkgs.writeShellScriptBin "hakase-launch-popup" ''
|
||||||
|
if (($# < 3)); then
|
||||||
|
echo "Usage: hakase-launch-popup [width] [height] [command...]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# --- ARGS & CONFIG ---
|
||||||
|
WIN_WIDTH="$1"
|
||||||
|
WIN_HEIGHT="$2"
|
||||||
|
shift 2
|
||||||
|
|
||||||
|
MARGIN=10
|
||||||
|
BAR_HEIGHT=40
|
||||||
|
# ---------------------
|
||||||
|
|
||||||
|
CMD_NAME=$(basename "$1")
|
||||||
|
TARGET_CLASS="org.hakase.popup.$CMD_NAME"
|
||||||
|
|
||||||
|
# 1. SINGLETON LOGIC: Check for ANY existing hakase popup
|
||||||
|
# We look for any client with a class starting with "org.hakase.popup."
|
||||||
|
EXISTING_JSON=$(${pkgs.hyprland}/bin/hyprctl clients -j | ${pkgs.jq}/bin/jq -r '.[] | select(.class | startswith("org.hakase.popup."))')
|
||||||
|
|
||||||
|
if [[ -n "$EXISTING_JSON" ]]; then
|
||||||
|
OLD_ADDR=$(echo "$EXISTING_JSON" | ${pkgs.jq}/bin/jq -r '.address')
|
||||||
|
OLD_CLASS=$(echo "$EXISTING_JSON" | ${pkgs.jq}/bin/jq -r '.class')
|
||||||
|
|
||||||
|
# Close the existing popup
|
||||||
|
${pkgs.hyprland}/bin/hyprctl dispatch closewindow "address:$OLD_ADDR"
|
||||||
|
|
||||||
|
# If the existing popup was the SAME one we are trying to launch, we are done (Toggle Off behavior)
|
||||||
|
if [[ "$OLD_CLASS" == "$TARGET_CLASS" ]]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If it was a different popup, wait a tiny bit for Hyprland to process the close
|
||||||
|
# This prevents the new window from "merging" with the closing animation of the old one
|
||||||
|
sleep 0.15
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 2. Calculate Geometry (Standard logic)
|
||||||
|
MONITOR_INFO=$(${pkgs.hyprland}/bin/hyprctl monitors -j | ${pkgs.jq}/bin/jq '.[] | select(.focused == true)')
|
||||||
|
MON_X=$(echo "$MONITOR_INFO" | ${pkgs.jq}/bin/jq '.x')
|
||||||
|
MON_Y=$(echo "$MONITOR_INFO" | ${pkgs.jq}/bin/jq '.y')
|
||||||
|
MON_WIDTH=$(echo "$MONITOR_INFO" | ${pkgs.jq}/bin/jq '.width')
|
||||||
|
|
||||||
|
TARGET_X=$((MON_X + MON_WIDTH - WIN_WIDTH - MARGIN))
|
||||||
|
TARGET_Y=$((MON_Y + BAR_HEIGHT + MARGIN))
|
||||||
|
|
||||||
|
# 3. Launch with Rules
|
||||||
|
RULE="[float;pin;size $WIN_WIDTH $WIN_HEIGHT;move $TARGET_X $TARGET_Y]"
|
||||||
|
${pkgs.hyprland}/bin/hyprctl dispatch exec "$RULE xdg-terminal-exec --app-id=$TARGET_CLASS -e $@"
|
||||||
|
|
||||||
|
# 4. Background Listener (Close on Blur)
|
||||||
|
(
|
||||||
|
TIMEOUT=0
|
||||||
|
WINDOW_ADDR=""
|
||||||
|
while [[ -z "$WINDOW_ADDR" && $TIMEOUT -lt 20 ]]; do
|
||||||
|
sleep 0.1
|
||||||
|
WINDOW_ADDR=$(${pkgs.hyprland}/bin/hyprctl clients -j | ${pkgs.jq}/bin/jq -r --arg c "$TARGET_CLASS" '.[] | select(.class == $c) | .address')
|
||||||
|
((TIMEOUT++))
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -n "$WINDOW_ADDR" ]]; then
|
||||||
|
${pkgs.socat}/bin/socat -U - UNIX-CONNECT:"$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock" | while read -r line; do
|
||||||
|
if [[ "$line" == "activewindow>>"* ]]; then
|
||||||
|
NEW_FOCUS="0x$(echo "$line" | cut -d '>' -f3 | cut -d ',' -f1)"
|
||||||
|
# If focus is lost to another window, close this popup
|
||||||
|
if [[ "$WINDOW_ADDR" != "$NEW_FOCUS" ]]; then
|
||||||
|
${pkgs.hyprland}/bin/hyprctl dispatch closewindow "address:$WINDOW_ADDR"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
) &
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
'';
|
||||||
|
|
||||||
|
# 1. WiFi (Impala) - Requires a larger view
|
||||||
|
hakase-popup-wifi = pkgs.writeShellScriptBin "hakase-popup-wifi" ''
|
||||||
|
exec hakase-launch-popup 800 500 impala
|
||||||
|
'';
|
||||||
|
|
||||||
|
# 2. Bluetooth (Bluetui) - Fits your specific test size
|
||||||
|
hakase-popup-bluetooth = pkgs.writeShellScriptBin "hakase-popup-bluetooth" ''
|
||||||
|
exec hakase-launch-popup 600 500 bluetui
|
||||||
|
'';
|
||||||
|
|
||||||
|
# 3. Volume (Wiremix) - Can be smaller
|
||||||
|
hakase-popup-volume = pkgs.writeShellScriptBin "hakase-popup-volume" ''
|
||||||
|
exec hakase-launch-popup 800 300 wiremix
|
||||||
|
'';
|
||||||
|
in {
|
||||||
|
home.packages = [
|
||||||
|
pkgs.jq
|
||||||
|
pkgs.socat # Required for the socket listener
|
||||||
|
pkgs.util-linux
|
||||||
|
pkgs.bluetui
|
||||||
|
pkgs.impala
|
||||||
|
pkgs.wiremix
|
||||||
|
pkgs.pamixer
|
||||||
|
|
||||||
|
hakase-launch-popup
|
||||||
|
hakase-popup-wifi
|
||||||
|
hakase-popup-bluetooth
|
||||||
|
hakase-popup-volume
|
||||||
|
|
||||||
|
hakase-launch-or-focus
|
||||||
|
hakase-launch-tui
|
||||||
|
hakase-focus-wrapper
|
||||||
|
hakase-launch-wifi
|
||||||
|
hakase-launch-bluetooth
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,171 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
myConfig,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
./style.nix
|
||||||
|
];
|
||||||
|
programs.waybar = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
mainBar = {
|
||||||
|
reload_style_on_change = true;
|
||||||
|
layer = "top";
|
||||||
|
position = "top";
|
||||||
|
spacing = 0;
|
||||||
|
height = 26;
|
||||||
|
|
||||||
|
modules-left = ["custom/omarchy" "hyprland/workspaces"];
|
||||||
|
modules-center = ["clock" "custom/update" "custom/screenrecording-indicator"];
|
||||||
|
modules-right = [
|
||||||
|
"group/tray-expander"
|
||||||
|
"bluetooth"
|
||||||
|
"network"
|
||||||
|
"pulseaudio"
|
||||||
|
"cpu"
|
||||||
|
"battery"
|
||||||
|
];
|
||||||
|
|
||||||
|
"hyprland/workspaces" = {
|
||||||
|
on-click = "activate";
|
||||||
|
format = "{icon}";
|
||||||
|
format-icons = {
|
||||||
|
"default" = "";
|
||||||
|
"1" = "1";
|
||||||
|
"2" = "2";
|
||||||
|
"3" = "3";
|
||||||
|
"4" = "4";
|
||||||
|
"5" = "5";
|
||||||
|
"6" = "6";
|
||||||
|
"7" = "7";
|
||||||
|
"8" = "8";
|
||||||
|
"9" = "9";
|
||||||
|
"10" = "0";
|
||||||
|
"active" = "";
|
||||||
|
};
|
||||||
|
persistent-workspaces = {
|
||||||
|
"1" = [];
|
||||||
|
"2" = [];
|
||||||
|
"3" = [];
|
||||||
|
"4" = [];
|
||||||
|
"5" = [];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
"custom/omarchy" = {
|
||||||
|
format = "";
|
||||||
|
on-click = "omarchy-menu";
|
||||||
|
on-click-right = "xdg-terminal-exec";
|
||||||
|
tooltip-format = "Omarchy Menu\n\nSuper + Alt + Space";
|
||||||
|
};
|
||||||
|
|
||||||
|
# "custom/update" = {
|
||||||
|
# format = "";
|
||||||
|
# exec = "omarchy-update-available";
|
||||||
|
# on-click = "omarchy-launch-floating-terminal-with-presentation omarchy-update";
|
||||||
|
# tooltip-format = "Omarchy update available";
|
||||||
|
# signal = 7;
|
||||||
|
# interval = 21600;
|
||||||
|
# };
|
||||||
|
|
||||||
|
"cpu" = {
|
||||||
|
interval = 5;
|
||||||
|
format = "";
|
||||||
|
on-click = "hakase-focus-wrapper btop";
|
||||||
|
on-click-right = "xdg-terminal-exec";
|
||||||
|
};
|
||||||
|
|
||||||
|
"clock" = {
|
||||||
|
format = "{:%H:%M %a %b %d}";
|
||||||
|
format-alt = "{:L%d %B W%V %Y}";
|
||||||
|
tooltip = false;
|
||||||
|
on-click-right = "omarchy-launch-floating-terminal-with-presentation omarchy-tz-select";
|
||||||
|
};
|
||||||
|
|
||||||
|
"network" = {
|
||||||
|
format-icons = ["" "" "" "" ""];
|
||||||
|
format = "{icon}";
|
||||||
|
format-wifi = "{icon}";
|
||||||
|
format-ethernet = "";
|
||||||
|
format-disconnected = "";
|
||||||
|
tooltip-format-wifi = "{essid} ({frequency} GHz)\n⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}";
|
||||||
|
tooltip-format-ethernet = "⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}";
|
||||||
|
tooltip-format-disconnected = "Disconnected";
|
||||||
|
interval = 3;
|
||||||
|
spacing = 1;
|
||||||
|
on-click = "hakase-popup-wifi";
|
||||||
|
};
|
||||||
|
|
||||||
|
"battery" = {
|
||||||
|
format = "{capacity}% {icon}";
|
||||||
|
format-discharging = "{icon}";
|
||||||
|
format-charging = "{icon}";
|
||||||
|
format-plugged = "";
|
||||||
|
format-icons = {
|
||||||
|
charging = ["" "" "" "" "" "" "" "" "" ""];
|
||||||
|
default = ["" "" "" "" "" "" "" "" "" ""];
|
||||||
|
};
|
||||||
|
format-full = "";
|
||||||
|
tooltip-format-discharging = "{power:>1.0f}W↓ {capacity}%";
|
||||||
|
tooltip-format-charging = "{power:>1.0f}W↑ {capacity}%";
|
||||||
|
interval = 5;
|
||||||
|
on-click = "omarchy-menu power";
|
||||||
|
states = {
|
||||||
|
warning = 20;
|
||||||
|
critical = 10;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
"bluetooth" = {
|
||||||
|
format = "";
|
||||||
|
format-disabled = "";
|
||||||
|
format-connected = "";
|
||||||
|
format-no-controller = "";
|
||||||
|
tooltip-format = "Devices connected: {num_connections}";
|
||||||
|
on-click = "hakase-popup-bluetooth";
|
||||||
|
};
|
||||||
|
|
||||||
|
"pulseaudio" = {
|
||||||
|
format = "{icon}";
|
||||||
|
on-click = "hakase-popup-volume";
|
||||||
|
on-click-right = "pamixer -t";
|
||||||
|
tooltip-format = "Playing at {volume}%";
|
||||||
|
scroll-step = 5;
|
||||||
|
format-muted = "";
|
||||||
|
format-icons = {
|
||||||
|
default = ["" "" ""];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
"group/tray-expander" = {
|
||||||
|
orientation = "inherit";
|
||||||
|
drawer = {
|
||||||
|
transition-duration = 600;
|
||||||
|
children-class = "tray-group-item";
|
||||||
|
};
|
||||||
|
modules = ["custom/expand-icon" "tray"];
|
||||||
|
};
|
||||||
|
|
||||||
|
"custom/expand-icon" = {
|
||||||
|
format = "";
|
||||||
|
tooltip = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
"custom/screenrecording-indicator" = {
|
||||||
|
on-click = "omarchy-cmd-screenrecord";
|
||||||
|
# Note: $OMARCHY_PATH must be defined in your environment
|
||||||
|
exec = "$OMARCHY_PATH/default/waybar/indicators/screen-recording.sh";
|
||||||
|
signal = 8;
|
||||||
|
return-type = "json";
|
||||||
|
};
|
||||||
|
|
||||||
|
"tray" = {
|
||||||
|
icon-size = 12;
|
||||||
|
spacing = 17;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
{config, ...}: {
|
||||||
|
programs.waybar = {
|
||||||
|
style = ''
|
||||||
|
@import "matugen.css";
|
||||||
|
* {
|
||||||
|
background-color: @background;
|
||||||
|
color: @on_surface;
|
||||||
|
|
||||||
|
border: none;
|
||||||
|
border-radius: 0;
|
||||||
|
min-height: 0;
|
||||||
|
font-family: 'JetBrainsMono Nerd Font';
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modules-left {
|
||||||
|
margin-left: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.modules-right {
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button {
|
||||||
|
all: initial;
|
||||||
|
padding: 0 6px;
|
||||||
|
margin: 0 1.5px;
|
||||||
|
min-width: 9px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#workspaces button.empty {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#cpu,
|
||||||
|
#battery,
|
||||||
|
#pulseaudio,
|
||||||
|
#custom-omarchy,
|
||||||
|
#custom-screenrecording-indicator,
|
||||||
|
#custom-update {
|
||||||
|
min-width: 12px;
|
||||||
|
margin: 0 7.5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tray {
|
||||||
|
margin-right: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#bluetooth {
|
||||||
|
margin-right: 17px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#network {
|
||||||
|
margin-right: 13px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-expand-icon {
|
||||||
|
margin-right: 18px;
|
||||||
|
}
|
||||||
|
|
||||||
|
tooltip {
|
||||||
|
padding: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-update {
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#clock {
|
||||||
|
margin-left: 8.75px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden {
|
||||||
|
opacity: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-screenrecording-indicator {
|
||||||
|
min-width: 12px;
|
||||||
|
margin-left: 8.75px;
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-screenrecording-indicator.active {
|
||||||
|
color: @on_secondary;
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
programs.yazi = {
|
||||||
|
enable = true;
|
||||||
|
enableFishIntegration = true;
|
||||||
|
settings = {
|
||||||
|
manager = {
|
||||||
|
show_hidden = true;
|
||||||
|
sort_by = "natural";
|
||||||
|
sort_dir_first = true;
|
||||||
|
linemode = "size";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
programs.zoxide = {
|
||||||
|
enable = true;
|
||||||
|
enableFishIntegration = true;
|
||||||
|
options = [
|
||||||
|
"--cmd cd"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 1.4 MiB |
@@ -0,0 +1 @@
|
|||||||
|
/nix/store/yckzy9k5i7pvmlk6xjkdj4wwbfms1zpl-home-manager-files/Pictures/Wallpapers/1-Pawel-Czerwinski-Abstract-Purple-Blue.jpg
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/nix/store/yckzy9k5i7pvmlk6xjkdj4wwbfms1zpl-home-manager-files/Pictures/Wallpapers/1-everforest.jpg
|
||||||
|
After Width: | Height: | Size: 3.4 MiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 510 KiB |
|
After Width: | Height: | Size: 451 KiB |
|
After Width: | Height: | Size: 488 KiB |
@@ -0,0 +1 @@
|
|||||||
|
/nix/store/yckzy9k5i7pvmlk6xjkdj4wwbfms1zpl-home-manager-files/Pictures/Wallpapers/gruvbox-1.jpg
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
/nix/store/yckzy9k5i7pvmlk6xjkdj4wwbfms1zpl-home-manager-files/Pictures/Wallpapers/kanagawa-1.png
|
||||||
|
After Width: | Height: | Size: 607 KiB |
|
After Width: | Height: | Size: 6.0 MiB |
|
After Width: | Height: | Size: 152 KiB |
@@ -0,0 +1 @@
|
|||||||
|
/nix/store/yckzy9k5i7pvmlk6xjkdj4wwbfms1zpl-home-manager-files/Pictures/Wallpapers/nord-1.png
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
▄▄▄
|
||||||
|
▄█████▄ ▄███████████▄ ▄███████ ▄███████ ▄███████ ▄█ █▄ ▄█ █▄
|
||||||
|
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
|
||||||
|
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ █▀ ███ ███ ███ ███
|
||||||
|
███ ███ ███ ███ ███ ▄███▄▄▄███ ▄███▄▄▄██▀ ███ ▄███▄▄▄███▄ ███▄▄▄███
|
||||||
|
███ ███ ███ ███ ███ ▀███▀▀▀███ ▀███▀▀▀▀ ███ ▀▀███▀▀▀███ ▀▀▀▀▀▀███
|
||||||
|
███ ███ ███ ███ ███ ███ ███ ██████████ ███ █▄ ███ ███ ▄██ ███
|
||||||
|
███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███ ███
|
||||||
|
▀█████▀ ▀█ ███ █▀ ███ █▀ ███ ███ ███████▀ ███ █▀ ▀█████▀
|
||||||
|
███ █▀
|
||||||
|
Before Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 2.6 MiB |
|
Before Width: | Height: | Size: 246 KiB |
|
Before Width: | Height: | Size: 14 MiB |
@@ -1,92 +1,61 @@
|
|||||||
{
|
{
|
||||||
myConfig = {
|
myConfig = {
|
||||||
general = {
|
nixos = {
|
||||||
Hostname = "hakase";
|
username = "kenji";
|
||||||
Username = "kenji";
|
hostname = "hakase";
|
||||||
Timezone = "America/Chicago";
|
timezone = "America/Chicago";
|
||||||
|
shell = "fish"; # FIXME: unassigned variable
|
||||||
|
};
|
||||||
|
git = {
|
||||||
|
username = "kenji";
|
||||||
|
email = "kenji@hakase";
|
||||||
|
defaultBranch = "master";
|
||||||
|
};
|
||||||
|
ssh = {
|
||||||
|
# FIXME: anonymize
|
||||||
|
extraConfig = ''
|
||||||
|
Host macair
|
||||||
|
User biscuit
|
||||||
|
HostName 192.168.68.81
|
||||||
|
|
||||||
allowUnfree = true; # allows installation of commercial apps.
|
Host gitea.sakamoto.dev
|
||||||
|
User kenji
|
||||||
terminal = {
|
ProxyCommand cloudflared access ssh --hostname %h
|
||||||
Font = "JetBrainsMono Nerd Font"; # e.g., JetBrainsMono Nerd Font
|
HostName gitea.sakamoto.dev
|
||||||
Size = "18";
|
'';
|
||||||
Shell = "fish";
|
};
|
||||||
Aliases = {
|
terminal = {
|
||||||
ls = "ls --color=auto";
|
default = "ghostty";
|
||||||
update = ''
|
aliases = {
|
||||||
sh -c '
|
update = "sudo nixos-rebuild switch --flake ~/.config/nixos/#hakase";
|
||||||
if [ "$(uname)" = "Darwin" ]; then
|
|
||||||
sudo darwin-rebuild switch --flake ~/.config/nixos#macos
|
|
||||||
else
|
|
||||||
sudo nixos-rebuild switch --flake ~/.config/nixos#desktop && home-manager switch --flake ~/.config/nixos#desktop
|
|
||||||
fi
|
|
||||||
'
|
|
||||||
'';
|
|
||||||
agu = "pkill gjs & ags run ~/.config/nixos/packages/ags/biscuit/app.ts & disown (jobs -p) &";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
gitProfile = {
|
|
||||||
User = "kenji";
|
|
||||||
Email = "kenji@sakamoto.dev";
|
|
||||||
defaultBranch = "master";
|
|
||||||
};
|
|
||||||
ssh = {
|
|
||||||
extraConfig = ''
|
|
||||||
Host gitea.sakamoto.dev
|
|
||||||
User kenji
|
|
||||||
ProxyCommand cloudflared access ssh --hostname %h
|
|
||||||
HostName gitea.sakamoto.dev
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
hyprland = {
|
||||||
builds = {
|
monitors = ["HDMI-A-1, 1920x1080@120, auto, 1"];
|
||||||
builder = {
|
# wallpaper = "nixos_rainbow.png";
|
||||||
trustedUsers = [
|
wallpaper = "ai_pixel_purple.jpg"; # FIXME: redundant
|
||||||
"@groups"
|
|
||||||
"biscuit"
|
|
||||||
];
|
|
||||||
buildMachines = [
|
|
||||||
{
|
|
||||||
hostName = "192.168.68.81";
|
|
||||||
sshUser = "biscuit";
|
|
||||||
sshKey = "/home/biscuit/.ssh/id_rsa.pub";
|
|
||||||
system = "x86_64-linux";
|
|
||||||
supportedFeatures = ["big-parallel" "kvm" "nixos-test"];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
firefox = {
|
||||||
linux = {
|
bookmarks = [
|
||||||
system = "x86_64";
|
{
|
||||||
gaming = true;
|
name = "Home Manager";
|
||||||
|
url = "https://mynixos.com/home-manager/options/programs";
|
||||||
vpn = {
|
}
|
||||||
Enable = false;
|
{
|
||||||
secretFile = builtins.toPath ./secrets/.vpn.yaml;
|
name = "YouTube";
|
||||||
};
|
url = "https://youtube.com";
|
||||||
|
}
|
||||||
touchpadSupport = false;
|
{
|
||||||
logitech-hardware.enable = true;
|
name = "Nur";
|
||||||
|
url = "https://nur.nix-community.org/repos";
|
||||||
# Custom Applications
|
}
|
||||||
apps = {
|
];
|
||||||
gaming = true;
|
newtabpage = [
|
||||||
apps = pkgs:
|
{
|
||||||
with pkgs; [
|
title = "Dashboard";
|
||||||
jellyfin-media-player
|
url = "https://dash.sakamoto.dev";
|
||||||
];
|
}
|
||||||
};
|
];
|
||||||
hyprconf = {
|
|
||||||
Monitor = [
|
|
||||||
# hyprctl monitors all
|
|
||||||
# monitor, resolution@refreshrate, position (e.g., 0x0 is middle, 0x1080 is top), scale
|
|
||||||
"DP-1,highres@165,0x1080,auto"
|
|
||||||
"DP-2,highres@highrr,0x0,auto"
|
|
||||||
"HDMI-A-1, preferred, 20000x20000,1"
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,115 +1,80 @@
|
|||||||
{
|
{
|
||||||
description = "Sakamoto's NixOS Configuration";
|
description = "Hakase Configuration";
|
||||||
|
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable";
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
home-manager.url = "github:nix-community/home-manager";
|
elephant = {
|
||||||
home-manager.inputs.nixpkgs.follows = "nixpkgs"; # `follows` ensure it follows nixpkgs versiona. Avoids breaking updates.
|
url = "github:abenz1267/elephant";
|
||||||
darwin.url = "github:lnl7/nix-darwin";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
darwin.inputs.nixpkgs.follows = "nixpkgs";
|
};
|
||||||
|
chaotic = {
|
||||||
|
url = "github:chaotic-cx/nyx/nyxpkgs-unstable";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
textfox = {
|
||||||
|
url = "github:adriankarlen/textfox";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
nur = {
|
||||||
|
url = "github:nix-community/NUR";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
ags.url = "github:aylur/ags";
|
home-manager = {
|
||||||
ags.inputs.nixpkgs.follows = "nixpkgs";
|
url = "github:nix-community/home-manager";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
hyprland = {
|
||||||
|
url = "git+https://github.com/hyprwm/Hyprland?submodules=1";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
nixovim = {
|
||||||
|
# FIXME: treesitter does not install automatically (disabled due to read-only problems)
|
||||||
|
url = "git+https://git.sakamoto.dev/kenji/nixovim.git";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
sops-nix = {
|
||||||
|
url = "github:Mic92/sops-nix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
stylix = {
|
||||||
|
url = "github:nix-community/stylix";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
hyprland.url = "github:hyprwm/Hyprland";
|
walker = {
|
||||||
hyprland.inputs.nixpkgs.follows = "nixpkgs";
|
url = "github:abenz1267/walker";
|
||||||
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
unlisted-fonts.url = "git+https://git.sakamoto.dev/kenji/nix-fonts.git";
|
inputs.elephant.follows = "elephant";
|
||||||
unlisted-fonts.inputs.nixpkgs.follows = "nixpkgs";
|
};
|
||||||
|
|
||||||
nixovim.url = "git+https://git.sakamoto.dev/kenji/nixovim.git";
|
|
||||||
nixovim.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
|
|
||||||
matugen.url = "github:/InioX/Matugen";
|
|
||||||
matugen.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
|
|
||||||
nix-gaming.url = "github:fufexan/nix-gaming";
|
|
||||||
nix-gaming.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
|
|
||||||
sops-nix.url = "github:Mic92/sops-nix";
|
|
||||||
sops-nix.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
|
|
||||||
quickshell.url = "git+https://git.outfoxxed.me/outfoxxed/quickshell";
|
|
||||||
quickshell.inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
outputs = {
|
outputs = {
|
||||||
self,
|
self,
|
||||||
nixpkgs,
|
nixpkgs,
|
||||||
home-manager,
|
home-manager,
|
||||||
darwin,
|
stylix,
|
||||||
ags,
|
|
||||||
hyprland,
|
|
||||||
unlisted-fonts,
|
|
||||||
nixovim,
|
nixovim,
|
||||||
|
chaotic,
|
||||||
|
sops-nix,
|
||||||
|
textfox,
|
||||||
...
|
...
|
||||||
} @ inputs: let
|
} @ inputs: let
|
||||||
config = import ./config.nix;
|
config = import ./config.nix;
|
||||||
lib = nixpkgs.lib;
|
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
# pkgs = nixpkgs.legacyPackages.${system}; # alternative, without overlays. Unused.
|
|
||||||
args =
|
args =
|
||||||
{
|
{
|
||||||
inherit inputs system;
|
inherit inputs system;
|
||||||
}
|
}
|
||||||
// config;
|
// config;
|
||||||
in {
|
in {
|
||||||
# nixosConfiguration for linux system
|
|
||||||
nixosConfigurations = {
|
nixosConfigurations = {
|
||||||
desktop = lib.nixosSystem {
|
hakase = nixpkgs.lib.nixosSystem {
|
||||||
inherit system;
|
|
||||||
specialArgs = args;
|
specialArgs = args;
|
||||||
modules = [
|
modules = [
|
||||||
./hosts/desktop/configuration.nix
|
home-manager.nixosModules.home-manager
|
||||||
];
|
sops-nix.nixosModules.sops
|
||||||
};
|
chaotic.nixosModules.default
|
||||||
};
|
./hosts/hakase/configuration.nix
|
||||||
homeConfigurations = {
|
|
||||||
desktop = home-manager.lib.homeManagerConfiguration {
|
|
||||||
pkgs = import nixpkgs {
|
|
||||||
inherit system;
|
|
||||||
overlays = [
|
|
||||||
# (final: prev: {
|
|
||||||
# ags_1 = prev.ags_1.overrideAttrs (old: {
|
|
||||||
# buildInputs = old.buildInputs ++ [pkgs.libdbusmenu-gtk3];
|
|
||||||
# });
|
|
||||||
# })
|
|
||||||
];
|
|
||||||
};
|
|
||||||
extraSpecialArgs = args;
|
|
||||||
modules = [./home/desktop.nix];
|
|
||||||
};
|
|
||||||
|
|
||||||
gaming = home-manager.lib.homeManagerConfiguration {
|
|
||||||
pkgs = import nixpkgs {
|
|
||||||
inherit system;
|
|
||||||
overlays = [];
|
|
||||||
};
|
|
||||||
extraSpecialArgs = args;
|
|
||||||
modules = [./home/gaming.nix];
|
|
||||||
};
|
|
||||||
headless = home-manager.lib.homeManagerConfiguration {
|
|
||||||
pkgs = import nixpkgs {
|
|
||||||
inherit system;
|
|
||||||
overlays = [];
|
|
||||||
};
|
|
||||||
extraSpecialArgs = args;
|
|
||||||
modules = [./home/headless.nix];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
# darwinConfiguration for macOS M series
|
|
||||||
darwinConfigurations = {
|
|
||||||
macos = darwin.lib.darwinSystem {
|
|
||||||
system = "aarch64-darwin";
|
|
||||||
specialArgs = args;
|
|
||||||
modules = [
|
|
||||||
./hosts/macos/darwin.nix
|
|
||||||
home-manager.darwinModules.home-manager
|
|
||||||
{
|
|
||||||
home-manager.useGlobalPkgs = true;
|
|
||||||
home-manager.useUserPackages = true;
|
|
||||||
home-manager.extraSpecialArgs = args;
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
{
|
|
||||||
myConfig,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [
|
|
||||||
../modules/terminal.nix
|
|
||||||
../modules/desktop.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.home-manager.enable = true;
|
|
||||||
|
|
||||||
home = {
|
|
||||||
username = "${myConfig.general.Username}";
|
|
||||||
homeDirectory = "/home/${myConfig.general.Username}";
|
|
||||||
packages = [];
|
|
||||||
sessionVariables = {};
|
|
||||||
};
|
|
||||||
|
|
||||||
systemd.user.startServices = "sd-switch";
|
|
||||||
home.stateVersion = "23.05";
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
inputs,
|
||||||
|
config,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
../modules/home/terminal.nix
|
||||||
|
../modules/home/apps.nix
|
||||||
|
../modules/home/apps-optional.nix
|
||||||
|
../modules/home/hyprland.nix
|
||||||
|
../modules/home/waybar.nix
|
||||||
|
../modules/home/theme.nix
|
||||||
|
../modules/home/gaming.nix
|
||||||
|
../modules/home/music.nix
|
||||||
|
inputs.walker.homeManagerModules.default
|
||||||
|
inputs.sops-nix.homeManagerModules.sops
|
||||||
|
];
|
||||||
|
|
||||||
|
home.sessionVariables = {
|
||||||
|
};
|
||||||
|
|
||||||
|
home.stateVersion = "25.05";
|
||||||
|
}
|
||||||
@@ -1,15 +0,0 @@
|
|||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [
|
|
||||||
../modules/terminal.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.home-manager.enable = true;
|
|
||||||
|
|
||||||
home.packages = [];
|
|
||||||
home.stateVersion = "23.05";
|
|
||||||
}
|
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
{
|
|
||||||
pkgs,
|
|
||||||
myConfig,
|
|
||||||
inputs,
|
|
||||||
lib,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports =
|
|
||||||
[
|
|
||||||
inputs.sops-nix.nixosModules.sops
|
|
||||||
./hardware-configuration.nix
|
|
||||||
../../modules/linuxDev.nix
|
|
||||||
../../modules/system.nix
|
|
||||||
../../modules/de.nix
|
|
||||||
]
|
|
||||||
++ lib.optionals (myConfig.linux.apps.gaming == true) [
|
|
||||||
../../modules/gaming.nix
|
|
||||||
];
|
|
||||||
|
|
||||||
environment.systemPackages = [];
|
|
||||||
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
|
||||||
|
|
||||||
nix.settings = {
|
|
||||||
trusted-users = myConfig.builds.builder.trustedUsers;
|
|
||||||
experimental-features = ["nix-command" "flakes"];
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.ssh.extraConfig = myConfig.general.ssh.extraConfig;
|
|
||||||
|
|
||||||
nix.distributedBuilds = true;
|
|
||||||
nix.settings.builders-use-substitutes = true;
|
|
||||||
|
|
||||||
# nix.buildMachines = builder.buildMachines;
|
|
||||||
system.stateVersion = "25.05";
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
myConfig,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
./hardware-configuration.nix
|
||||||
|
../../modules/system/default.nix
|
||||||
|
../../modules/system/hyprland.nix
|
||||||
|
../../modules/system/scripts.nix
|
||||||
|
../../modules/system/gaming.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
|
# and may be overwritten by future invocations. Please make changes
|
||||||
|
# to /etc/nixos/configuration.nix instead.
|
||||||
|
{ config, lib, pkgs, modulesPath, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports =
|
||||||
|
[ (modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" ];
|
||||||
|
boot.initrd.kernelModules = [ ];
|
||||||
|
boot.kernelModules = [ "kvm-amd" ];
|
||||||
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
|
fileSystems."/" =
|
||||||
|
{ device = "/dev/mapper/luks-f8bd85aa-b08e-472a-b7f6-5e190b9b9714";
|
||||||
|
fsType = "ext4";
|
||||||
|
};
|
||||||
|
|
||||||
|
boot.initrd.luks.devices."luks-f8bd85aa-b08e-472a-b7f6-5e190b9b9714".device = "/dev/disk/by-uuid/f8bd85aa-b08e-472a-b7f6-5e190b9b9714";
|
||||||
|
|
||||||
|
fileSystems."/boot" =
|
||||||
|
{ device = "/dev/disk/by-uuid/72BA-AF9B";
|
||||||
|
fsType = "vfat";
|
||||||
|
options = [ "fmask=0077" "dmask=0077" ];
|
||||||
|
};
|
||||||
|
|
||||||
|
swapDevices = [ ];
|
||||||
|
|
||||||
|
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||||
|
hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||||
|
}
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
{
|
|
||||||
pkgs,
|
|
||||||
myConfig,
|
|
||||||
inputs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [
|
|
||||||
../../modules/macosDev.nix
|
|
||||||
inputs.sops-nix.darwinModules.sops
|
|
||||||
];
|
|
||||||
# List packages installed in system profile. To search by name, run:
|
|
||||||
# $ nix-env -qaP | grep wget
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
];
|
|
||||||
|
|
||||||
# Auto upgrade nix package and the daemon service.
|
|
||||||
# services.nix-daemon.enable = true;
|
|
||||||
# services.karabiner-elements.enable = true;
|
|
||||||
# nix.package = pkgs.nix;
|
|
||||||
|
|
||||||
# Necessary for using flakes on this system.
|
|
||||||
nix.settings.experimental-features = "nix-command flakes";
|
|
||||||
nix.settings.trusted-users = myConfig.builds.builder.trustedUsers;
|
|
||||||
|
|
||||||
# Create /etc/zshrc that loads the nix-darwin environment.
|
|
||||||
programs.zsh.enable = true; # default shell on catalina
|
|
||||||
programs.fish.enable = true;
|
|
||||||
|
|
||||||
# $ darwin-rebuild changelog
|
|
||||||
system.stateVersion = 5;
|
|
||||||
|
|
||||||
# The platform the configuration will be used on.
|
|
||||||
nixpkgs.hostPlatform = "aarch64-darwin";
|
|
||||||
security.pam.services.sudo_local.touchIdAuth = true;
|
|
||||||
|
|
||||||
users.users.${myConfig.general.Username} = {
|
|
||||||
name = "${myConfig.general.Username}";
|
|
||||||
home = "/Users/${myConfig.general.Username}";
|
|
||||||
# shell = pkgs.${myConfig.general.terminal.Shell}; # no support for nix-darwin, but can be changed via chsh.
|
|
||||||
};
|
|
||||||
|
|
||||||
home-manager.users.${myConfig.general.Username} = import ../../home/macos.nix;
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
{
|
|
||||||
lib,
|
|
||||||
myConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports =
|
|
||||||
[
|
|
||||||
../system/font.nix
|
|
||||||
../system/browser.nix
|
|
||||||
../system/wayland.nix
|
|
||||||
../system/graphics.nix
|
|
||||||
../system/security.nix
|
|
||||||
|
|
||||||
# FIXME
|
|
||||||
../system/amd.nix
|
|
||||||
]
|
|
||||||
++ lib.optionals (myConfig.linux.gaming == true) [
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
{
|
|
||||||
lib,
|
|
||||||
myConfig,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports =
|
|
||||||
[
|
|
||||||
../packages/hyprland/default.nix
|
|
||||||
../packages/hypridle/default.nix
|
|
||||||
../packages/hyprlock/default.nix
|
|
||||||
../packages/rofi/default.nix
|
|
||||||
../packages/matugen/default.nix
|
|
||||||
../packages/swww/default.nix
|
|
||||||
../packages/quickshell/default.nix
|
|
||||||
../packages/ags/default.nix
|
|
||||||
]
|
|
||||||
++ lib.optionals (myConfig.linux.gaming == true) [
|
|
||||||
../packages/mangohud/default.nix
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
imports = [
|
|
||||||
../system/stream.nix
|
|
||||||
../system/gaming.nix
|
|
||||||
../system/appimage.nix
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
imports = [
|
||||||
|
../../apps/btop/home.nix
|
||||||
|
../../apps/jellyfin/home.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
imports = [
|
||||||
|
../../apps/yazi/home.nix
|
||||||
|
../../apps/gemini/home.nix
|
||||||
|
../../apps/firefox/home.nix
|
||||||
|
# ../../apps/starship/home.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
protonup-qt
|
||||||
|
protontricks
|
||||||
|
mangohud
|
||||||
|
];
|
||||||
|
|
||||||
|
programs.mangohud = {
|
||||||
|
enable = true;
|
||||||
|
settings = {
|
||||||
|
full = true;
|
||||||
|
no_display = true; # Don't show by default (toggle with Shift+F12)
|
||||||
|
cpu_temp = true;
|
||||||
|
gpu_temp = true;
|
||||||
|
ram = true;
|
||||||
|
vram = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
imports = [
|
||||||
|
../../apps/tte/hakase-screensaver.nix
|
||||||
|
../../apps/hyprland/home.nix
|
||||||
|
../../apps/walker/home.nix
|
||||||
|
# ../../apps/fsel/home.nix
|
||||||
|
../../apps/hyprpaper/home.nix
|
||||||
|
../../apps/hyprpaper/switch-wallpaper.nix
|
||||||
|
../../apps/tte/home.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
{pkgs, ...}: let
|
||||||
|
launch-music = pkgs.writeShellScriptBin "hakase-music-launch" ''
|
||||||
|
echo "--- Launching Music Apps ---"
|
||||||
|
echo "Launching jellyfin-tui..."
|
||||||
|
uwsm app -- /usr/bin/env ghostty --class=jellyfin-tui --title=jellyfin-tui -e jellyfin-tui &
|
||||||
|
PID_JELLY=$!
|
||||||
|
echo "Jellyfin launched with PID $PID_JELLY"
|
||||||
|
|
||||||
|
echo "Waiting for window..."
|
||||||
|
sleep 0.1
|
||||||
|
|
||||||
|
echo "Focusing jellyfin-tui..."
|
||||||
|
hyprctl dispatch focuswindow title:jellyfin-tui
|
||||||
|
|
||||||
|
echo "Preselecting down..."
|
||||||
|
hyprctl dispatch layoutmsg preselect d
|
||||||
|
|
||||||
|
echo "Launching cava..."
|
||||||
|
uwsm app -- /usr/bin/env ghostty --class=cava --title=cava -e cava &
|
||||||
|
PID_CAVA=$!
|
||||||
|
echo "Cava launched with PID $PID_CAVA"
|
||||||
|
|
||||||
|
echo "Launch script completed."
|
||||||
|
'';
|
||||||
|
in {
|
||||||
|
imports = [
|
||||||
|
../../apps/jellyfin-tui/home.nix
|
||||||
|
../../apps/cava/home.nix
|
||||||
|
];
|
||||||
|
home.packages = [
|
||||||
|
launch-music
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
imports = [
|
||||||
|
../../apps/neovim/neovim.nix
|
||||||
|
../../apps/git/home.nix
|
||||||
|
../../apps/zoxide/home.nix
|
||||||
|
../../apps/fish/home.nix
|
||||||
|
../../apps/ghostty/home.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
imports = [
|
||||||
|
../../apps/stylix/home.nix
|
||||||
|
../../apps/matugen/home.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
imports = [
|
||||||
|
../../apps/waybar/home.nix
|
||||||
|
../../apps/waybar/hakase-popup.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
../system/dev/tools.nix
|
|
||||||
../system/dev/python.nix
|
|
||||||
../system/dev/linux.nix
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
../system/dev/tools.nix
|
|
||||||
../system/dev/python.nix
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,13 +0,0 @@
|
|||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
../system/users.nix
|
|
||||||
../system/hardware.nix
|
|
||||||
../system/locale.nix
|
|
||||||
../system/network.nix
|
|
||||||
../system/programs.nix
|
|
||||||
../system/services.nix
|
|
||||||
../system/tty.nix
|
|
||||||
../system/firewall.nix
|
|
||||||
../system/boot.nix
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
imports = [
|
||||||
|
../../system/time.nix
|
||||||
|
../../system/nix.nix
|
||||||
|
../../system/backlight.nix
|
||||||
|
../../system/boot.nix
|
||||||
|
../../system/amd.nix
|
||||||
|
../../system/hardware.nix
|
||||||
|
../../system/home-manager.nix
|
||||||
|
../../system/services.nix
|
||||||
|
../../system/user.nix
|
||||||
|
../../system/version.nix
|
||||||
|
../../system/fonts.nix
|
||||||
|
../../system/programs.nix
|
||||||
|
../../system/security.nix
|
||||||
|
../../system/variables.nix
|
||||||
|
../../system/kernel.nix
|
||||||
|
];
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
# FIXME: must be on their own app
|
||||||
|
git
|
||||||
|
cloudflared
|
||||||
|
cachix
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
imports = [
|
||||||
|
../../system/steam.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
imports = [
|
||||||
|
../../apps/hyprland/default.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
{
|
||||||
|
imports = [
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
{...}: {
|
|
||||||
imports = [
|
|
||||||
../packages/git/default.nix
|
|
||||||
../packages/fish/default.nix
|
|
||||||
../packages/kitty/default.nix
|
|
||||||
../packages/neovim/default.nix
|
|
||||||
../packages/starship/default.nix
|
|
||||||
../packages/fastfetch/default.nix
|
|
||||||
../packages/zsh/default.nix
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
node_modules/
|
|
||||||
@girs/
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
import { App } from "astal/gtk3"
|
|
||||||
import style from "./style.scss"
|
|
||||||
import Bar from "./widget/Bar"
|
|
||||||
|
|
||||||
App.start({
|
|
||||||
css: style,
|
|
||||||
instanceName: "js",
|
|
||||||
requestHandler(request, res) {
|
|
||||||
print(request)
|
|
||||||
res("ok")
|
|
||||||
},
|
|
||||||
main: () => {
|
|
||||||
const monitors = App.get_monitors()
|
|
||||||
const primary = monitors.find(m => m.primary) || monitors[0]
|
|
||||||
return Bar(primary)
|
|
||||||
}
|
|
||||||
})
|
|
||||||