Compare commits
69 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 14f4ef912a | |||
| 08ffdb556e | |||
| 58d4005e4f | |||
| a2daad2719 | |||
| 4adbc39dc4 | |||
| 6710f34e50 | |||
| 32d6353cdc | |||
| 613e763f8b | |||
| bf762454c0 | |||
| d232f4a063 | |||
| 63471d7d80 | |||
| dcde7ff162 | |||
| 587d29656c | |||
| 2d60de8c72 | |||
| 8ae561fd0c | |||
| 7aaf208007 | |||
| 3d310ae45c | |||
| 79a8e9d293 | |||
| 848c6fbca2 | |||
| a862e0a55d | |||
| 0517d0e8df | |||
| ed27505556 | |||
| d8a4bde357 | |||
| e05f4bec8f | |||
| 373348e406 | |||
| 47a7828bc7 | |||
| abb7c84675 | |||
| 42c24dbb6f | |||
| 1237c68b8f | |||
| c0b1c5cba1 | |||
| 188607b2ae | |||
| 26252cf448 | |||
| daa9fe00b2 | |||
| 05dbbe4a64 | |||
| 79ff9977b9 | |||
| 5ca09cf75c | |||
| 78e620001f | |||
| 1b9801c15a | |||
| ffd4313dec | |||
| ad5f3da45f | |||
| 129302ac26 | |||
| be47ea74cd | |||
| f1c20d68f9 | |||
| 0716174fb7 | |||
| b25b6a48e2 | |||
| 162399ad8a | |||
| 79c424e08e | |||
| 381f0c5123 | |||
| e83aec85f1 | |||
| 1235f08891 | |||
| ed7ebb0802 | |||
| 82f0248cf6 | |||
| 88faaa950c | |||
| e9e63e6d4a | |||
| b8b4d843d6 | |||
| 99e12fde04 | |||
| bb47747529 | |||
| 4f4bccbb59 | |||
| ea35e5dc49 | |||
| b50cca1ec6 | |||
| 07d13c7cc9 | |||
| 57ed18fe8b | |||
| e3a9bea779 | |||
| 65e2672a68 | |||
| 8619d9a284 | |||
| 7619f7ca41 | |||
| 90c61f0625 | |||
| 1b95d4945f | |||
| 830605aeec |
@@ -0,0 +1,15 @@
|
|||||||
|
deploy:
|
||||||
|
sudo nixos-rebuild switch --flake .
|
||||||
|
|
||||||
|
debug:
|
||||||
|
sudo nixos-rebuild switch --flake . --show-trace --verbose
|
||||||
|
|
||||||
|
update:
|
||||||
|
nix flake update
|
||||||
|
|
||||||
|
history:
|
||||||
|
sudo nix-env --list-generations --profile /nix/var/nix/profiles/system
|
||||||
|
|
||||||
|
gc:
|
||||||
|
sudo nix-collect-garbage --delete-older-than 14d
|
||||||
|
|
||||||
@@ -3,26 +3,67 @@
|
|||||||
This repository is home to the nix code that builds my systems.
|
This repository is home to the nix code that builds my systems.
|
||||||
|
|
||||||
|
|
||||||
|
## Screenshots
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
|
|
||||||
- vscode extensions - [nix-vscode-extensions](https://github.com/nix-community/nix-vscode-extensions)
|
- enable disk encryption to enhance data security
|
||||||
- secret management - [sops-nix](https://github.com/Mic92/sops-nix)
|
- make fcitx5-rime work in vscode/chrome on wayland
|
||||||
- switch from i3wm to hyprland
|
|
||||||
- i3wm: old and stable, only support X11
|
|
||||||
- sway: compatible with i3wm, support Wayland. do not support Nvidia GPU officially.
|
|
||||||
- [hyprland](https://wiki.hyprland.org/Nix/Hyprland-on-NixOS/): project starts from 2022, support Wayland, envolving fast, good looking, support Nvidia GPU.
|
|
||||||
|
|
||||||
|
|
||||||
## Why Nix?
|
## Why Nix?
|
||||||
|
|
||||||
Nix allows for easy to manage, collaborative, reproducible deployments. This means that once something is setup and configured once, it works forever. If someone else shares their configuration, anyone can make use of it.
|
Nix allows for easy to manage, collaborative, reproducible deployments. This means that once something is setup and configured once, it works forever. If someone else shares their configuration, anyone can make use of it.
|
||||||
|
|
||||||
|
Want to know Nix in details? Looking for a beginner-friendly tutorial? Check out [NixOS & Nix Flakes - A Guide for Beginners](https://thiscute.world/en/posts/nixos-and-flake-basics/)!
|
||||||
|
|
||||||
## How to install Nix and Deploy this Flake?
|
## How to Deploy this Flake?
|
||||||
|
|
||||||
|
>Note: you should NOT deploy this flake directly on your machine, it contains my hardware information and personal information which is not suitable for you. You may use this repo as a reference to build your own configuration.
|
||||||
|
|
||||||
After installed NixOS with `nix-command` & `flake` enabled, you can deploy this flake with the following command:
|
After installed NixOS with `nix-command` & `flake` enabled, you can deploy this flake with the following command:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo nixos-rebuild switch .#nixos-test
|
# deploy my test configuration
|
||||||
|
sudo nixos-rebuild switch --flake .#nixos-test
|
||||||
|
|
||||||
|
|
||||||
|
# deploy my PC's configuration
|
||||||
|
sudo nixos-rebuild switch --flake .#msi-rtx4090
|
||||||
|
|
||||||
|
# or just deploy with hostname
|
||||||
|
sudo nixos-rebuild switch
|
||||||
|
|
||||||
|
# we can also deploy using make, which is defined in Makefile
|
||||||
|
make deploy
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Install Apps from Flatpak
|
||||||
|
|
||||||
|
We can install apps from flathub, which has a lot of apps that are not supported well in nixpkgs.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Add the Flathub repository
|
||||||
|
flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
|
||||||
|
|
||||||
|
# install apps from flathub
|
||||||
|
flatpak install netease-cloud-music-gtk
|
||||||
|
|
||||||
|
# or you can search apps from flathub
|
||||||
|
flatpak search <keyword>
|
||||||
|
# search on website is also supported: https://flathub.org/
|
||||||
|
```
|
||||||
|
|
||||||
|
## Other Interesting Dotfiles
|
||||||
|
|
||||||
|
Other configurations from where I learned and copied:
|
||||||
|
|
||||||
|
- [notwidow/hyprland](https://github.com/notwidow/hyprland): hyprland configuration
|
||||||
|
- [notusknot/dotfiles-nix](https://github.com/notusknot/dotfiles-nix)
|
||||||
|
- [xddxdd/nixos-config](https://github.com/xddxdd/nixos-config)
|
||||||
|
- [bobbbay/dotfiles](https://github.com/bobbbay/dotfiles)
|
||||||
|
- [gytis-ivaskevicius/nixfiles](https://github.com/gytis-ivaskevicius/nixfiles)
|
||||||
|
- [fufexan/dotfiles](https://github.com/fufexan/dotfiles)
|
||||||
|
- [davidtwco/veritas](https://github.com/davidtwco/veritas)
|
||||||
|
- [NixOS-CN/NixOS-CN-telegram](https://github.com/NixOS-CN/NixOS-CN-telegram)
|
||||||
|
|||||||
|
After Width: | Height: | Size: 336 KiB |
@@ -1,5 +1,70 @@
|
|||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
|
"agenix": {
|
||||||
|
"inputs": {
|
||||||
|
"darwin": "darwin",
|
||||||
|
"home-manager": "home-manager",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1684153753,
|
||||||
|
"narHash": "sha256-PVbWt3qrjYAK+T5KplFcO+h7aZWfEj1UtyoKlvcDxh0=",
|
||||||
|
"owner": "ryantm",
|
||||||
|
"repo": "agenix",
|
||||||
|
"rev": "db5637d10f797bb251b94ef9040b237f4702cde3",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "ryantm",
|
||||||
|
"repo": "agenix",
|
||||||
|
"rev": "db5637d10f797bb251b94ef9040b237f4702cde3",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"darwin": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"agenix",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1684343812,
|
||||||
|
"narHash": "sha256-ZTEjiC8PDKeP8JRchuwcFXUNlMcyQ4U+DpyVZ3pB6Q4=",
|
||||||
|
"owner": "lnl7",
|
||||||
|
"repo": "nix-darwin",
|
||||||
|
"rev": "dfbdabbb3e797334172094d4f6c0ffca8c791281",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "lnl7",
|
||||||
|
"ref": "master",
|
||||||
|
"repo": "nix-darwin",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"devenv": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": "flake-compat",
|
||||||
|
"nix": "nix",
|
||||||
|
"nixpkgs": "nixpkgs_2",
|
||||||
|
"pre-commit-hooks": "pre-commit-hooks"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1678113758,
|
||||||
|
"narHash": "sha256-mD3SkN43b1s5CJ8Rx3l2oK3Dqgs+6Ze0FfWrdMcrrYk=",
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "devenv",
|
||||||
|
"rev": "6455f319fc90e0be2071327093c5458f9afc61bf",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "cachix",
|
||||||
|
"ref": "v0.6.2",
|
||||||
|
"repo": "devenv",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"flake-compat": {
|
"flake-compat": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
@@ -16,6 +81,43 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"flake-compat_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1680531544,
|
||||||
|
"narHash": "sha256-8qbiDTYb1kGaDADRXTItpcMKQ1TeQVkuof6oEwHUvVA=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"rev": "95e78dc12268c5e4878621845c511077f3798729",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"flake-parts": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs-lib": [
|
||||||
|
"nixpkgs-wayland",
|
||||||
|
"nix-eval-jobs",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1680392223,
|
||||||
|
"narHash": "sha256-n3g7QFr85lDODKt250rkZj2IFS3i4/8HBU2yKHO3tqw=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"rev": "dcc36e45d054d7bb554c9cdab69093debd91a0b5",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "flake-parts",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"flake-utils": {
|
"flake-utils": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1667395993,
|
"lastModified": 1667395993,
|
||||||
@@ -31,18 +133,79 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"flake-utils_2": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681202837,
|
||||||
|
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "cfacdce06f30d2b68473a46042957675eebb3401",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"gitignore": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"devenv",
|
||||||
|
"pre-commit-hooks",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1660459072,
|
||||||
|
"narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=",
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "gitignore.nix",
|
||||||
|
"rev": "a20de23b925fd8264fd7fad6454652e142fd7f73",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hercules-ci",
|
||||||
|
"repo": "gitignore.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"home-manager": {
|
"home-manager": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"agenix",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1684596126,
|
||||||
|
"narHash": "sha256-4RZZmygeEXpuBqEXGs38ZAcWjWKGwu13Iqbxub6wuJk=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "27ef11f0218d9018ebb2948d40133df2b1de622d",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"home-manager_2": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": [
|
"nixpkgs": [
|
||||||
"nixpkgs"
|
"nixpkgs"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1682176386,
|
"lastModified": 1684484967,
|
||||||
"narHash": "sha256-xwYjQ8PjfdHlggi8Dq0PXWby/1oXegSUuNuBvoTcnpA=",
|
"narHash": "sha256-P3ftCqeJmDYS9LSr2gGC4XGGcp5vv8TOasJX6fVHWsw=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "6169690ae38175295605d521bd778d999fbd85cd",
|
"rev": "b9a52ad20e58ebd003444915e35e3dd2c18fc715",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -51,33 +214,134 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nix-vscode-extensions": {
|
"hyprland": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-compat": "flake-compat",
|
"hyprland-protocols": "hyprland-protocols",
|
||||||
"flake-utils": "flake-utils",
|
"nixpkgs": "nixpkgs_3",
|
||||||
"nixpkgs": "nixpkgs"
|
"wlroots": "wlroots",
|
||||||
|
"xdph": "xdph"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1683076311,
|
"lastModified": 1683130508,
|
||||||
"narHash": "sha256-xGvR07+fR5g/89oVEQieKG/ZveGHZZyhxXcRouW0WCk=",
|
"narHash": "sha256-Npf48UUfywneFYGEc7NQ59xudwvw7EJjwweT4tHguIY=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "Hyprland",
|
||||||
|
"rev": "f27873a6f06dc2f87600edb890f3c38298bfb55f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"ref": "v0.25.0",
|
||||||
|
"repo": "Hyprland",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprland-protocols": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681065697,
|
||||||
|
"narHash": "sha256-QPzwwlGKX95tl6ZEshboZbEwwAXww6lNLdVYd6T9Mrc=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprland-protocols",
|
||||||
|
"rev": "4d29e48433270a2af06b8bc711ca1fe5109746cd",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "hyprland-protocols",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lib-aggregate": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils_2",
|
||||||
|
"nixpkgs-lib": "nixpkgs-lib"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681214977,
|
||||||
|
"narHash": "sha256-pBaG4iKzF/YJQA06f87IZokB15Z13DYd6zsT/wlbWfI=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nix-vscode-extensions",
|
"repo": "lib-aggregate",
|
||||||
"rev": "70d48e0c7eafdbcdaa9dac6c17f46a88872f7285",
|
"rev": "19d70ca7a81956bd01a768297b84798f301e150f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nix-vscode-extensions",
|
"repo": "lib-aggregate",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"lowdown-src": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1633514407,
|
||||||
|
"narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=",
|
||||||
|
"owner": "kristapsdz",
|
||||||
|
"repo": "lowdown",
|
||||||
|
"rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "kristapsdz",
|
||||||
|
"repo": "lowdown",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nix": {
|
||||||
|
"inputs": {
|
||||||
|
"lowdown-src": "lowdown-src",
|
||||||
|
"nixpkgs": [
|
||||||
|
"devenv",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"nixpkgs-regression": "nixpkgs-regression"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1676545802,
|
||||||
|
"narHash": "sha256-EK4rZ+Hd5hsvXnzSzk2ikhStJnD63odF7SzsQ8CuSPU=",
|
||||||
|
"owner": "domenkozar",
|
||||||
|
"repo": "nix",
|
||||||
|
"rev": "7c91803598ffbcfe4a55c44ac6d49b2cf07a527f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "domenkozar",
|
||||||
|
"ref": "relaxed-flakes",
|
||||||
|
"repo": "nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nix-eval-jobs": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-parts": "flake-parts",
|
||||||
|
"nixpkgs": "nixpkgs_5"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1682480188,
|
||||||
|
"narHash": "sha256-4LG8Vl/fLWsJg+QAb5/PvZTdLtPFsYFxuGDfEAR5szA=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "nix-eval-jobs",
|
||||||
|
"rev": "73ee1712faeb5db609fc9f991e2dc1de265acff5",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "nix-eval-jobs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1675763311,
|
"lastModified": 1684570954,
|
||||||
"narHash": "sha256-bz0Q2H3mxsF1CUfk26Sl9Uzi8/HFjGFD/moZHz1HebU=",
|
"narHash": "sha256-FX5y4Sm87RWwfu9PI71XFvuRpZLowh00FQpIJ1WfXqE=",
|
||||||
"owner": "NixOS",
|
"owner": "NixOS",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "fab09085df1b60d6a0870c8a89ce26d5a4a708c2",
|
"rev": "3005f20ce0aaa58169cdee57c8aa12e5f1b6e1b3",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -87,13 +351,129 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nixpkgs-lib": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681001314,
|
||||||
|
"narHash": "sha256-5sDnCLdrKZqxLPK4KA8+f4A3YKO/u6ElpMILvX0g72c=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "nixpkgs.lib",
|
||||||
|
"rev": "367c0e1086a4eb4502b24d872cea2c7acdd557f4",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "nixpkgs.lib",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-regression": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1643052045,
|
||||||
|
"narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-stable": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1673800717,
|
||||||
|
"narHash": "sha256-SFHraUqLSu5cC6IxTprex/nTsI81ZQAtDvlBvGDWfnA=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "2f9fd351ec37f5d479556cd48be4ca340da59b8f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-22.11",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-stable_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1684398685,
|
||||||
|
"narHash": "sha256-TRE62m91iZ5ArVMgA+uj22Yda8JoQuuhc9uwZ+NoX+0=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "628d4bb6e9f4f0c30cfd9b23d3c1cdcec9d3cb5c",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-22.11",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-wayland": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": "flake-compat_2",
|
||||||
|
"lib-aggregate": "lib-aggregate",
|
||||||
|
"nix-eval-jobs": "nix-eval-jobs",
|
||||||
|
"nixpkgs": "nixpkgs_6"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1684592015,
|
||||||
|
"narHash": "sha256-6gFt1LE/stVQFeGI263pU6O5EAeY1TPTGee1vvbkwZo=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "nixpkgs-wayland",
|
||||||
|
"rev": "aeb1b88206756e867e398d18e2856b60fc803e12",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "nixpkgs-wayland",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nixpkgs_2": {
|
"nixpkgs_2": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1681920287,
|
"lastModified": 1677534593,
|
||||||
"narHash": "sha256-+/d6XQQfhhXVfqfLROJoqj3TuG38CAeoT6jO1g9r1k0=",
|
"narHash": "sha256-PuZSAHeq4/9pP/uYH1FcagQ3nLm/DrDrvKi/xC9glvw=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "3ad64d9e2d5bf80c877286102355b1625891ae9a",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_3": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1683014792,
|
||||||
|
"narHash": "sha256-6Va9iVtmmsw4raBc3QKvQT2KT/NGRWlvUlJj46zN8B8=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "1a411f23ba299db155a5b45d5e145b85a7aafc42",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_4": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1684570954,
|
||||||
|
"narHash": "sha256-FX5y4Sm87RWwfu9PI71XFvuRpZLowh00FQpIJ1WfXqE=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "645bc49f34fa8eff95479f0345ff57e55b53437e",
|
"rev": "3005f20ce0aaa58169cdee57c8aa12e5f1b6e1b3",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -103,15 +483,152 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nixpkgs_5": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681347147,
|
||||||
|
"narHash": "sha256-B+hTioRc3Jdf4SJyeCiO0fW5ShIznJk2OTiW2vOV+mc=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "1a9d9175ecc48ecd033062fa09b1834d13ae9c69",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "master",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_6": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1684570954,
|
||||||
|
"narHash": "sha256-FX5y4Sm87RWwfu9PI71XFvuRpZLowh00FQpIJ1WfXqE=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "3005f20ce0aaa58169cdee57c8aa12e5f1b6e1b3",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nur": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1684585623,
|
||||||
|
"narHash": "sha256-28XEOYjrpzlVDt11Elz7db8R3HwY/4B6EspFscSRsfk=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "NUR",
|
||||||
|
"rev": "4e959da0346280293e4008150d48b82fe055a311",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "NUR",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"pre-commit-hooks": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-compat": [
|
||||||
|
"devenv",
|
||||||
|
"flake-compat"
|
||||||
|
],
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"gitignore": "gitignore",
|
||||||
|
"nixpkgs": [
|
||||||
|
"devenv",
|
||||||
|
"nixpkgs"
|
||||||
|
],
|
||||||
|
"nixpkgs-stable": "nixpkgs-stable"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1677160285,
|
||||||
|
"narHash": "sha256-tBzpCjMP+P3Y3nKLYvdBkXBg3KvTMo3gvi8tLQaqXVY=",
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "pre-commit-hooks.nix",
|
||||||
|
"rev": "2bd861ab81469428d9c823ef72c4bb08372dd2c4",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "cachix",
|
||||||
|
"repo": "pre-commit-hooks.nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"root": {
|
"root": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"home-manager": "home-manager",
|
"agenix": "agenix",
|
||||||
"nix-vscode-extensions": "nix-vscode-extensions",
|
"devenv": "devenv",
|
||||||
"nixpkgs": "nixpkgs_2"
|
"home-manager": "home-manager_2",
|
||||||
|
"hyprland": "hyprland",
|
||||||
|
"nixpkgs": "nixpkgs_4",
|
||||||
|
"nixpkgs-stable": "nixpkgs-stable_2",
|
||||||
|
"nixpkgs-wayland": "nixpkgs-wayland",
|
||||||
|
"nur": "nur"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"wlroots": {
|
||||||
|
"flake": false,
|
||||||
|
"locked": {
|
||||||
|
"host": "gitlab.freedesktop.org",
|
||||||
|
"lastModified": 1682436395,
|
||||||
|
"narHash": "sha256-GGEjkQO9m7YLYIXIXM76HWdhjg4Ye+oafOtyaFAYKI4=",
|
||||||
|
"owner": "wlroots",
|
||||||
|
"repo": "wlroots",
|
||||||
|
"rev": "6830bfc17fd94709e2cdd4da0af989f102a26e59",
|
||||||
|
"type": "gitlab"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"host": "gitlab.freedesktop.org",
|
||||||
|
"owner": "wlroots",
|
||||||
|
"repo": "wlroots",
|
||||||
|
"type": "gitlab"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"xdph": {
|
||||||
|
"inputs": {
|
||||||
|
"hyprland-protocols": [
|
||||||
|
"hyprland",
|
||||||
|
"hyprland-protocols"
|
||||||
|
],
|
||||||
|
"nixpkgs": [
|
||||||
|
"hyprland",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1682439384,
|
||||||
|
"narHash": "sha256-zHDa8LCZs05TZHQSIZ3ucwyMPglBGHcqTBzfkLjYXTM=",
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "xdg-desktop-portal-hyprland",
|
||||||
|
"rev": "c0e233955568fbea4e859336f6d3d14d51294d7c",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "hyprwm",
|
||||||
|
"repo": "xdg-desktop-portal-hyprland",
|
||||||
|
"type": "github"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"root": "root",
|
"root": "root",
|
||||||
"version": 7
|
"version": 7
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,9 +18,14 @@
|
|||||||
# nix community's cache server
|
# nix community's cache server
|
||||||
extra-substituters = [
|
extra-substituters = [
|
||||||
"https://nix-community.cachix.org"
|
"https://nix-community.cachix.org"
|
||||||
|
"https://nixpkgs-wayland.cachix.org"
|
||||||
|
"https://xddxdd.cachix.org"
|
||||||
];
|
];
|
||||||
extra-trusted-public-keys = [
|
extra-trusted-public-keys = [
|
||||||
|
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
||||||
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
|
||||||
|
"nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA="
|
||||||
|
"xddxdd.cachix.org-1:ay1HJyNDYmlSwj5NXQG065C8LfoqqKaTNCyzeixGjf8="
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -29,14 +34,29 @@
|
|||||||
inputs = {
|
inputs = {
|
||||||
# flake inputs 有很多种引用方式,应用最广泛的是 github 的引用方式
|
# flake inputs 有很多种引用方式,应用最广泛的是 github 的引用方式
|
||||||
|
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; # 使用 nixos-unstable 分支
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; # 使用 nixos-unstable 分支 for nix flakes
|
||||||
|
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-22.11"; # unstable branch may be broken sometimes, use stable branch when necessary
|
||||||
|
|
||||||
|
# nix users repository
|
||||||
|
# used to install some packages not in nixpkgs
|
||||||
|
# e.g. wechat-uos/qqmusic/dingtalk
|
||||||
|
nur.url = github:nix-community/NUR;
|
||||||
|
|
||||||
home-manager.url = "github:nix-community/home-manager";
|
home-manager.url = "github:nix-community/home-manager";
|
||||||
# follows 是 inputs 中的继承语法
|
# follows 是 inputs 中的继承语法
|
||||||
# 这里使 home-manager 的 nixpkgs 这个 inputs 与当前 flake 的 inputs.nixpkgs 保持一致,避免依赖的 nixpkgs 版本不一致导致问题
|
# 这里使 home-manager 的 nixpkgs 这个 inputs 与当前 flake 的 inputs.nixpkgs 保持一致,避免依赖的 nixpkgs 版本不一致导致问题
|
||||||
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
# vscode 插件库
|
# modern window compositor
|
||||||
nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions";
|
hyprland.url = "github:hyprwm/Hyprland/v0.25.0";
|
||||||
|
# community wayland nixpkgs
|
||||||
|
nixpkgs-wayland.url = "github:nix-community/nixpkgs-wayland";
|
||||||
|
|
||||||
|
# use devenv to manage my development environment
|
||||||
|
devenv.url = "github:cachix/devenv/v0.6.2";
|
||||||
|
|
||||||
|
# secrets management, lock with git commit at 2023/5/15
|
||||||
|
agenix.url = "github:ryantm/agenix/db5637d10f797bb251b94ef9040b237f4702cde3";
|
||||||
};
|
};
|
||||||
|
|
||||||
# outputs 的参数都是 inputs 中定义的依赖项,可以通过它们的名称来引用。
|
# outputs 的参数都是 inputs 中定义的依赖项,可以通过它们的名称来引用。
|
||||||
@@ -46,50 +66,13 @@
|
|||||||
self,
|
self,
|
||||||
nixpkgs,
|
nixpkgs,
|
||||||
home-manager,
|
home-manager,
|
||||||
nix-vscode-extensions,
|
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
# 名为 nixosConfigurations 的 outputs 会在执行 `nixos-rebuild switch --flake .` 时被使用
|
|
||||||
# 默认情况下会使用与主机 hostname 同名的 nixosConfigurations,但是也可以通过 `--flake .#<name>` 来指定
|
|
||||||
nixosConfigurations = {
|
nixosConfigurations = {
|
||||||
# hostname 为 nixos-test 的主机会使用这个配置
|
|
||||||
# 这里使用了 nixpkgs.lib.nixosSystem 函数来构建配置,后面的 attributes set 是它的参数
|
|
||||||
# 在 nixos 上使用此命令部署配置:`nixos-rebuild switch --flake .#nixos-test`
|
|
||||||
nixos-test = nixpkgs.lib.nixosSystem {
|
|
||||||
system = "x86_64-linux";
|
|
||||||
|
|
||||||
# modules 中每个参数,都是一个 NixOS Module <https://nixos.org/manual/nixos/stable/index.html#sec-modularity>
|
|
||||||
# NixOS Module 可以是一个 attribute set,也可以是一个返回 attribute set 的函数
|
|
||||||
# 如果是函数,那么它的参数就是当前的 NixOS Module 的参数.
|
|
||||||
# 根据 Nix Wiki 对 NixOS modules 的描述,NixOS modules 函数的参数可以有这四个(详见本仓库中的 modules 文件):
|
|
||||||
#
|
|
||||||
# config: The configuration of the entire system
|
|
||||||
# options: All option declarations refined with all definition and declaration references.
|
|
||||||
# pkgs: The attribute set extracted from the Nix package collection and enhanced with the nixpkgs.config option.
|
|
||||||
# modulesPath: The location of the module directory of NixOS.
|
|
||||||
#
|
|
||||||
# nix flake 的 modules 系统可将配置模块化,提升配置的可维护性
|
|
||||||
# 默认只能传上面这四个参数,如果需要传其他参数,必须使用 specialArgs
|
|
||||||
modules = [
|
|
||||||
./hosts/nixos-test
|
|
||||||
|
|
||||||
# home-manager 作为 nixos 的一个 module
|
|
||||||
# 这样在 nixos-rebuild switch 时,home-manager 也会被自动部署,不需要额外执行 home-manager switch 命令
|
|
||||||
home-manager.nixosModules.home-manager
|
|
||||||
{
|
|
||||||
home-manager.useGlobalPkgs = true;
|
|
||||||
home-manager.useUserPackages = true;
|
|
||||||
|
|
||||||
# 使用 home-manager.extraSpecialArgs 自定义传递给 ./home 的参数
|
|
||||||
home-manager.extraSpecialArgs = inputs;
|
|
||||||
home-manager.users.ryan = import ./home;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
msi-rtx4090 = nixpkgs.lib.nixosSystem {
|
msi-rtx4090 = nixpkgs.lib.nixosSystem {
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
|
|
||||||
|
specialArgs = inputs;
|
||||||
modules = [
|
modules = [
|
||||||
./hosts/msi-rtx4090
|
./hosts/msi-rtx4090
|
||||||
|
|
||||||
@@ -108,8 +91,25 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
# 如果你在 x86_64-linux 平台上执行 nix build,那么默认会使用这个配置,或者也能通过 `.#<name>` 参数来指定非 default 的配置
|
nixos-test = nixpkgs.lib.nixosSystem {
|
||||||
# packages.x86_64-linux.default =
|
system = "x86_64-linux";
|
||||||
|
specialArgs = inputs;
|
||||||
|
modules = [
|
||||||
|
./hosts/nixos-test
|
||||||
|
|
||||||
|
# home-manager 作为 nixos 的一个 module
|
||||||
|
# 这样在 nixos-rebuild switch 时,home-manager 也会被自动部署,不需要额外执行 home-manager switch 命令
|
||||||
|
home-manager.nixosModules.home-manager
|
||||||
|
{
|
||||||
|
home-manager.useGlobalPkgs = true;
|
||||||
|
home-manager.useUserPackages = true;
|
||||||
|
|
||||||
|
# 使用 home-manager.extraSpecialArgs 自定义传递给 ./home 的参数
|
||||||
|
home-manager.extraSpecialArgs = inputs;
|
||||||
|
home-manager.users.ryan = import ./home;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,35 @@
|
|||||||
|
{ lib, stdenvNoCC, fetchgit }:
|
||||||
|
|
||||||
|
stdenvNoCC.mkDerivation rec {
|
||||||
|
pname = "archcraft-font";
|
||||||
|
version = "2023-05-07";
|
||||||
|
|
||||||
|
src = fetchgit {
|
||||||
|
url = "https://github.com/archcraft-os/archcraft-packages.git";
|
||||||
|
rev = "88030ee6d2df80db958541b53bd3673e081720cf"; # git commit id
|
||||||
|
sparseCheckout = [ "archcraft-fonts/files/icon-fonts/archcraft.ttf" ]; # only fetch the feather.ttf file
|
||||||
|
|
||||||
|
# the sha256 is used to verify the integrity of the downloaded source, and alse cache the build result.
|
||||||
|
# so if you copy other package src's sha256, you will get a cached build result of that package, and all configs in this file will be ignored.
|
||||||
|
# specify sha256 to empty and build it, then an error will indicate the correct sha256
|
||||||
|
sha256 = "sha256-DrGN8lN4Yr1RTyCUZhJjzKgCuC0vTnSWjOKovNg3T/U=";
|
||||||
|
};
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
install -Dm644 archcraft-fonts/files/icon-fonts/archcraft.ttf -t $out/share/fonts/truetype/
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
homepage = "https://github.com/archcraft-os/archcraft-packages";
|
||||||
|
description = "Archcraft icon font";
|
||||||
|
version = version;
|
||||||
|
longDescription = ''Archcraft icon font'';
|
||||||
|
license = licenses.mit;
|
||||||
|
maintainers = [ maintainers.ryan4yin ];
|
||||||
|
platforms = platforms.all;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
{ lib, stdenvNoCC, fetchgit }:
|
||||||
|
|
||||||
|
stdenvNoCC.mkDerivation rec {
|
||||||
|
pname = "icomoon-feather-font";
|
||||||
|
version = "2023-05-06";
|
||||||
|
|
||||||
|
# 参考 https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=ttf-icomoon-feather
|
||||||
|
src = fetchgit {
|
||||||
|
url = "https://github.com/adi1090x/polybar-themes.git";
|
||||||
|
rev = "47b66337a92a1afd2240ed7094ffcb039cc686cf"; # git commit id
|
||||||
|
sparseCheckout = [ "fonts/feather.ttf" ]; # only fetch the feather.ttf file
|
||||||
|
|
||||||
|
# the sha256 is used to verify the integrity of the downloaded source, and alse cache the build result.
|
||||||
|
# so if you copy other package src's sha256, you will get a cached build result of that package, and all configs in this file will be ignored.
|
||||||
|
# specify sha256 to empty and build it, then an error will indicate the correct sha256
|
||||||
|
sha256 = "sha256-R+UpUFkXDrxKcX7ljLara+1B1rOMdKGZiLQq1/ojgP4=";
|
||||||
|
};
|
||||||
|
|
||||||
|
installPhase = ''
|
||||||
|
runHook preInstall
|
||||||
|
|
||||||
|
install -Dm644 fonts/feather.ttf -t $out/share/fonts/truetype/
|
||||||
|
|
||||||
|
runHook postInstall
|
||||||
|
'';
|
||||||
|
|
||||||
|
meta = with lib; {
|
||||||
|
homepage = "https://github.com/feathericons/feather";
|
||||||
|
description = "Icomoon feather font";
|
||||||
|
version = version;
|
||||||
|
longDescription = ''
|
||||||
|
Feather is a collection of simply beautiful open source icons.
|
||||||
|
Each icon is designed on a 24x24 grid with an emphasis on simplicity, consistency, and flexibility.
|
||||||
|
'';
|
||||||
|
license = licenses.mit;
|
||||||
|
maintainers = [ maintainers.ryan4yin ];
|
||||||
|
platforms = platforms.all;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -4,7 +4,8 @@
|
|||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
./fcitx5
|
./fcitx5
|
||||||
./i3
|
./hyprland
|
||||||
|
# ./i3
|
||||||
./programs
|
./programs
|
||||||
./rofi
|
./rofi
|
||||||
./shell
|
./shell
|
||||||
|
|||||||
@@ -1,24 +1,34 @@
|
|||||||
{ config, pkgs, ... }:
|
{pkgs, config, lib, ... }: {
|
||||||
|
|
||||||
|
home.file.".config/fcitx5/profile".source = ./profile;
|
||||||
|
home.file.".config/fcitx5/profile-bak".source = ./profile; # used for backup
|
||||||
|
# fcitx5 每次切换输入法,就会修改 ~/.config/fcitx5/profile 文件,导致我用 hm 管理的配置被覆盖
|
||||||
|
# 解决方法是通过如下内置,每次 rebuild 前都先删除下 profile 文件
|
||||||
|
home.activation.removeExistingFcitx5Profile = lib.hm.dag.entryBefore ["checkLinkTargets"] ''
|
||||||
|
rm -f "${config.xdg.configHome}/fcitx5/profile"
|
||||||
|
'';
|
||||||
|
|
||||||
{
|
|
||||||
i18n.inputMethod = {
|
i18n.inputMethod = {
|
||||||
enabled = "fcitx5";
|
enabled = "fcitx5";
|
||||||
fcitx5.addons =
|
fcitx5.addons = with pkgs; [
|
||||||
let
|
# for flypy chinese input method
|
||||||
# 为了不使用默认的 rime-data,改用我自定义的小鹤音形数据,这里需要 override
|
|
||||||
# 参考 https://github.com/NixOS/nixpkgs/blob/e4246ae1e7f78b7087dce9c9da10d28d3725025f/pkgs/tools/inputmethods/fcitx5/fcitx5-rime.nix
|
|
||||||
config.packageOverrides = pkgs: {
|
|
||||||
fcitx5-rime = pkgs.fcitx5-rime.override {rimeDataPkgs = [
|
|
||||||
# 小鹤音形配置,配置来自 flypy.com 官方网盘的鼠须管配置压缩包「小鹤音形“鼠须管”for macOS.zip」
|
|
||||||
# 我仅修改了 default.yaml 文件,将其中的半角括号改为了直角括号「 与 」。
|
|
||||||
./rime-data-flypy
|
|
||||||
];};
|
|
||||||
};
|
|
||||||
in
|
|
||||||
with pkgs; [
|
|
||||||
fcitx5-rime
|
fcitx5-rime
|
||||||
|
# needed enable rime using configtool after installed
|
||||||
fcitx5-configtool
|
fcitx5-configtool
|
||||||
fcitx5-chinese-addons
|
fcitx5-chinese-addons
|
||||||
|
# fcitx5-mozc # japanese input method
|
||||||
|
fcitx5-gtk # gtk im module
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
systemd.user.sessionVariables = {
|
||||||
|
# copy from https://github.com/nix-community/home-manager/blob/master/modules/i18n/input-method/fcitx5.nix
|
||||||
|
GLFW_IM_MODULE = "fcitx";
|
||||||
|
GTK_IM_MODULE = "fcitx";
|
||||||
|
QT_IM_MODULE = "fcitx";
|
||||||
|
XMODIFIERS = "@im=fcitx";
|
||||||
|
INPUT_METHOD = "fcitx";
|
||||||
|
IMSETTINGS_MODULE = "fcitx";
|
||||||
|
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
[Groups/0]
|
||||||
|
# Group Name
|
||||||
|
Name=Other
|
||||||
|
# Layout
|
||||||
|
Default Layout=us
|
||||||
|
# Default Input Method
|
||||||
|
DefaultIM=rime
|
||||||
|
|
||||||
|
[Groups/0/Items/0]
|
||||||
|
# Name
|
||||||
|
Name=rime
|
||||||
|
# Layout
|
||||||
|
Layout=
|
||||||
|
|
||||||
|
[GroupOrder]
|
||||||
|
0=Other
|
||||||
|
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
# hyprland configs, based on https://github.com/notwidow/hyprland
|
||||||
|
home.file.".config/hypr" = {
|
||||||
|
source = ./hypr-conf;
|
||||||
|
# copy the scripts directory recursively
|
||||||
|
recursive = true;
|
||||||
|
};
|
||||||
|
home.file.".config/gtk-3.0" = {
|
||||||
|
source = ./gtk-3.0;
|
||||||
|
recursive = true;
|
||||||
|
};
|
||||||
|
home.file.".gtkrc-2.0".source = ./gtkrc-2.0;
|
||||||
|
home.file.".config/hypr/wallpapers/wallpaper.png".source = ../wallpapers/wallpaper.png;
|
||||||
|
|
||||||
|
# allow fontconfig to discover fonts and configurations installed through home.packages
|
||||||
|
fonts.fontconfig.enable = true;
|
||||||
|
|
||||||
|
systemd.user.sessionVariables = {
|
||||||
|
"NIXOS_OZONE_WL" = "1"; # for any ozone-based browser & electron apps to run on wayland
|
||||||
|
"MOZ_ENABLE_WAYLAND" = "1"; # for firefox to run on wayland
|
||||||
|
"MOZ_WEBRENDER" = "1";
|
||||||
|
|
||||||
|
# for hyprland with nvidia gpu, ref https://wiki.hyprland.org/Nvidia/
|
||||||
|
"LIBVA_DRIVER_NAME" = "nvidia";
|
||||||
|
"XDG_SESSION_TYPE" = "wayland";
|
||||||
|
"GBM_BACKEND" = "nvidia-drm";
|
||||||
|
"__GLX_VENDOR_LIBRARY_NAME" = "nvidia";
|
||||||
|
"WLR_NO_HARDWARE_CURSORS" = "1";
|
||||||
|
"WLR_EGL_NO_MODIFIRES" = "1";
|
||||||
|
};
|
||||||
|
|
||||||
|
# set cursor size and dpi for 4k monitor
|
||||||
|
# this is for xwayland
|
||||||
|
xresources.properties = {
|
||||||
|
"Xcursor.size" = 16;
|
||||||
|
"Xft.dpi" = 160;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
[Settings]
|
||||||
|
gtk-theme-name=Arc-Dark
|
||||||
|
gtk-icon-theme-name=Qogir-dark
|
||||||
|
gtk-font-name=Noto Sans 10
|
||||||
|
gtk-cursor-theme-name=Qogir-dark
|
||||||
|
gtk-cursor-theme-size=0
|
||||||
|
gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ
|
||||||
|
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
|
||||||
|
gtk-button-images=0
|
||||||
|
gtk-menu-images=0
|
||||||
|
gtk-enable-event-sounds=1
|
||||||
|
gtk-enable-input-feedback-sounds=1
|
||||||
|
gtk-xft-antialias=1
|
||||||
|
gtk-xft-hinting=1
|
||||||
|
gtk-xft-hintstyle=hintmedium
|
||||||
|
gtk-xft-rgba=rgb
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
# DO NOT EDIT! This file will be overwritten by LXAppearance.
|
||||||
|
# Any customization should be done in ~/.gtkrc-2.0.mine instead.
|
||||||
|
|
||||||
|
include "~/.gtkrc-2.0.mine"
|
||||||
|
gtk-theme-name="Arc-Dark"
|
||||||
|
gtk-icon-theme-name="Qogir-dark"
|
||||||
|
gtk-font-name="Noto Sans 10"
|
||||||
|
gtk-cursor-theme-name="Qogir-dark"
|
||||||
|
gtk-cursor-theme-size=0
|
||||||
|
gtk-toolbar-style=GTK_TOOLBAR_BOTH_HORIZ
|
||||||
|
gtk-toolbar-icon-size=GTK_ICON_SIZE_LARGE_TOOLBAR
|
||||||
|
gtk-button-images=0
|
||||||
|
gtk-menu-images=0
|
||||||
|
gtk-enable-event-sounds=1
|
||||||
|
gtk-enable-input-feedback-sounds=1
|
||||||
|
gtk-xft-antialias=1
|
||||||
|
gtk-xft-hinting=1
|
||||||
|
gtk-xft-hintstyle="hintmedium"
|
||||||
|
gtk-xft-rgba="rgb"
|
||||||
@@ -0,0 +1,211 @@
|
|||||||
|
## Hyprland configuration file for Archcraft
|
||||||
|
|
||||||
|
#-- Output ----------------------------------------------------
|
||||||
|
# Configure your Display resolution, offset, scale and Monitors here, use `hyprctl monitors` to get the info.
|
||||||
|
|
||||||
|
# format:
|
||||||
|
# monitor=name,resolution,position,scale
|
||||||
|
monitor=DP-2,3840x2160@144,0x0,1.6
|
||||||
|
workspace=DP-2,1
|
||||||
|
|
||||||
|
#-- Input ----------------------------------------------------
|
||||||
|
# Configure mouse and touchpad here.
|
||||||
|
input {
|
||||||
|
kb_layout=us
|
||||||
|
kb_variant=
|
||||||
|
kb_model=
|
||||||
|
kb_options=
|
||||||
|
kb_rules=
|
||||||
|
follow_mouse=1
|
||||||
|
natural_scroll=0
|
||||||
|
force_no_accel=0
|
||||||
|
# repeat_rate=
|
||||||
|
# repeat_delay=
|
||||||
|
numlock_by_default=1
|
||||||
|
}
|
||||||
|
|
||||||
|
#-- General ----------------------------------------------------
|
||||||
|
# General settings like MOD key, Gaps, Colors, etc.
|
||||||
|
general {
|
||||||
|
sensitivity=2.0
|
||||||
|
apply_sens_to_raw=0
|
||||||
|
|
||||||
|
gaps_in=5
|
||||||
|
gaps_out=10
|
||||||
|
|
||||||
|
border_size=4
|
||||||
|
col.active_border=0xFFB4A1DB
|
||||||
|
col.inactive_border=0xFF343A40
|
||||||
|
}
|
||||||
|
|
||||||
|
#-- Decoration ----------------------------------------------------
|
||||||
|
# Decoration settings like Rounded Corners, Opacity, Blur, etc.
|
||||||
|
decoration {
|
||||||
|
rounding=8 # Original: rounding=-1
|
||||||
|
multisample_edges=0
|
||||||
|
|
||||||
|
active_opacity=1.0
|
||||||
|
inactive_opacity=0.9
|
||||||
|
fullscreen_opacity=1.0
|
||||||
|
|
||||||
|
blur=0
|
||||||
|
blur_size=3 # minimum 1
|
||||||
|
blur_passes=1 # minimum 1, more passes = more resource intensive.
|
||||||
|
blur_ignore_opacity=0
|
||||||
|
|
||||||
|
# Your blur "amount" is blur_size * blur_passes, but high blur_size (over around 5-ish) will produce artifacts.
|
||||||
|
# if you want heavy blur, you need to up the blur_passes.
|
||||||
|
# the more passes, the more you can up the blur_size without noticing artifacts.
|
||||||
|
}
|
||||||
|
|
||||||
|
#-- Animations ----------------------------------------------------
|
||||||
|
animations {
|
||||||
|
enabled=1
|
||||||
|
animation=windows,1,8,default,popin 80%
|
||||||
|
animation=fadeOut,1,8,default
|
||||||
|
animation=fadeIn,1,8,default
|
||||||
|
animation=workspaces,1,8,default
|
||||||
|
#animation=workspaces,1,6,overshot
|
||||||
|
}
|
||||||
|
|
||||||
|
#-- Dwindle ----------------------------------------------------
|
||||||
|
dwindle {
|
||||||
|
pseudotile=0 # enable pseudotiling on dwindle
|
||||||
|
}
|
||||||
|
|
||||||
|
#-- Window Rules ----------------------------------------------------
|
||||||
|
windowrule=float,foot-float
|
||||||
|
windowrule=float,yad|nm-connection-editor|pavucontrolk
|
||||||
|
windowrule=float,xfce-polkit|kvantummanager|qt5ct
|
||||||
|
windowrule=float,feh|imv|Gpicview|Gimp|nomacs
|
||||||
|
windowrule=float,VirtualBox Manager|qemu|Qemu-system-x86_64
|
||||||
|
windowrule=float,xfce4-appfinder
|
||||||
|
|
||||||
|
windowrule=float,foot-full
|
||||||
|
windowrule=move 0 0,foot-full
|
||||||
|
windowrule=size 100% 100%,foot-full
|
||||||
|
|
||||||
|
windowrule=float,wlogout
|
||||||
|
windowrule=move 0 0,wlogout
|
||||||
|
windowrule=size 100% 100%,wlogout
|
||||||
|
windowrule=animation slide,wlogout
|
||||||
|
|
||||||
|
#-- Keybindings ----------------------------------------------------
|
||||||
|
$term = alacritty
|
||||||
|
$app_launcher = ~/.config/hypr/scripts/menu
|
||||||
|
$volume = ~/.config/hypr/scripts/volume
|
||||||
|
$backlight = ~/.config/hypr/scripts/brightness
|
||||||
|
$screenshot = ~/.config/hypr/scripts/screenshot
|
||||||
|
$lockscreen = ~/.config/hypr/scripts/lockscreen
|
||||||
|
$wlogout = ~/.config/hypr/scripts/wlogout
|
||||||
|
$colorpicker = ~/.config/hypr/scripts/colorpicker
|
||||||
|
$files = thunar
|
||||||
|
$editor = code # vscode
|
||||||
|
$browser = firefox
|
||||||
|
|
||||||
|
# -- Terminal --
|
||||||
|
bind=SUPER,Return,exec,$term
|
||||||
|
|
||||||
|
# -- Wofi --
|
||||||
|
bind=SUPER,D,exec,$app_launcher
|
||||||
|
|
||||||
|
# -- Hyprland --
|
||||||
|
bind=SUPER,Q,killactive,
|
||||||
|
bind=CTRLALT,Delete,exit,
|
||||||
|
bind=SUPER,F,fullscreen,
|
||||||
|
bind=SUPER,Space,togglefloating,
|
||||||
|
bind=SUPER,S,pseudo,
|
||||||
|
|
||||||
|
# -- Misc --
|
||||||
|
bind=SUPER,N,exec,nm-connection-editor # need install network-manager-applet
|
||||||
|
bind=SUPER,P,exec,$colorpicker
|
||||||
|
bind=CTRLALT,L,exec,$lockscreen
|
||||||
|
bind=SUPERSHIFT,X,exec,$wlogout
|
||||||
|
|
||||||
|
# -- Some nice mouse binds --
|
||||||
|
bindm=SUPER,mouse:272,movewindow
|
||||||
|
bindm=SUPER,mouse:273,resizewindow
|
||||||
|
|
||||||
|
# -- Function keys --
|
||||||
|
bind=,XF86MonBrightnessUp,exec,$backlight --inc
|
||||||
|
bind=,XF86MonBrightnessDown,exec,$backlight --dec
|
||||||
|
bind=,XF86AudioRaiseVolume,exec,$volume --inc
|
||||||
|
bind=,XF86AudioLowerVolume,exec,$volume --dec
|
||||||
|
bind=,XF86AudioMute,exec,$volume --toggle
|
||||||
|
bind=,XF86AudioMicMute,exec,$volume --toggle-mic
|
||||||
|
bind=,XF86AudioNext,exec,mpc next
|
||||||
|
bind=,XF86AudioPrev,exec,mpc prev
|
||||||
|
bind=,XF86AudioPlay,exec,mpc toggle
|
||||||
|
bind=,XF86AudioStop,exec,mpc stop
|
||||||
|
|
||||||
|
# -- Screenshots --
|
||||||
|
bind=,Print,exec,$screenshot --now
|
||||||
|
bind=SUPER,Print,exec,$screenshot --win
|
||||||
|
bind=CTRL,Print,exec,$screenshot --area
|
||||||
|
|
||||||
|
# Focus
|
||||||
|
bind=SUPER,left,movefocus,l
|
||||||
|
bind=SUPER,right,movefocus,r
|
||||||
|
bind=SUPER,up,movefocus,u
|
||||||
|
bind=SUPER,down,movefocus,d
|
||||||
|
|
||||||
|
# Move
|
||||||
|
bind=SUPERSHIFT,left,movewindow,l
|
||||||
|
bind=SUPERSHIFT,right,movewindow,r
|
||||||
|
bind=SUPERSHIFT,up,movewindow,u
|
||||||
|
bind=SUPERSHIFT,down,movewindow,d
|
||||||
|
|
||||||
|
# Resize
|
||||||
|
bind=SUPERCTRL,left,resizeactive,-20 0
|
||||||
|
bind=SUPERCTRL,right,resizeactive,20 0
|
||||||
|
bind=SUPERCTRL,up,resizeactive,0 -20
|
||||||
|
bind=SUPERCTRL,down,resizeactive,0 20
|
||||||
|
|
||||||
|
# Workspaces
|
||||||
|
bind=SUPER,1,workspace,1
|
||||||
|
bind=SUPER,2,workspace,2
|
||||||
|
bind=SUPER,3,workspace,3
|
||||||
|
bind=SUPER,4,workspace,4
|
||||||
|
bind=SUPER,5,workspace,5
|
||||||
|
bind=SUPER,6,workspace,6
|
||||||
|
bind=SUPER,7,workspace,7
|
||||||
|
bind=SUPER,8,workspace,8
|
||||||
|
bind=SUPER,9,workspace,9
|
||||||
|
bind=SUPER,0,workspace,10
|
||||||
|
|
||||||
|
# Send to Workspaces
|
||||||
|
bind=SUPERSHIFT,1,movetoworkspace,1
|
||||||
|
bind=SUPERSHIFT,2,movetoworkspace,2
|
||||||
|
bind=SUPERSHIFT,3,movetoworkspace,3
|
||||||
|
bind=SUPERSHIFT,4,movetoworkspace,4
|
||||||
|
bind=SUPERSHIFT,5,movetoworkspace,5
|
||||||
|
bind=SUPERSHIFT,6,movetoworkspace,6
|
||||||
|
bind=SUPERSHIFT,7,movetoworkspace,7
|
||||||
|
bind=SUPERSHIFT,8,movetoworkspace,8
|
||||||
|
bind=SUPERSHIFT,9,movetoworkspace,9
|
||||||
|
bind=SUPERSHIFT,0,movetoworkspace,10
|
||||||
|
|
||||||
|
bind=SUPER,mouse_down,workspace,e+1
|
||||||
|
bind=SUPER,mouse_up,workspace,e-1
|
||||||
|
|
||||||
|
#-- Startup ----------------------------------------------------
|
||||||
|
exec-once=~/.config/hypr/scripts/startup
|
||||||
|
|
||||||
|
|
||||||
|
#-- Fcitx5 input method ----------------------------------------------------
|
||||||
|
windowrule=pseudo,fcitx # enable this will make fcitx5 works, but fcitx5-configtool will not work!
|
||||||
|
exec-once=cp ~/.config/fcitx5/profile-bak ~/.config/fcitx5/profile # restore fcitx5 profile manged by nixos
|
||||||
|
exec-once=fcitx5 -d --replace # start fcitx5 daemon
|
||||||
|
bind=ALT,E,exec,pkill fcitx5 -9;sleep 1;fcitx5 -d --replace; sleep 1;fcitx5-remote -r
|
||||||
|
|
||||||
|
|
||||||
|
# -- Fix input method in vscode
|
||||||
|
exec-once = hyprctl setcursor "Bibata-Modern-Ice" 24
|
||||||
|
# 效果是 wayland 原生窗口缩放完全正常
|
||||||
|
# xwayland 窗口先渲染到 200% 再降到 hyprland config 里 monitor 设置的值,看上去和原生没啥区别
|
||||||
|
# 相比较一开始的方案输入法字体大小也正确了.唯一有点问题的可能是 xwayland 窗口下的鼠标指针大小不对
|
||||||
|
exec-once = xprop -root -f _XWAYLAND_GLOBAL_OUTPUT_SCALE 32c -set _XWAYLAND_GLOBAL_OUTPUT_SCALE 2
|
||||||
|
exec-once = xrdb -merge ~/.Xresources
|
||||||
|
# env = GDK_SCALE,2
|
||||||
|
env = XCURSOR_SIZE,48
|
||||||
|
env = XCURSOR_THEME,"Bibata-Modern-Ice"
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
## Mako configuration file
|
||||||
|
|
||||||
|
# GLOBAL CONFIGURATION OPTIONS
|
||||||
|
max-history=100
|
||||||
|
sort=-time
|
||||||
|
|
||||||
|
# BINDING OPTIONS
|
||||||
|
on-button-left=dismiss
|
||||||
|
on-button-middle=none
|
||||||
|
on-button-right=dismiss-all
|
||||||
|
on-touch=dismiss
|
||||||
|
on-notify=exec mpv /usr/share/sounds/freedesktop/stereo/message.oga
|
||||||
|
|
||||||
|
# STYLE OPTIONS
|
||||||
|
font=JetBrains Mono 10
|
||||||
|
width=300
|
||||||
|
height=100
|
||||||
|
margin=10
|
||||||
|
padding=15
|
||||||
|
border-size=2
|
||||||
|
border-radius=0
|
||||||
|
icons=1
|
||||||
|
max-icon-size=48
|
||||||
|
icon-location=left
|
||||||
|
markup=1
|
||||||
|
actions=1
|
||||||
|
history=1
|
||||||
|
text-alignment=left
|
||||||
|
default-timeout=5000
|
||||||
|
ignore-timeout=0
|
||||||
|
max-visible=5
|
||||||
|
layer=overlay
|
||||||
|
anchor=top-right
|
||||||
|
|
||||||
|
background-color=#1e1e2e
|
||||||
|
text-color=#d9e0ee
|
||||||
|
border-color=#313244
|
||||||
|
progress-color=over #89b4fa
|
||||||
|
|
||||||
|
[urgency=low]
|
||||||
|
border-color=#313244
|
||||||
|
default-timeout=2000
|
||||||
|
|
||||||
|
[urgency=normal]
|
||||||
|
border-color=#313244
|
||||||
|
default-timeout=5000
|
||||||
|
|
||||||
|
[urgency=high]
|
||||||
|
border-color=#f38ba8
|
||||||
|
text-color=#f38ba8
|
||||||
|
default-timeout=0
|
||||||
|
|
||||||
|
[category=mpd]
|
||||||
|
border-color=#f9e2af
|
||||||
|
default-timeout=2000
|
||||||
|
group-by=category
|
||||||
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 28 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1,54 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
## Script To Manage Brightness For Archcraft (in Wayland).
|
||||||
|
|
||||||
|
iDIR="$HOME/.config/hypr/mako/icons"
|
||||||
|
|
||||||
|
# Get brightness
|
||||||
|
get_backlight() {
|
||||||
|
LIGHT=$(printf "%.0f\n" $(light -G))
|
||||||
|
echo "${LIGHT}%"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get icons
|
||||||
|
get_icon() {
|
||||||
|
backlight="$(get_backlight)"
|
||||||
|
current="${backlight%%%}"
|
||||||
|
if [[ ("$current" -ge "0") && ("$current" -le "20") ]]; then
|
||||||
|
icon="$iDIR/brightness-20.png"
|
||||||
|
elif [[ ("$current" -ge "20") && ("$current" -le "40") ]]; then
|
||||||
|
icon="$iDIR/brightness-40.png"
|
||||||
|
elif [[ ("$current" -ge "40") && ("$current" -le "60") ]]; then
|
||||||
|
icon="$iDIR/brightness-60.png"
|
||||||
|
elif [[ ("$current" -ge "60") && ("$current" -le "80") ]]; then
|
||||||
|
icon="$iDIR/brightness-80.png"
|
||||||
|
elif [[ ("$current" -ge "80") && ("$current" -le "100") ]]; then
|
||||||
|
icon="$iDIR/brightness-100.png"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Notify
|
||||||
|
notify_user() {
|
||||||
|
notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$icon" "Brightness : $(get_backlight)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Increase brightness
|
||||||
|
inc_backlight() {
|
||||||
|
light -A 5 && get_icon && notify_user
|
||||||
|
}
|
||||||
|
|
||||||
|
# Decrease brightness
|
||||||
|
dec_backlight() {
|
||||||
|
light -U 5 && get_icon && notify_user
|
||||||
|
}
|
||||||
|
|
||||||
|
# Execute accordingly
|
||||||
|
if [[ "$1" == "--get" ]]; then
|
||||||
|
get_backlight
|
||||||
|
elif [[ "$1" == "--inc" ]]; then
|
||||||
|
inc_backlight
|
||||||
|
elif [[ "$1" == "--dec" ]]; then
|
||||||
|
dec_backlight
|
||||||
|
else
|
||||||
|
get_backlight
|
||||||
|
fi
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
## Simple Script To Pick Color Quickly.
|
||||||
|
|
||||||
|
color=$(grim -g "$(slurp -b 1B1F2800 -p)" -t ppm - | convert - -format '%[pixel:p{0,0}]' txt:- | tail -n1 | cut -d' ' -f4)
|
||||||
|
image=/tmp/${color}.png
|
||||||
|
|
||||||
|
main() {
|
||||||
|
if [[ "$color" ]]; then
|
||||||
|
# copy color code to clipboard
|
||||||
|
echo $color | tr -d "\n" | wl-copy
|
||||||
|
# generate preview
|
||||||
|
convert -size 48x48 xc:"$color" ${image}
|
||||||
|
# notify about it
|
||||||
|
notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i ${image} "$color, copied to clipboard."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Run the script
|
||||||
|
main
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# Times the screen off and puts it to background
|
||||||
|
swayidle \
|
||||||
|
timeout 300 'swaymsg "output * power off"' \
|
||||||
|
resume 'swaymsg "output * power on"' &
|
||||||
|
# Locks the screen immediately
|
||||||
|
swaylock
|
||||||
|
# Kills last background task so idle timer doesn't keep running
|
||||||
|
kill %%
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
## launch wofi with alt config
|
||||||
|
|
||||||
|
CONFIG="$HOME/.config/hypr/wofi/config"
|
||||||
|
STYLE="$HOME/.config/hypr/wofi/style.css"
|
||||||
|
COLORS="$HOME/.config/hypr/wofi/colors"
|
||||||
|
|
||||||
|
if [[ ! $(pidof wofi) ]]; then
|
||||||
|
wofi --show drun --prompt 'Search...' --conf ${CONFIG} --style ${STYLE} --color ${COLORS}
|
||||||
|
else
|
||||||
|
pkill wofi
|
||||||
|
fi
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
## launch mako with alt config
|
||||||
|
|
||||||
|
CONFIG="$HOME/.config/hypr/mako/config"
|
||||||
|
|
||||||
|
if [[ ! $(pidof mako) ]]; then
|
||||||
|
mako --config ${CONFIG}
|
||||||
|
fi
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
## Script to take screenshots with grim, slurp (in Wayland)
|
||||||
|
|
||||||
|
iDIR="$HOME/.config/hypr/mako/icons"
|
||||||
|
|
||||||
|
time=$(date +%Y-%m-%d-%H-%M-%S)
|
||||||
|
dir="$(xdg-user-dir PICTURES)/Screenshots" # need
|
||||||
|
file="Screenshot_${time}_${RANDOM}.png"
|
||||||
|
|
||||||
|
# notify and view screenshot
|
||||||
|
notify_cmd_shot="notify-send -h string:x-canonical-private-synchronous:shot-notify -u low -i ${iDIR}/picture.png"
|
||||||
|
notify_view () {
|
||||||
|
${notify_cmd_shot} "Copied to clipboard."
|
||||||
|
imv ${dir}/"$file"
|
||||||
|
if [[ -e "$dir/$file" ]]; then
|
||||||
|
${notify_cmd_shot} "Screenshot Saved."
|
||||||
|
else
|
||||||
|
${notify_cmd_shot} "Screenshot Deleted."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# take shots
|
||||||
|
shotnow () {
|
||||||
|
cd ${dir} && grim - | tee "$file" | wl-copy
|
||||||
|
notify_view
|
||||||
|
}
|
||||||
|
|
||||||
|
shotwin () {
|
||||||
|
w_pos=$(hyprctl activewindow | grep 'at:' | cut -d':' -f2 | tr -d ' ' | tail -n1)
|
||||||
|
w_size=$(hyprctl activewindow | grep 'size:' | cut -d':' -f2 | tr -d ' ' | tail -n1 | sed s/,/x/g)
|
||||||
|
cd ${dir} && grim -g "$w_pos $w_size" - | tee "$file" | wl-copy
|
||||||
|
notify_view
|
||||||
|
}
|
||||||
|
|
||||||
|
shotarea () {
|
||||||
|
cd ${dir} && grim -g "$(slurp -b 1B1F28CC -c E06B74ff -s C778DD0D -w 2)" - | tee "$file" | wl-copy
|
||||||
|
notify_view
|
||||||
|
}
|
||||||
|
|
||||||
|
if [[ ! -d "$dir" ]]; then
|
||||||
|
mkdir -p "$dir"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ "$1" == "--now" ]]; then
|
||||||
|
shotnow
|
||||||
|
elif [[ "$1" == "--area" ]]; then
|
||||||
|
shotarea
|
||||||
|
elif [[ "$1" == "--win" ]]; then
|
||||||
|
shotwin
|
||||||
|
else
|
||||||
|
echo -e "Available Options : --now --win --area"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
## Autostart Programs
|
||||||
|
|
||||||
|
# Kill already running process
|
||||||
|
_ps=(waybar mako mpd)
|
||||||
|
for _prs in "${_ps[@]}"; do
|
||||||
|
if [[ $(pidof ${_prs}) ]]; then
|
||||||
|
killall -9 ${_prs}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Set wallpaper
|
||||||
|
swaybg --output '*' --mode fill --image ~/.config/hypr/wallpapers/wallpaper.png &
|
||||||
|
|
||||||
|
# Lauch notification daemon (mako)
|
||||||
|
~/.config/hypr/scripts/notifications &
|
||||||
|
|
||||||
|
# Lauch statusbar (waybar)
|
||||||
|
~/.config/hypr/scripts/statusbar &
|
||||||
|
|
||||||
|
# Start mpd
|
||||||
|
exec mpd &
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
## launch waybar with alt config
|
||||||
|
|
||||||
|
CONFIG="$HOME/.config/hypr/waybar/config"
|
||||||
|
STYLE="$HOME/.config/hypr/waybar/style.css"
|
||||||
|
|
||||||
|
if [[ ! $(pidof waybar) ]]; then
|
||||||
|
waybar --bar main-bar --log-level error --config ${CONFIG} --style ${STYLE}
|
||||||
|
fi
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
## Script To Manage Speaker Volume For Archcraft (in Wayland).
|
||||||
|
|
||||||
|
iDIR="$HOME/.config/hypr/mako/icons"
|
||||||
|
|
||||||
|
# Get Volume
|
||||||
|
get_volume() {
|
||||||
|
volume=$(amixer get Master | tail -n1 | awk -F ' ' '{print $5}' | tr -d '[]')
|
||||||
|
echo "$volume"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Get icons
|
||||||
|
get_icon() {
|
||||||
|
vol="$(get_volume)"
|
||||||
|
current="${vol%%%}"
|
||||||
|
if [[ "$current" -eq "0" ]]; then
|
||||||
|
icon="$iDIR/volume-mute.png"
|
||||||
|
elif [[ ("$current" -ge "0") && ("$current" -le "30") ]]; then
|
||||||
|
icon="$iDIR/volume-low.png"
|
||||||
|
elif [[ ("$current" -ge "30") && ("$current" -le "60") ]]; then
|
||||||
|
icon="$iDIR/volume-mid.png"
|
||||||
|
elif [[ ("$current" -ge "60") && ("$current" -le "100") ]]; then
|
||||||
|
icon="$iDIR/volume-high.png"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Notify
|
||||||
|
notify_user() {
|
||||||
|
notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$icon" "Volume : $(get_volume)"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Increase Volume
|
||||||
|
inc_volume() {
|
||||||
|
amixer -Mq set Master,0 5%+ unmute && get_icon && notify_user
|
||||||
|
}
|
||||||
|
|
||||||
|
# Decrease Volume
|
||||||
|
dec_volume() {
|
||||||
|
amixer -Mq set Master,0 5%- unmute && get_icon && notify_user
|
||||||
|
}
|
||||||
|
|
||||||
|
# Toggle Mute
|
||||||
|
toggle_mute() {
|
||||||
|
amixer get Master | grep '\[on\]' &>/dev/null
|
||||||
|
if [[ "$?" == 0 ]]; then
|
||||||
|
amixer set Master toggle && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$iDIR/volume-mute.png" "Mute"
|
||||||
|
else
|
||||||
|
amixer set Master toggle && get_icon && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$icon" "Unmute"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Toggle Mic
|
||||||
|
toggle_mic() {
|
||||||
|
amixer get Capture | grep '\[on\]' &>/dev/null
|
||||||
|
if [[ "$?" == 0 ]]; then
|
||||||
|
amixer -D pulse sset Capture toggle && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$iDIR/microphone-mute.png" "Microphone Switched OFF"
|
||||||
|
else
|
||||||
|
amixer -D pulse sset Capture toggle && get_icon && notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$iDIR/microphone.png" "Microphone Switched ON"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Execute accordingly
|
||||||
|
if [[ "$1" == "--get" ]]; then
|
||||||
|
get_volume
|
||||||
|
elif [[ "$1" == "--inc" ]]; then
|
||||||
|
inc_volume
|
||||||
|
elif [[ "$1" == "--dec" ]]; then
|
||||||
|
dec_volume
|
||||||
|
elif [[ "$1" == "--toggle" ]]; then
|
||||||
|
toggle_mute
|
||||||
|
elif [[ "$1" == "--toggle-mic" ]]; then
|
||||||
|
toggle_mic
|
||||||
|
else
|
||||||
|
get_volume
|
||||||
|
fi
|
||||||
@@ -0,0 +1,120 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
import subprocess
|
||||||
|
from pyquery import PyQuery # install using `pip install pyquery`
|
||||||
|
import json
|
||||||
|
|
||||||
|
# weather icons
|
||||||
|
weather_icons = {
|
||||||
|
"sunnyDay": "滛",
|
||||||
|
"clearNight": "望",
|
||||||
|
"cloudyFoggyDay": "",
|
||||||
|
"cloudyFoggyNight": "",
|
||||||
|
"rainyDay": "",
|
||||||
|
"rainyNight": "",
|
||||||
|
"snowyIcyDay": "",
|
||||||
|
"snowyIcyNight": "",
|
||||||
|
"severe": "",
|
||||||
|
"default": "",
|
||||||
|
}
|
||||||
|
|
||||||
|
# get location_id
|
||||||
|
# to get your own location_id, go to https://weather.com & search your location.
|
||||||
|
# once you choose your location, you can see the location_id in the URL(64 chars long hex string)
|
||||||
|
# Shenzen, Guangdong's location id: https://weather.com/en-IN/weather/today/l/7a4684e0789c881e79935986f2e9e5ab05b0104ac4310fd8818006dfb66092c3
|
||||||
|
location_id = "7a4684e0789c881e79935986f2e9e5ab05b0104ac4310fd8818006dfb66092c3"
|
||||||
|
|
||||||
|
# get html page
|
||||||
|
url = "https://weather.com/en-IN/weather/today/l/" + location_id
|
||||||
|
html_data = PyQuery(url=url)
|
||||||
|
|
||||||
|
# current temperature
|
||||||
|
temp = html_data("span[data-testid='TemperatureValue']").eq(0).text()
|
||||||
|
# print(temp)
|
||||||
|
|
||||||
|
# current status phrase
|
||||||
|
status = html_data("div[data-testid='wxPhrase']").text()
|
||||||
|
status = f"{status[:16]}.." if len(status) > 17 else status
|
||||||
|
# print(status)
|
||||||
|
|
||||||
|
# status code
|
||||||
|
status_code = html_data("#regionHeader").attr("class").split(" ")[2].split("-")[2]
|
||||||
|
# print(status_code)
|
||||||
|
|
||||||
|
# status icon
|
||||||
|
icon = (
|
||||||
|
weather_icons[status_code]
|
||||||
|
if status_code in weather_icons
|
||||||
|
else weather_icons["default"]
|
||||||
|
)
|
||||||
|
# print(icon)
|
||||||
|
|
||||||
|
# temperature feels like
|
||||||
|
temp_feel = html_data(
|
||||||
|
"div[data-testid='FeelsLikeSection'] > span[data-testid='TemperatureValue']"
|
||||||
|
).text()
|
||||||
|
temp_feel_text = f"Feels like {temp_feel}c"
|
||||||
|
# print(temp_feel_text)
|
||||||
|
|
||||||
|
# min-max temperature
|
||||||
|
temp_min = (
|
||||||
|
html_data("div[data-testid='wxData'] > span[data-testid='TemperatureValue']")
|
||||||
|
.eq(0)
|
||||||
|
.text()
|
||||||
|
)
|
||||||
|
temp_max = (
|
||||||
|
html_data("div[data-testid='wxData'] > span[data-testid='TemperatureValue']")
|
||||||
|
.eq(1)
|
||||||
|
.text()
|
||||||
|
)
|
||||||
|
temp_min_max = f" {temp_min}\t\t {temp_max}"
|
||||||
|
# print(temp_min_max)
|
||||||
|
|
||||||
|
# wind speed
|
||||||
|
wind_speed = html_data("span[data-testid='Wind']").text().split("\n")[1]
|
||||||
|
wind_text = f"煮 {wind_speed}"
|
||||||
|
# print(wind_text)
|
||||||
|
|
||||||
|
# humidity
|
||||||
|
humidity = html_data("span[data-testid='PercentageValue']").text()
|
||||||
|
humidity_text = f" {humidity}"
|
||||||
|
# print(humidity_text)
|
||||||
|
|
||||||
|
# visibility
|
||||||
|
visbility = html_data("span[data-testid='VisibilityValue']").text()
|
||||||
|
visbility_text = f" {visbility}"
|
||||||
|
# print(visbility_text)
|
||||||
|
|
||||||
|
# air quality index
|
||||||
|
air_quality_index = html_data("text[data-testid='DonutChartValue']").text()
|
||||||
|
# print(air_quality_index)
|
||||||
|
|
||||||
|
# hourly rain prediction
|
||||||
|
prediction = html_data("section[aria-label='Hourly Forecast']")(
|
||||||
|
"div[data-testid='SegmentPrecipPercentage'] > span"
|
||||||
|
).text()
|
||||||
|
prediction = prediction.replace("Chance of Rain", "")
|
||||||
|
prediction = f"\n\n (hourly) {prediction}" if len(prediction) > 0 else prediction
|
||||||
|
# print(prediction)
|
||||||
|
|
||||||
|
# tooltip text
|
||||||
|
tooltip_text = str.format(
|
||||||
|
"\t\t{}\t\t\n{}\n{}\n{}\n\n{}\n{}\n{}{}",
|
||||||
|
f'<span size="xx-large">{temp}</span>',
|
||||||
|
f"<big>{icon}</big>",
|
||||||
|
f"<big>{status}</big>",
|
||||||
|
f"<small>{temp_feel_text}</small>",
|
||||||
|
f"<big>{temp_min_max}</big>",
|
||||||
|
f"{wind_text}\t{humidity_text}",
|
||||||
|
f"{visbility_text}\tAQI {air_quality_index}",
|
||||||
|
f"<i>{prediction}</i>",
|
||||||
|
)
|
||||||
|
|
||||||
|
# print waybar module data
|
||||||
|
out_data = {
|
||||||
|
"text": f"{icon} {temp}",
|
||||||
|
"alt": status,
|
||||||
|
"tooltip": tooltip_text,
|
||||||
|
"class": status_code,
|
||||||
|
}
|
||||||
|
print(json.dumps(out_data))
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
## wlogout with alt layout and style file
|
||||||
|
|
||||||
|
LAYOUT="$HOME/.config/hypr/wlogout/layout"
|
||||||
|
STYLE="$HOME/.config/hypr/wlogout/style.css"
|
||||||
|
|
||||||
|
if [[ ! $(pidof wlogout) ]]; then
|
||||||
|
wlogout --layout ${LAYOUT} --css ${STYLE} \
|
||||||
|
--column-spacing 20 \
|
||||||
|
--row-spacing 20 \
|
||||||
|
--margin-top 200 \
|
||||||
|
--margin-bottom 200 \
|
||||||
|
--margin-left 150 \
|
||||||
|
--margin-right 150
|
||||||
|
else
|
||||||
|
pkill wlogout
|
||||||
|
fi
|
||||||
@@ -0,0 +1,222 @@
|
|||||||
|
{
|
||||||
|
"name": "main-bar",
|
||||||
|
"id": "main-bar",
|
||||||
|
"layer": "top",
|
||||||
|
"mode": "dock",
|
||||||
|
"exclusive": true,
|
||||||
|
"passthrough": false,
|
||||||
|
"height": 32,
|
||||||
|
"spacing": 6,
|
||||||
|
"margin": 0,
|
||||||
|
"margin-top": 0,
|
||||||
|
"margin-bottom": 0,
|
||||||
|
"margin-left": 0,
|
||||||
|
"margin-right": 0,
|
||||||
|
"fixed-center": true,
|
||||||
|
"ipc": true,
|
||||||
|
|
||||||
|
"modules-left": [
|
||||||
|
"custom/menu",
|
||||||
|
"wlr/workspaces",
|
||||||
|
"cpu",
|
||||||
|
"memory",
|
||||||
|
"disk"
|
||||||
|
],
|
||||||
|
"modules-center": [
|
||||||
|
"mpd",
|
||||||
|
"tray"
|
||||||
|
],
|
||||||
|
"modules-right": [
|
||||||
|
"pulseaudio",
|
||||||
|
"custom/weather",
|
||||||
|
"network",
|
||||||
|
"battery",
|
||||||
|
"clock",
|
||||||
|
"custom/power"
|
||||||
|
],
|
||||||
|
|
||||||
|
// waybar-backlight
|
||||||
|
"backlight": {
|
||||||
|
"interval": 2,
|
||||||
|
"align": 0,
|
||||||
|
"rotate": 0,
|
||||||
|
//"device": "amdgpu_bl0",
|
||||||
|
"format": "{icon} {percent}%",
|
||||||
|
"format-icons": [
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
// Commands to execute on events
|
||||||
|
"on-click": "",
|
||||||
|
"on-click-middle": "",
|
||||||
|
"on-click-right": "",
|
||||||
|
"on-update": "",
|
||||||
|
"on-scroll-up": "light -A 5%",
|
||||||
|
"on-scroll-down": "light -U 5%",
|
||||||
|
"smooth-scrolling-threshold": 1,
|
||||||
|
},
|
||||||
|
"wlr/workspaces": {
|
||||||
|
"format": "{icon}",
|
||||||
|
"on-click": "activate",
|
||||||
|
"all-outputs": true,
|
||||||
|
"format-icons": {
|
||||||
|
"1": "",
|
||||||
|
"2": "",
|
||||||
|
"3": "",
|
||||||
|
"4": "",
|
||||||
|
"5": "ﭮ",
|
||||||
|
"6": "",
|
||||||
|
"7": "",
|
||||||
|
"8": "",
|
||||||
|
"9": "",
|
||||||
|
"10": "﮼",
|
||||||
|
"focused": "",
|
||||||
|
"default": ""
|
||||||
|
}
|
||||||
|
},
|
||||||
|
// waybar-battery
|
||||||
|
"battery": {
|
||||||
|
"interval": 60,
|
||||||
|
"align": 0,
|
||||||
|
"rotate": 0,
|
||||||
|
//"bat": "BAT1",
|
||||||
|
//"adapter": "ACAD",
|
||||||
|
"full-at": 100,
|
||||||
|
"design-capacity": false,
|
||||||
|
"states": {
|
||||||
|
"good": 95,
|
||||||
|
"warning": 30,
|
||||||
|
"critical": 15
|
||||||
|
},
|
||||||
|
"format": "{icon} {capacity}%",
|
||||||
|
"format-charging": " {capacity}%",
|
||||||
|
"format-plugged": " {capacity}%",
|
||||||
|
"format-full": "{icon} Full",
|
||||||
|
//"format-good": "",
|
||||||
|
"format-alt": "{icon} {time}",
|
||||||
|
"format-icons": [
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
""
|
||||||
|
],
|
||||||
|
"format-time": "{H}h {M}min",
|
||||||
|
"tooltip": true,
|
||||||
|
},
|
||||||
|
// waybar-clock
|
||||||
|
"clock": {
|
||||||
|
"interval": 60,
|
||||||
|
"align": 0,
|
||||||
|
"rotate": 0,
|
||||||
|
"tooltip-format": "<big>{:%B %Y}</big>\n<tt><small>{calendar}</small></tt>",
|
||||||
|
"format": " {:%H:%M}",
|
||||||
|
"format-alt": " {:%a %b %d, %G}"
|
||||||
|
},
|
||||||
|
// waybar-cpu
|
||||||
|
"cpu": {
|
||||||
|
"interval": 5,
|
||||||
|
"format": " LOAD: {usage}%",
|
||||||
|
},
|
||||||
|
// waybar-custom
|
||||||
|
"custom/menu": {
|
||||||
|
"format": "",
|
||||||
|
"tooltip": false,
|
||||||
|
"on-click": "$HOME/.config/hypr/scripts/menu",
|
||||||
|
},
|
||||||
|
"custom/power": {
|
||||||
|
"format": " ",
|
||||||
|
"tooltip": false,
|
||||||
|
"on-click": "$HOME/.config/hypr/scripts/wlogout",
|
||||||
|
},
|
||||||
|
// waybar-disk
|
||||||
|
"disk": {
|
||||||
|
"interval": 30,
|
||||||
|
"format": " FREE: {free}",
|
||||||
|
},
|
||||||
|
// waybar-memory
|
||||||
|
"memory": {
|
||||||
|
"interval": 10,
|
||||||
|
"format": " USED: {used:0.1f}G",
|
||||||
|
},
|
||||||
|
// waybar-mpd
|
||||||
|
"mpd": {
|
||||||
|
"interval": 2,
|
||||||
|
"unknown-tag": "N/A",
|
||||||
|
"format": "{stateIcon} {artist} - {title}",
|
||||||
|
"format-disconnected": " Disconnected",
|
||||||
|
"format-paused": "{stateIcon} {artist} - {title}",
|
||||||
|
"format-stopped": "Stopped ",
|
||||||
|
"state-icons": {
|
||||||
|
"paused": "",
|
||||||
|
"playing": ""
|
||||||
|
},
|
||||||
|
"tooltip-format": "MPD (connected)",
|
||||||
|
"tooltip-format-disconnected": "MPD (disconnected)",
|
||||||
|
// Commands to execute on events
|
||||||
|
"on-click": "mpc toggle",
|
||||||
|
"on-click-middle": "mpc prev",
|
||||||
|
"on-click-right": "mpc next",
|
||||||
|
"on-update": "",
|
||||||
|
"on-scroll-up": "mpc seek +00:00:01",
|
||||||
|
"on-scroll-down": "mpc seek -00:00:01",
|
||||||
|
"smooth-scrolling-threshold": 1,
|
||||||
|
},
|
||||||
|
// waybar-network
|
||||||
|
"network": {
|
||||||
|
"interval": 5,
|
||||||
|
//"interface": "wlan*", // (Optional) To force the use of this interface, set it for netspeed to work
|
||||||
|
"format-wifi": " {essid}",
|
||||||
|
"format-ethernet": " {ipaddr}/{cidr}",
|
||||||
|
"format-linked": " {ifname} (No IP)",
|
||||||
|
"format-disconnected": "睊 Disconnected",
|
||||||
|
"format-disabled": "睊 Disabled",
|
||||||
|
"format-alt": " {bandwidthUpBits} | {bandwidthDownBits}",
|
||||||
|
"tooltip-format": " {ifname} via {gwaddr}",
|
||||||
|
},
|
||||||
|
// weather-custom
|
||||||
|
"custom/weather": {
|
||||||
|
// "format": "{}",
|
||||||
|
// "format-alt": "{alt}: {}",
|
||||||
|
"format-alt-click": "click-right",
|
||||||
|
"interval": 300,
|
||||||
|
"return-type": "json",
|
||||||
|
"exec": "~/.config/hypr/scripts/weather",
|
||||||
|
// "on-click": "xdg-open https://weather.com/en-IN/weather/today/l/$(location_id)"
|
||||||
|
},
|
||||||
|
// waybar-pulseaudio
|
||||||
|
"pulseaudio": {
|
||||||
|
//"format": "{volume}% {icon} {format_source}",
|
||||||
|
"format": "{icon} {volume}%",
|
||||||
|
"format-muted": " Mute",
|
||||||
|
"format-bluetooth": " {volume}% {format_source}",
|
||||||
|
"format-bluetooth-muted": " Mute",
|
||||||
|
"format-source": " {volume}%",
|
||||||
|
"format-source-muted": "",
|
||||||
|
"format-icons": {
|
||||||
|
"headphone": "",
|
||||||
|
"hands-free": "",
|
||||||
|
"headset": "",
|
||||||
|
"phone": "",
|
||||||
|
"portable": "",
|
||||||
|
"car": "",
|
||||||
|
"default": [
|
||||||
|
"",
|
||||||
|
"",
|
||||||
|
""
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"scroll-step": 5.0,
|
||||||
|
// Commands to execute on events
|
||||||
|
"on-click": "amixer set Master toggle",
|
||||||
|
"on-click-right": "pavucontrol",
|
||||||
|
"smooth-scrolling-threshold": 1,
|
||||||
|
},
|
||||||
|
// waybar-tray
|
||||||
|
"tray": {
|
||||||
|
"icon-size": 16,
|
||||||
|
"spacing": 10
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,216 @@
|
|||||||
|
/** ********** Fonts ********** **/
|
||||||
|
* {
|
||||||
|
font-family: "JetBrains Mono", "Iosevka Nerd Font", archcraft, sans-serif;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ********** Waybar Window ********** **/
|
||||||
|
window#waybar {
|
||||||
|
background-color: #1e1e2e;
|
||||||
|
color: #1e1e2e;
|
||||||
|
border-bottom: 2px solid #313244;
|
||||||
|
transition-property: background-color;
|
||||||
|
transition-duration: .5s;
|
||||||
|
}
|
||||||
|
|
||||||
|
window#waybar.hidden {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ********** Backlight ********** **/
|
||||||
|
#backlight {
|
||||||
|
background-color: #cba6f7;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ********** Battery ********** **/
|
||||||
|
#battery {
|
||||||
|
background-color: #f9e2af;
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.charging {
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.plugged {
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes blink {
|
||||||
|
to {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#battery.critical:not(.charging) {
|
||||||
|
background-color: #f38ba8;
|
||||||
|
color: #f38ba8;
|
||||||
|
animation-name: blink;
|
||||||
|
animation-duration: 0.5s;
|
||||||
|
animation-timing-function: linear;
|
||||||
|
animation-iteration-count: infinite;
|
||||||
|
animation-direction: alternate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ********** Clock ********** **/
|
||||||
|
#clock {
|
||||||
|
background-color: #a6e3a1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ********** CPU ********** **/
|
||||||
|
#cpu {
|
||||||
|
background-color: #89dceb;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ********** Memory ********** **/
|
||||||
|
#memory {
|
||||||
|
background-color: #eba0ac;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ********** Disk ********** **/
|
||||||
|
#disk {
|
||||||
|
background-color: #b4befe;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ********** Tray ********** **/
|
||||||
|
#tray {
|
||||||
|
background-color: #cdd6f4;
|
||||||
|
}
|
||||||
|
#tray > .passive {
|
||||||
|
-gtk-icon-effect: dim;
|
||||||
|
}
|
||||||
|
#tray > .needs-attention {
|
||||||
|
-gtk-icon-effect: highlight;
|
||||||
|
}
|
||||||
|
#tray > .active {
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ********** MPD ********** **/
|
||||||
|
#mpd {
|
||||||
|
background-color: #94e2d5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mpd.disconnected {
|
||||||
|
background-color: #f38ba8;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mpd.stopped {
|
||||||
|
background-color: #f5c2e7;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mpd.playing {
|
||||||
|
background-color: #74c7ec;
|
||||||
|
}
|
||||||
|
|
||||||
|
#mpd.paused {
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ********** Pulseaudio ********** **/
|
||||||
|
#pulseaudio {
|
||||||
|
background-color: #fab387;
|
||||||
|
}
|
||||||
|
|
||||||
|
#pulseaudio.bluetooth {
|
||||||
|
background-color: #f5c2e7;
|
||||||
|
}
|
||||||
|
#pulseaudio.muted {
|
||||||
|
background-color: #313244;
|
||||||
|
color: #cdd6f4;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ********** Network ********** **/
|
||||||
|
#network {
|
||||||
|
background-color: #89b4fa;
|
||||||
|
}
|
||||||
|
|
||||||
|
#network.disconnected,#network.disabled {
|
||||||
|
background-color: #313244;
|
||||||
|
color: #cdd6f4;
|
||||||
|
}
|
||||||
|
#network.linked {
|
||||||
|
}
|
||||||
|
#network.ethernet {
|
||||||
|
}
|
||||||
|
#network.wifi {
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ********** Custom ********** **/
|
||||||
|
#custom-menu, #custom-power, #custom-weather, #custom-updater {
|
||||||
|
border-radius: 4px;
|
||||||
|
margin: 6px 0px;
|
||||||
|
padding: 2px 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-menu {
|
||||||
|
background-color: #f5c2e7;
|
||||||
|
margin-left: 6px;
|
||||||
|
padding: 2px 6px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-power {
|
||||||
|
background-color: #f38ba8;
|
||||||
|
margin-right: 6px;
|
||||||
|
padding: 2px 8px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-updater {
|
||||||
|
background-color: #e6ed7b;
|
||||||
|
margin-right: 6px;
|
||||||
|
padding: 2px 8px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Common style **/
|
||||||
|
#backlight,
|
||||||
|
#battery,
|
||||||
|
#clock,
|
||||||
|
#cpu,
|
||||||
|
#disk,
|
||||||
|
#mode,
|
||||||
|
#memory,
|
||||||
|
#mpd,
|
||||||
|
#tray,
|
||||||
|
#pulseaudio,
|
||||||
|
#network {
|
||||||
|
border-radius: 4px;
|
||||||
|
margin: 6px 0px;
|
||||||
|
padding: 2px 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** ********** Weather ********** **/
|
||||||
|
|
||||||
|
#custom-weather {
|
||||||
|
background-color: #5d388b;
|
||||||
|
margin-right: 6px;
|
||||||
|
padding: 2px 8px;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-weather.severe {
|
||||||
|
color: #eb937d;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-weather.sunnyDay {
|
||||||
|
color: #c2ca76;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-weather.clearNight {
|
||||||
|
color: #2b2b2a;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-weather.cloudyFoggyDay, #custom-weather.cloudyFoggyNight {
|
||||||
|
color: #c2ddda;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-weather.rainyDay, #custom-weather.rainyNight {
|
||||||
|
color: #5aaca5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-weather.showyIcyDay, #custom-weather.snowyIcyNight {
|
||||||
|
color: #d6e7e5;
|
||||||
|
}
|
||||||
|
|
||||||
|
#custom-weather.default {
|
||||||
|
color: #dbd9d8;
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 8.4 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
|
After Width: | Height: | Size: 7.8 KiB |
|
After Width: | Height: | Size: 5.7 KiB |
|
After Width: | Height: | Size: 7.0 KiB |
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"label" : "lock",
|
||||||
|
"action" : "~/.config/hypr/scripts/lockscreen",
|
||||||
|
"text" : "Lock",
|
||||||
|
"keybind" : "l"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"label" : "hibernate",
|
||||||
|
"action" : "systemctl hibernate",
|
||||||
|
"text" : "Hibernate",
|
||||||
|
"keybind" : "h"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"label" : "logout",
|
||||||
|
"action" : "loginctl terminate-user $USER",
|
||||||
|
"text" : "Logout",
|
||||||
|
"keybind" : "e"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"label" : "shutdown",
|
||||||
|
"action" : "systemctl poweroff",
|
||||||
|
"text" : "Shutdown",
|
||||||
|
"keybind" : "s"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"label" : "suspend",
|
||||||
|
"action" : "systemctl suspend",
|
||||||
|
"text" : "Suspend",
|
||||||
|
"keybind" : "u"
|
||||||
|
}
|
||||||
|
{
|
||||||
|
"label" : "reboot",
|
||||||
|
"action" : "systemctl reboot",
|
||||||
|
"text" : "Reboot",
|
||||||
|
"keybind" : "r"
|
||||||
|
}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
/** ********** Fonts ********** **/
|
||||||
|
* {
|
||||||
|
font-family: "JetBrains Mono", "Iosevka Nerd Font", archcraft, sans-serif;
|
||||||
|
font-size: 14px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ********** Main Window ********** **/
|
||||||
|
window {
|
||||||
|
background-color: #1E1E2E;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ********** Buttons ********** **/
|
||||||
|
button {
|
||||||
|
background-color: #242434;
|
||||||
|
color: #FFFFFF;
|
||||||
|
border: 2px solid #282838;
|
||||||
|
border-radius: 20px;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: center;
|
||||||
|
background-size: 35%;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:focus, button:active, button:hover {
|
||||||
|
background-color: #89B4FA;
|
||||||
|
outline-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** ********** Icons ********** **/
|
||||||
|
#lock {
|
||||||
|
background-image: image(url("icons/lock.png"), url("/usr/share/wlogout/icons/lock.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#logout {
|
||||||
|
background-image: image(url("icons/logout.png"), url("/usr/share/wlogout/icons/logout.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#suspend {
|
||||||
|
background-image: image(url("icons/suspend.png"), url("/usr/share/wlogout/icons/suspend.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#hibernate {
|
||||||
|
background-image: image(url("icons/hibernate.png"), url("/usr/share/wlogout/icons/hibernate.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#shutdown {
|
||||||
|
background-image: image(url("icons/shutdown.png"), url("/usr/share/wlogout/icons/shutdown.png"));
|
||||||
|
}
|
||||||
|
|
||||||
|
#reboot {
|
||||||
|
background-image: image(url("icons/reboot.png"), url("/usr/share/wlogout/icons/reboot.png"));
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#1e1e2e
|
||||||
|
#262636
|
||||||
|
#d9e0ee
|
||||||
|
#89b4fa
|
||||||
|
#f38ba8
|
||||||
|
#cba6f7
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
## Wofi Config
|
||||||
|
|
||||||
|
## General
|
||||||
|
show=drun
|
||||||
|
prompt=Apps
|
||||||
|
normal_window=true
|
||||||
|
layer=top
|
||||||
|
term=alacritty
|
||||||
|
|
||||||
|
## Geometry
|
||||||
|
width=500px
|
||||||
|
height=305px
|
||||||
|
location=0
|
||||||
|
orientation=vertical
|
||||||
|
halign=fill
|
||||||
|
line_wrap=off
|
||||||
|
dynamic_lines=false
|
||||||
|
|
||||||
|
## Images
|
||||||
|
allow_markup=true
|
||||||
|
allow_images=true
|
||||||
|
image_size=24
|
||||||
|
|
||||||
|
## Search
|
||||||
|
exec_search=false
|
||||||
|
hide_search=false
|
||||||
|
parse_search=false
|
||||||
|
insensitive=false
|
||||||
|
|
||||||
|
## Other
|
||||||
|
hide_scroll=true
|
||||||
|
no_actions=true
|
||||||
|
sort_order=default
|
||||||
|
gtk_dark=true
|
||||||
|
filter_rate=100
|
||||||
|
|
||||||
|
## Keys
|
||||||
|
key_expand=Tab
|
||||||
|
key_exit=Escape
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
/** ********** Fonts ********** **/
|
||||||
|
* {
|
||||||
|
font-family: "JetBrains Mono", "Iosevka Nerd Font", archcraft, sans-serif;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#window {
|
||||||
|
background-color: --wofi-color0;
|
||||||
|
color: --wofi-color2;
|
||||||
|
border: 2px solid --wofi-color1;
|
||||||
|
border-radius: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#outer-box {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#input {
|
||||||
|
background-color: --wofi-color1;
|
||||||
|
border: 0px solid --wofi-color3;
|
||||||
|
padding: 8px 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#scroll {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#inner-box {
|
||||||
|
}
|
||||||
|
|
||||||
|
#img {
|
||||||
|
padding-right: 8px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#text {
|
||||||
|
color: --wofi-color2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#text:selected {
|
||||||
|
color: --wofi-color0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry {
|
||||||
|
padding: 6px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#entry:selected {
|
||||||
|
background-color: --wofi-color3;
|
||||||
|
color: --wofi-color0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#unselected {
|
||||||
|
}
|
||||||
|
|
||||||
|
#selected {
|
||||||
|
}
|
||||||
|
|
||||||
|
#input, #entry:selected {
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
@@ -346,7 +346,7 @@ exec --no-startup-id dex --autostart --environment i3
|
|||||||
|
|
||||||
# set wallpaper
|
# set wallpaper
|
||||||
# exec --no-startup-id sleep 2 && nitrogen --restore
|
# exec --no-startup-id sleep 2 && nitrogen --restore
|
||||||
exec --no-startup-id sleep 1 && feh --bg-fill ~/.config/i3/wallpaper.jpg
|
exec --no-startup-id sleep 1 && feh --bg-fill ~/.config/i3/wallpaper.png
|
||||||
|
|
||||||
# set powersavings for display:
|
# set powersavings for display:
|
||||||
exec --no-startup-id xset s 480 dpms 600 600 600
|
exec --no-startup-id xset s 480 dpms 600 600 600
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
config,
|
config,
|
||||||
|
lib,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
# i3 配置,基于 https://github.com/endeavouros-team/endeavouros-i3wm-setup
|
# i3 配置,基于 https://github.com/endeavouros-team/endeavouros-i3wm-setup
|
||||||
# 直接从当前文件夹中读取配置文件作为配置内容
|
# 直接从当前文件夹中读取配置文件作为配置内容
|
||||||
|
|
||||||
# wallpaper, binary file
|
# wallpaper, binary file
|
||||||
home.file.".config/i3/wallpaper.jpg".source = ../../wallpaper.jpg;
|
home.file.".config/i3/wallpaper.png".source = ../wallpapers/wallpaper.png;
|
||||||
home.file.".config/i3/config".source = ./config;
|
home.file.".config/i3/config".source = ./config;
|
||||||
home.file.".config/i3/i3blocks.conf".source = ./i3blocks.conf;
|
home.file.".config/i3/i3blocks.conf".source = ./i3blocks.conf;
|
||||||
home.file.".config/i3/keybindings".source = ./keybindings;
|
home.file.".config/i3/keybindings".source = ./keybindings;
|
||||||
@@ -18,16 +19,19 @@
|
|||||||
executable = true; # make all scripts executable
|
executable = true; # make all scripts executable
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# allow fontconfig to discover fonts and configurations installed through home.packages
|
||||||
|
fonts.fontconfig.enable = true;
|
||||||
|
|
||||||
|
systemd.user.sessionVariables = {
|
||||||
|
"LIBVA_DRIVER_NAME" = "nvidia";
|
||||||
|
"GBM_BACKEND" = "nvidia-drm";
|
||||||
|
"__GLX_VENDOR_LIBRARY_NAME" = "nvidia";
|
||||||
|
};
|
||||||
|
|
||||||
# set cursor size and dpi for 4k monitor
|
# set cursor size and dpi for 4k monitor
|
||||||
xresources.properties = {
|
xresources.properties = {
|
||||||
"Xcursor.size" = 16;
|
"Xcursor.size" = 16;
|
||||||
"Xft.dpi" = 192;
|
"Xft.dpi" = 160;
|
||||||
};
|
};
|
||||||
|
|
||||||
# 直接以 text 的方式,在 nix 配置文件中硬编码文件内容
|
|
||||||
# home.file.".xxx".text = ''
|
|
||||||
# xxx
|
|
||||||
# '';
|
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -1,20 +1,55 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
|
nixpkgs-stable,
|
||||||
config,
|
config,
|
||||||
...
|
...
|
||||||
}: {
|
}: let
|
||||||
|
pkgs-stable = import nixpkgs-stable {
|
||||||
|
system = pkgs.system;
|
||||||
|
config.allowUnfree = true;
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
home.packages = with pkgs-stable; [
|
||||||
|
firefox-wayland # firefox with wayland support
|
||||||
|
# firefox
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
# TODO vscode & chrome both have wayland support, but they don't work with fcitx5, need to fix it.
|
||||||
programs = {
|
programs = {
|
||||||
chromium = {
|
|
||||||
|
# source code: https://github.com/nix-community/home-manager/blob/master/modules/programs/chromium.nix
|
||||||
|
google-chrome = {
|
||||||
enable = true;
|
enable = true;
|
||||||
commandLineArgs = ["--enable-features=TouchpadOverscrollHistoryNavigation"];
|
|
||||||
extensions = [
|
# chrome wayland support was broken on nixos-unstable branch, so fallback to stable branch for now
|
||||||
# {id = "";} // extension id, query from chrome web store
|
# https://github.com/swaywm/sway/issues/7562
|
||||||
|
package = pkgs-stable.google-chrome;
|
||||||
|
|
||||||
|
commandLineArgs = [
|
||||||
|
# make it use GTK_IM_MODULE if it runs with Gtk4, so fcitx5 can work with it.
|
||||||
|
# (only supported by chromium/chrome at this time, not electron)
|
||||||
|
"--gtk-version=4"
|
||||||
|
# make it use text-input-v1, which works for kwin 5.27 and weston
|
||||||
|
# "--enable-wayland-ime"
|
||||||
|
|
||||||
|
# enable hardware acceleration - vulkan api
|
||||||
|
# "--enable-features=Vulkan"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
firefox = {
|
vscode = {
|
||||||
enable = true;
|
enable = true;
|
||||||
profiles.ryan = {};
|
# use the stable version
|
||||||
|
package = pkgs-stable.vscode.override {
|
||||||
|
commandLineArgs = [
|
||||||
|
# make it use text-input-v1, which works for kwin 5.27 and weston
|
||||||
|
# "--enable-wayland-ime"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# let vscode sync and update its configuration & extensions across devices, using github account.
|
||||||
|
# userSettings = {};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
{pkgs, ...}: {
|
{pkgs, config, ...}:
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
# archives
|
# archives
|
||||||
zip
|
zip
|
||||||
@@ -9,24 +12,75 @@
|
|||||||
ripgrep
|
ripgrep
|
||||||
yq-go # https://github.com/mikefarah/yq
|
yq-go # https://github.com/mikefarah/yq
|
||||||
htop
|
htop
|
||||||
|
iotop
|
||||||
|
iftop
|
||||||
|
nmon
|
||||||
|
|
||||||
|
## networking tools
|
||||||
|
wireshark
|
||||||
|
wireguard-tools # manage wireguard vpn manually, via wg-quick
|
||||||
|
|
||||||
# misc
|
# misc
|
||||||
libnotify
|
libnotify
|
||||||
wineWowPackages.wayland
|
wineWowPackages.wayland
|
||||||
xdg-utils
|
xdg-utils
|
||||||
graphviz
|
|
||||||
|
|
||||||
# productivity
|
# productivity
|
||||||
obsidian
|
obsidian
|
||||||
|
hugo
|
||||||
|
|
||||||
# IDE
|
# IDE
|
||||||
insomnia
|
insomnia
|
||||||
|
jetbrains.pycharm-community
|
||||||
|
# jetbrains.idea-community
|
||||||
|
|
||||||
# cloud native
|
# cloud native
|
||||||
docker-compose
|
docker-compose
|
||||||
kubectl
|
kubectl
|
||||||
|
kubernetes-helm
|
||||||
|
terraform
|
||||||
|
pulumi
|
||||||
|
|
||||||
|
# cloud provider
|
||||||
|
awscli
|
||||||
|
|
||||||
|
# C
|
||||||
|
clang-tools
|
||||||
|
clang-analyzer
|
||||||
|
lldb
|
||||||
|
gnumake
|
||||||
|
cmake
|
||||||
|
autoconf
|
||||||
|
automake
|
||||||
|
bison
|
||||||
|
cppcheck
|
||||||
|
fakeroot
|
||||||
|
flex
|
||||||
|
gettext
|
||||||
|
groff
|
||||||
|
libtool
|
||||||
|
m4
|
||||||
|
patch
|
||||||
|
pkgconf
|
||||||
|
texinfo
|
||||||
|
binutils
|
||||||
|
|
||||||
|
|
||||||
|
# Golang
|
||||||
|
delve
|
||||||
|
go
|
||||||
|
go-outline
|
||||||
|
go-tools
|
||||||
|
go2nix
|
||||||
|
gomodifytags
|
||||||
|
gopls
|
||||||
|
gotests
|
||||||
|
impl
|
||||||
|
|
||||||
|
# Rust
|
||||||
|
rustup
|
||||||
|
|
||||||
|
# nodejs
|
||||||
nodejs
|
nodejs
|
||||||
nodePackages.npm
|
nodePackages.npm
|
||||||
nodePackages.pnpm
|
nodePackages.pnpm
|
||||||
@@ -36,16 +90,38 @@
|
|||||||
dbeaver
|
dbeaver
|
||||||
mycli
|
mycli
|
||||||
pgcli
|
pgcli
|
||||||
|
|
||||||
|
# instant messaging
|
||||||
|
telegram-desktop
|
||||||
|
discord
|
||||||
|
qq # https://github.com/NixOS/nixpkgs/tree/master/pkgs/applications/networking/instant-messengers/qq
|
||||||
|
|
||||||
|
# music
|
||||||
|
musescore
|
||||||
|
|
||||||
|
# system call monitoring
|
||||||
|
strace
|
||||||
|
ltrace # library call monitoring
|
||||||
|
lsof
|
||||||
|
mtr
|
||||||
];
|
];
|
||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
|
# A terminal multiplexer
|
||||||
tmux = {
|
tmux = {
|
||||||
enable = true;
|
enable = true;
|
||||||
clock24 = true;
|
|
||||||
keyMode = "vi";
|
|
||||||
extraConfig = "mouse on";
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# modern vim
|
||||||
|
neovim = {
|
||||||
|
enable = true;
|
||||||
|
defaultEditor = true; # set nvim as default editor
|
||||||
|
extraConfig = ''
|
||||||
|
set number relativenumber
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
# a cat(1) clone with syntax highlighting and Git integration.
|
||||||
bat = {
|
bat = {
|
||||||
enable = true;
|
enable = true;
|
||||||
config = {
|
config = {
|
||||||
@@ -64,23 +140,25 @@
|
|||||||
exa.enable = true; # A modern replacement for ‘ls’
|
exa.enable = true; # A modern replacement for ‘ls’
|
||||||
jq.enable = true; # A lightweight and flexible command-line JSON processor
|
jq.enable = true; # A lightweight and flexible command-line JSON processor
|
||||||
ssh.enable = true;
|
ssh.enable = true;
|
||||||
aria2.enable = true;
|
aria2.enable = true; # a
|
||||||
|
|
||||||
|
# skim provides a single executable: sk.
|
||||||
|
# Basically anywhere you would want to use grep, try sk instead.
|
||||||
skim = {
|
skim = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableZshIntegration = true;
|
enableBashIntegration = true;
|
||||||
defaultCommand = "rg --files --hidden";
|
};
|
||||||
changeDirWidgetOptions = [
|
|
||||||
"--preview 'exa --icons --git --color always -T -L 3 {} | head -200'"
|
direnv = {
|
||||||
"--exact"
|
enable = true;
|
||||||
];
|
nix-direnv.enable = true;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
syncthing.enable = true;
|
# syncthing.enable = true;
|
||||||
|
|
||||||
# auto mount usb drives
|
# auto mount usb drives
|
||||||
udiskie.enable = true;
|
udiskie.enable = true;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
./common.nix
|
./common.nix
|
||||||
./git.nix
|
./git.nix
|
||||||
./media.nix
|
./media.nix
|
||||||
./vscode.nix
|
|
||||||
./xdg.nix
|
./xdg.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -13,8 +13,24 @@
|
|||||||
pavucontrol
|
pavucontrol
|
||||||
playerctl
|
playerctl
|
||||||
pulsemixer
|
pulsemixer
|
||||||
|
|
||||||
|
ffmpeg-full
|
||||||
|
|
||||||
# images
|
# images
|
||||||
imv
|
viu # terminal image viewer
|
||||||
|
imv # simple image viewer
|
||||||
|
imagemagick
|
||||||
|
graphviz
|
||||||
|
|
||||||
|
# creative
|
||||||
|
blender # 3d modeling
|
||||||
|
gimp # image editing
|
||||||
|
inkscape # vector graphics
|
||||||
|
krita # digital painting
|
||||||
|
|
||||||
|
# 3d printing, eletrical engineering
|
||||||
|
kicad
|
||||||
|
|
||||||
];
|
];
|
||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
|
|||||||
@@ -1,126 +0,0 @@
|
|||||||
{
|
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
home-manager,
|
|
||||||
nix-vscode-extensions,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
|
|
||||||
{
|
|
||||||
|
|
||||||
# if use vscode in wayland, uncomment this line
|
|
||||||
# environment.sessionVariables.NIXOS_OZONE_WL = "1";
|
|
||||||
programs.vscode = {
|
|
||||||
enable = true;
|
|
||||||
userSettings = {
|
|
||||||
"editor.renderWhitespace" = "all";
|
|
||||||
"files.autoSave" = "onFocusChange";
|
|
||||||
"editor.rulers" = [ 80 120 ];
|
|
||||||
"telemetry.enableTelemetry" = false;
|
|
||||||
"telemetry.enableCrashReporter" = false;
|
|
||||||
"editor.tabSize" = 2;
|
|
||||||
"files.exclude" = { "**/node_modules/**" = true; };
|
|
||||||
"editor.formatOnSave" = false;
|
|
||||||
"breadcrumbs.enabled" = true;
|
|
||||||
"editor.useTabStops" = false;
|
|
||||||
"editor.fontFamily" = "JetBrainsMono Nerd Font";
|
|
||||||
"editor.fontSize" = 16;
|
|
||||||
"editor.fontLigatures" = true;
|
|
||||||
"editor.lineHeight" = 20;
|
|
||||||
"workbench.fontAliasing" = "antialiased";
|
|
||||||
"files.trimTrailingWhitespace" = true;
|
|
||||||
"editor.minimap.enabled" = false;
|
|
||||||
"workbench.editor.enablePreview" = false;
|
|
||||||
"terminal.integrated.fontFamily" = "JetBrainsMono Nerd Font";
|
|
||||||
};
|
|
||||||
|
|
||||||
package =
|
|
||||||
let
|
|
||||||
config.packageOverrides = pkgs: {
|
|
||||||
vscode = pkgs.vscode-with-extensions.override {
|
|
||||||
# pkgs.vscode-extensions 里包含的 vscode 太少了
|
|
||||||
# 必须使用社区的 <https://github.com/nix-community/nix-vscode-extensions> 才能安装更多插件
|
|
||||||
vscodeExtensions = with nix-vscode-extensions.extensions; [
|
|
||||||
aaron-bond.better-comments
|
|
||||||
anweber.vscode-httpyac
|
|
||||||
arrterian.nix-env-selector
|
|
||||||
bierner.markdown-mermaid
|
|
||||||
christian-kohler.path-intellisense
|
|
||||||
cschlosser.doxdocgen
|
|
||||||
DanishSarwar.reverse-search
|
|
||||||
eamodio.gitlens
|
|
||||||
esbenp.prettier-vscode
|
|
||||||
espressif.esp-idf-extension
|
|
||||||
fabiospampinato.vscode-diff
|
|
||||||
GitHub.copilot
|
|
||||||
golang.go
|
|
||||||
hashicorp.terraform
|
|
||||||
janisdd.vscode-edit-csv
|
|
||||||
jebbs.plantuml
|
|
||||||
jeff-hykin.better-cpp-syntax
|
|
||||||
jnoortheen.nix-ide
|
|
||||||
JuanBlanco.solidity
|
|
||||||
k--kato.intellij-idea-keybindings
|
|
||||||
llvm-vs-code-extensions.vscode-clangd
|
|
||||||
mcu-debug.debug-tracker-vscode
|
|
||||||
mcu-debug.memory-view
|
|
||||||
mcu-debug.rtos-views
|
|
||||||
mikestead.dotenv
|
|
||||||
mkhl.direnv
|
|
||||||
ms-azuretools.vscode-docker
|
|
||||||
ms-dotnettools.vscode-dotnet-runtime
|
|
||||||
ms-kubernetes-tools.vscode-kubernetes-tools
|
|
||||||
ms-python.isort
|
|
||||||
ms-python.python
|
|
||||||
ms-python.vscode-pylance
|
|
||||||
ms-toolsai.jupyter
|
|
||||||
ms-toolsai.jupyter-keymap
|
|
||||||
ms-toolsai.jupyter-renderers
|
|
||||||
ms-toolsai.vscode-jupyter-cell-tags
|
|
||||||
ms-toolsai.vscode-jupyter-slideshow
|
|
||||||
ms-vscode-remote.remote-containers
|
|
||||||
ms-vscode-remote.remote-ssh
|
|
||||||
ms-vscode-remote.remote-ssh-edit
|
|
||||||
ms-vscode-remote.vscode-remote-extensionpack
|
|
||||||
ms-vscode.cmake-tools
|
|
||||||
ms-vscode.cpptools
|
|
||||||
ms-vscode.cpptools-extension-pack
|
|
||||||
ms-vscode.cpptools-themes
|
|
||||||
ms-vscode.remote-explorer
|
|
||||||
ms-vscode.remote-server
|
|
||||||
pinage404.nix-extension-pack
|
|
||||||
platformio.platformio-ide
|
|
||||||
pomdtr.excalidraw-editor
|
|
||||||
redhat.java
|
|
||||||
redhat.vscode-commons
|
|
||||||
redhat.vscode-xml
|
|
||||||
redhat.vscode-yaml
|
|
||||||
rust-lang.rust-analyzer
|
|
||||||
shd101wyy.markdown-preview-enhanced
|
|
||||||
sumneko.lua
|
|
||||||
tamasfe.even-better-toml
|
|
||||||
timonwong.shellcheck
|
|
||||||
tintinweb.graphviz-interactive-preview
|
|
||||||
tintinweb.solidity-visual-auditor
|
|
||||||
tintinweb.vscode-inline-bookmarks
|
|
||||||
tintinweb.vscode-solidity-flattener
|
|
||||||
tintinweb.vscode-solidity-language
|
|
||||||
twxs.cmake
|
|
||||||
vadimcn.vscode-lldb
|
|
||||||
VisualStudioExptTeam.intellicode-api-usage-examples
|
|
||||||
VisualStudioExptTeam.vscodeintellicode
|
|
||||||
vscjava.vscode-java-debug
|
|
||||||
vscjava.vscode-java-pack
|
|
||||||
vscjava.vscode-java-test
|
|
||||||
vscjava.vscode-maven
|
|
||||||
vscode-icons-team.vscode-icons
|
|
||||||
WakaTime.vscode-wakatime
|
|
||||||
yzhang.markdown-all-in-one
|
|
||||||
zxh404.vscode-proto3
|
|
||||||
];
|
|
||||||
};
|
|
||||||
};
|
|
||||||
in
|
|
||||||
pkgs.vscode;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
{config, ...}: let
|
{config, pkgs, ...}: let
|
||||||
browser = ["firefox.desktop"];
|
browser = ["firefox.desktop"];
|
||||||
|
|
||||||
# XDG MIME types
|
# XDG MIME types
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
"application/xhtml+xml" = browser;
|
"application/xhtml+xml" = browser;
|
||||||
"text/html" = browser;
|
"text/html" = browser;
|
||||||
"x-scheme-handler/about" = browser;
|
"x-scheme-handler/about" = browser;
|
||||||
"x-scheme-handler/chrome" = ["chromium-browser.desktop"];
|
# "x-scheme-handler/chrome" = ["chromium-browser.desktop"];
|
||||||
"x-scheme-handler/ftp" = browser;
|
"x-scheme-handler/ftp" = browser;
|
||||||
"x-scheme-handler/http" = browser;
|
"x-scheme-handler/http" = browser;
|
||||||
"x-scheme-handler/https" = browser;
|
"x-scheme-handler/https" = browser;
|
||||||
@@ -21,8 +21,8 @@
|
|||||||
"video/*" = ["mpv.dekstop"];
|
"video/*" = ["mpv.dekstop"];
|
||||||
"image/*" = ["imv.desktop"];
|
"image/*" = ["imv.desktop"];
|
||||||
"application/json" = browser;
|
"application/json" = browser;
|
||||||
"application/pdf" = ["org.pwmt.zathura.desktop.desktop"];
|
"application/pdf" = ["org.pwmt.zathura.desktop.desktop"]; # TODO: pdf viewer
|
||||||
"x-scheme-handler/discord" = ["discordcanary.desktop"];
|
"x-scheme-handler/discord" = ["discord.desktop"];
|
||||||
"x-scheme-handler/spotify" = ["spotify.desktop"];
|
"x-scheme-handler/spotify" = ["spotify.desktop"];
|
||||||
"x-scheme-handler/tg" = ["telegramdesktop.desktop"];
|
"x-scheme-handler/tg" = ["telegramdesktop.desktop"];
|
||||||
};
|
};
|
||||||
@@ -44,4 +44,4 @@ in {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
d = config.xdg.dataHome;
|
d = config.xdg.dataHome;
|
||||||
c = config.xdg.configHome;
|
c = config.xdg.configHome;
|
||||||
cache = config.xdg.cacheHome;
|
cache = config.xdg.cacheHome;
|
||||||
in {
|
in rec {
|
||||||
imports = [
|
imports = [
|
||||||
./nushell
|
./nushell
|
||||||
./common.nix
|
./common.nix
|
||||||
@@ -10,8 +10,16 @@ in {
|
|||||||
./terminals.nix
|
./terminals.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
|
programs.bash = {
|
||||||
|
enable = true;
|
||||||
|
enableCompletion = true;
|
||||||
|
bashrcExtra = ''
|
||||||
|
export PATH="$PATH:$HOME/bin:$HOME/.local/bin:$HOME/go/bin"
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
# add environment variables
|
# add environment variables
|
||||||
home.sessionVariables = {
|
systemd.user.sessionVariables = {
|
||||||
# clean up ~
|
# clean up ~
|
||||||
LESSHISTFILE = cache + "/less/history";
|
LESSHISTFILE = cache + "/less/history";
|
||||||
LESSKEY = c + "/less/lesskey";
|
LESSKEY = c + "/less/lesskey";
|
||||||
@@ -19,7 +27,6 @@ in {
|
|||||||
XAUTHORITY = "$XDG_RUNTIME_DIR/Xauthority";
|
XAUTHORITY = "$XDG_RUNTIME_DIR/Xauthority";
|
||||||
|
|
||||||
# set default applications
|
# set default applications
|
||||||
EDITOR = "vim";
|
|
||||||
BROWSER = "firefox";
|
BROWSER = "firefox";
|
||||||
TERMINAL = "alacritty";
|
TERMINAL = "alacritty";
|
||||||
|
|
||||||
@@ -29,6 +36,8 @@ in {
|
|||||||
MANPAGER = "sh -c 'col -bx | bat -l man -p'";
|
MANPAGER = "sh -c 'col -bx | bat -l man -p'";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
home.sessionVariables = systemd.user.sessionVariables;
|
||||||
|
|
||||||
home.shellAliases = {
|
home.shellAliases = {
|
||||||
k = "kubectl";
|
k = "kubectl";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
{config, ...}: {
|
{config, ...}: {
|
||||||
home.sessionVariables.STARSHIP_CACHE = "${config.xdg.cacheHome}/starship";
|
|
||||||
|
|
||||||
programs.starship = {
|
programs.starship = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
# convert all images to png
|
||||||
|
|
||||||
|
def to_png [old_path: string, old_format: string] {
|
||||||
|
# 将后缀改为 .png 得到新图片的 path
|
||||||
|
let webp_path = ($old_path | split row $old_format | append ".png" | str join)
|
||||||
|
# 使用 ffmpeg 进行格式转换
|
||||||
|
ffmpeg -y -i $old_path $webp_path
|
||||||
|
# 删除旧图片
|
||||||
|
rm $old_path
|
||||||
|
}
|
||||||
|
|
||||||
|
def convert_format [old_format: string] {
|
||||||
|
# 递归找出所有大于 10kib 的图片
|
||||||
|
let old_paths = (ls $"**/*($old_format)" | where size > 10kb | each {|it| $it.name})
|
||||||
|
$old_paths | to md
|
||||||
|
|
||||||
|
# 1. 执行图片格式转换与压缩,同时删除原图片
|
||||||
|
$old_paths | each { |it| to_png $it $old_format }
|
||||||
|
}
|
||||||
|
|
||||||
|
convert_format ".webp"
|
||||||
|
# convert_format ".jpg"
|
||||||
|
After Width: | Height: | Size: 5.5 MiB |
|
After Width: | Height: | Size: 765 KiB |
@@ -0,0 +1,14 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
# mount a smb/cifs share
|
||||||
|
fileSystems."/home/ryan/SMB-Downloads" = {
|
||||||
|
device = "//192.168.5.194/Downloads";
|
||||||
|
fsType = "cifs";
|
||||||
|
options = [
|
||||||
|
"vers=3.0,uid=1000,gid=100,dir_mode=0755,file_mode=0755,mfsymlinks,credentials=${config.age.secrets.smb-credentials.path},nofail"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -2,17 +2,30 @@
|
|||||||
# your system. Help is available in the configuration.nix(5) man page
|
# your system. Help is available in the configuration.nix(5) man page
|
||||||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||||||
|
|
||||||
{ config, pkgs, ... }:
|
|
||||||
|
{ config, pkgs, home-manager, nur, ... } @ args:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
imports = [
|
||||||
[
|
# This adds a nur configuration option.
|
||||||
../../modules/system.nix
|
# Use `config.nur.repos.<user>.<package-name>` in NixOS Module for packages from the NUR.
|
||||||
../../modules/i3.nix
|
nur.nixosModules.nur
|
||||||
|
|
||||||
# Include the results of the hardware scan.
|
./cifs-mount.nix
|
||||||
./hardware-configuration.nix
|
# Include the results of the hardware scan.
|
||||||
];
|
./hardware-configuration.nix
|
||||||
|
|
||||||
|
../../modules/fhs-fonts.nix
|
||||||
|
../../modules/hyprland.nix
|
||||||
|
#../../modules/i3.nix
|
||||||
|
../../modules/nur-packages.nix
|
||||||
|
../../modules/system.nix
|
||||||
|
../../modules/user_group.nix
|
||||||
|
|
||||||
|
../../secrets
|
||||||
|
];
|
||||||
|
|
||||||
|
nixpkgs.overlays = import ../../overlays args;
|
||||||
|
|
||||||
# Bootloader.
|
# Bootloader.
|
||||||
boot.loader = {
|
boot.loader = {
|
||||||
@@ -23,23 +36,53 @@
|
|||||||
systemd-boot.enable = true;
|
systemd-boot.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
networking.hostName = "msi-rtx4090"; # Define your hostname.
|
networking = {
|
||||||
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
hostName = "msi-rtx4090"; # Define your hostname.
|
||||||
|
wireless.enable = false; # Enables wireless support via wpa_supplicant.
|
||||||
|
|
||||||
# Configure network proxy if necessary
|
# Configure network proxy if necessary
|
||||||
# networking.proxy.default = "http://user:password@proxy:port/";
|
# proxy.default = "http://user:password@proxy:port/";
|
||||||
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
# proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
||||||
|
|
||||||
|
networkmanager.enable = true;
|
||||||
|
|
||||||
|
enableIPv6 = false; # disable ipv6
|
||||||
|
interfaces.enp5s0 = {
|
||||||
|
useDHCP = false;
|
||||||
|
ipv4.addresses = [ {
|
||||||
|
address = "192.168.5.66";
|
||||||
|
prefixLength = 24;
|
||||||
|
} ];
|
||||||
|
};
|
||||||
|
defaultGateway = "192.168.5.201";
|
||||||
|
nameservers = [
|
||||||
|
"119.29.29.29" # DNSPod
|
||||||
|
"223.5.5.5" # AliDNS
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
# Enable networking
|
|
||||||
networking.networkmanager.enable = true;
|
|
||||||
networking.defaultGateway = "192.168.5.201";
|
|
||||||
|
|
||||||
# for Nvidia GPU
|
# for Nvidia GPU
|
||||||
services.xserver.videoDrivers = ["nvidia"];
|
|
||||||
hardware.opengl.enable = true;
|
services.xserver.videoDrivers = ["nvidia"]; # will install nvidia-vaapi-driver by default
|
||||||
hardware.nvidia = {
|
hardware.nvidia = {
|
||||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||||
modesetting.enable = true;
|
modesetting.enable = true;
|
||||||
|
powerManagement.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
hardware.opengl = {
|
||||||
|
enable = true;
|
||||||
|
# if hardware.opengl.driSupport is enabled, mesa is installed and provides Vulkan for supported hardware.
|
||||||
|
driSupport = true;
|
||||||
|
# needed by nvidia-docker
|
||||||
|
driSupport32Bit = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
virtualisation.docker = {
|
||||||
|
enable = true;
|
||||||
|
enableNvidia = true;
|
||||||
|
storageDriver = "btrfs";
|
||||||
};
|
};
|
||||||
|
|
||||||
# This value determines the NixOS release from which the default
|
# This value determines the NixOS release from which the default
|
||||||
|
|||||||
@@ -8,23 +8,24 @@
|
|||||||
[ (modulesPath + "/installer/scan/not-detected.nix")
|
[ (modulesPath + "/installer/scan/not-detected.nix")
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "uas" "usb_storage" "sd_mod" ];
|
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [ ];
|
||||||
boot.kernelModules = [ "kvm-intel" ];
|
boot.kernelModules = [ "kvm-intel" ];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [ ];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" =
|
||||||
{ device = "/dev/disk/by-uuid/9730ef67-577c-4dc9-8563-f431c1cf25fb";
|
{ device = "/dev/disk/by-uuid/231466f6-cdf3-40e1-b9d2-6b4e8d10a4d3";
|
||||||
fsType = "ext4";
|
fsType = "btrfs";
|
||||||
|
options = [ "subvol=@" ];
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/boot/efi" =
|
fileSystems."/boot/efi" =
|
||||||
{ device = "/dev/disk/by-uuid/8DA9-86FF";
|
{ device = "/dev/disk/by-uuid/87ED-8B2E";
|
||||||
fsType = "vfat";
|
fsType = "vfat";
|
||||||
};
|
};
|
||||||
|
|
||||||
swapDevices =
|
swapDevices =
|
||||||
[ { device = "/dev/disk/by-uuid/5364261a-3ecc-4754-b114-ff44c529627e"; }
|
[ { device = "/dev/disk/by-uuid/17391ca0-8cdb-4598-a40b-fd9548fd9b37"; }
|
||||||
];
|
];
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||||
|
|||||||
@@ -2,24 +2,31 @@
|
|||||||
# your system. Help is available in the configuration.nix(5) man page
|
# your system. Help is available in the configuration.nix(5) man page
|
||||||
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
# and in the NixOS manual (accessible by running ‘nixos-help’).
|
||||||
|
|
||||||
{ config, pkgs, ... }:
|
{ config, pkgs, home-manager, nur, ... } @args:
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
imports = [
|
||||||
[
|
# This adds a nur configuration option.
|
||||||
../../modules/system.nix
|
# Use `config.nur.repos.<user>.<package-name>` in NixOS Module for packages from the NUR.
|
||||||
../../modules/i3.nix
|
nur.nixosModules.nur
|
||||||
|
|
||||||
# Include the results of the hardware scan.
|
# Include the results of the hardware scan.
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
];
|
|
||||||
|
../../modules/fhs-fonts.nix
|
||||||
|
../../modules/hyprland.nix
|
||||||
|
#../../modules/i3.nix
|
||||||
|
../../modules/nur-packages.nix
|
||||||
|
../../modules/system.nix
|
||||||
|
../../modules/user_group.nix
|
||||||
|
|
||||||
|
../../secrets
|
||||||
|
];
|
||||||
|
|
||||||
|
nixpkgs.overlays = import ../../overlays args;
|
||||||
|
|
||||||
# Bootloader.
|
# Bootloader.
|
||||||
boot.loader = {
|
boot.loader = {
|
||||||
# efi = {
|
|
||||||
# canTouchEfiVariables = true;
|
|
||||||
# efiSysMountPoint = "/boot/efi"; # ← use the same mount point here.
|
|
||||||
# };
|
|
||||||
grub = {
|
grub = {
|
||||||
enable = true;
|
enable = true;
|
||||||
device = "/dev/sda"; # "nodev"
|
device = "/dev/sda"; # "nodev"
|
||||||
@@ -29,16 +36,24 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
networking.hostName = "nixos-test"; # Define your hostname.
|
networking = {
|
||||||
# networking.wireless.enable = true; # Enables wireless support via wpa_supplicant.
|
hostName = "nixos-test"; # Define your hostname.
|
||||||
|
wireless.enable = false; # Enables wireless support via wpa_supplicant.
|
||||||
|
|
||||||
# Configure network proxy if necessary
|
# Configure network proxy if necessary
|
||||||
# networking.proxy.default = "http://user:password@proxy:port/";
|
# proxy.default = "http://user:password@proxy:port/";
|
||||||
# networking.proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
# proxy.noProxy = "127.0.0.1,localhost,internal.domain";
|
||||||
|
|
||||||
# Enable networking
|
networkmanager.enable = true;
|
||||||
networking.networkmanager.enable = true;
|
interfaces.ens18 = {
|
||||||
networking.defaultGateway = "192.168.5.201";
|
useDHCP = false;
|
||||||
|
ipv4.addresses = [ {
|
||||||
|
address = "192.168.5.48";
|
||||||
|
prefixLength = 24;
|
||||||
|
} ];
|
||||||
|
};
|
||||||
|
defaultGateway = "192.168.5.201";
|
||||||
|
};
|
||||||
|
|
||||||
# This value determines the NixOS release from which the default
|
# This value determines the NixOS release from which the default
|
||||||
# settings for stateful data, like file locations and database versions
|
# settings for stateful data, like file locations and database versions
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
# copy from https://github.com/NixOS/nixpkgs/issues/119433#issuecomment-1326957279
|
||||||
|
# mainly for flatpak
|
||||||
|
# bindfs resolves all symlink, allowing all fonts to be accessed at /usr/share/fonts, without letting /nix into the sandbox.
|
||||||
|
|
||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
system.fsPackages = [ pkgs.bindfs ];
|
||||||
|
fileSystems = let
|
||||||
|
mkRoSymBind = path: {
|
||||||
|
device = path;
|
||||||
|
fsType = "fuse.bindfs";
|
||||||
|
options = [ "ro" "resolve-symlinks" "x-gvfs-hide" ];
|
||||||
|
};
|
||||||
|
aggregatedFonts = pkgs.buildEnv {
|
||||||
|
name = "system-fonts";
|
||||||
|
paths = config.fonts.fonts;
|
||||||
|
pathsToLink = [ "/share/fonts" ];
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
# Create an FHS mount to support flatpak host icons/fonts
|
||||||
|
"/usr/share/icons" = mkRoSymBind (config.system.path + "/share/icons");
|
||||||
|
"/usr/share/fonts" = mkRoSymBind (aggregatedFonts + "/share/fonts");
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,89 @@
|
|||||||
|
{pkgs, ...}:
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
# i3wm: old and stable, only support X11
|
||||||
|
# sway: compatible with i3wm, support Wayland. do not support Nvidia GPU officially.
|
||||||
|
# hyprland: project starts from 2022, support Wayland, envolving fast, good looking, support Nvidia GPU.
|
||||||
|
|
||||||
|
environment.pathsToLink = [ "/libexec" ]; # links /libexec from derivations to /run/current-system/sw
|
||||||
|
services.xserver = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
desktopManager = {
|
||||||
|
xterm.enable = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
displayManager = {
|
||||||
|
defaultSession = "hyprland";
|
||||||
|
lightdm.enable = false;
|
||||||
|
gdm = {
|
||||||
|
enable = true;
|
||||||
|
wayland = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
programs.hyprland = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
xwayland = {
|
||||||
|
enable = true;
|
||||||
|
hidpi = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
nvidiaPatches = true;
|
||||||
|
};
|
||||||
|
programs.light.enable = true; # monitor backlight control
|
||||||
|
|
||||||
|
|
||||||
|
# thunar file manager(part of xfce) related options
|
||||||
|
programs.thunar.plugins = with pkgs.xfce; [
|
||||||
|
thunar-archive-plugin
|
||||||
|
thunar-volman
|
||||||
|
];
|
||||||
|
services.gvfs.enable = true; # Mount, trash, and other functionalities
|
||||||
|
services.tumbler.enable = true; # Thumbnail support for images
|
||||||
|
|
||||||
|
# List packages installed in system profile. To search, run:
|
||||||
|
# $ nix search wget
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
waybar # the status bar
|
||||||
|
swaybg # the wallpaper
|
||||||
|
swayidle # the idle timeout
|
||||||
|
swaylock # locking the screen
|
||||||
|
wlogout # logout menu
|
||||||
|
wl-clipboard # copying and pasting
|
||||||
|
|
||||||
|
wf-recorder # creen recording
|
||||||
|
grim # taking screenshots
|
||||||
|
slurp # selecting a region to screenshot
|
||||||
|
# TODO replace by `flameshot gui --raw | wl-copy`
|
||||||
|
|
||||||
|
wofi # A rofi inspired launcher for wlroots compositors such as sway/hyprland
|
||||||
|
mako # the notification daemon, the same as dunst
|
||||||
|
|
||||||
|
yad # a fork of zenity, for creating dialogs
|
||||||
|
|
||||||
|
# 用于播放系统音效
|
||||||
|
mpd # for playing system sounds
|
||||||
|
mpc-cli # command-line mpd client
|
||||||
|
ncmpcpp # a mpd client with a UI
|
||||||
|
networkmanagerapplet # provide GUI app: nm-connection-editor
|
||||||
|
];
|
||||||
|
|
||||||
|
xdg.portal = {
|
||||||
|
enable = true;
|
||||||
|
wlr.enable = true;
|
||||||
|
xdgOpenUsePortal = true;
|
||||||
|
extraPortals = with pkgs; [
|
||||||
|
xdg-desktop-portal-wlr # for wlroots based compositors
|
||||||
|
xdg-desktop-portal-gtk # for gtk
|
||||||
|
# xdg-desktop-portal-kde # for kde
|
||||||
|
];
|
||||||
|
};
|
||||||
|
|
||||||
|
# for power management
|
||||||
|
services.upower.enable = true;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -13,9 +13,9 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
displayManager = {
|
displayManager = {
|
||||||
defaultSession = "none+i3";
|
defaultSession = "none+i3";
|
||||||
lightdm.enable = false;
|
lightdm.enable = false;
|
||||||
gdm.enable = true;
|
gdm.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
windowManager.i3 = {
|
windowManager.i3 = {
|
||||||
@@ -34,7 +34,7 @@
|
|||||||
arandr # screen layout manager
|
arandr # screen layout manager
|
||||||
dex # autostart applications
|
dex # autostart applications
|
||||||
xbindkeys # bind keys to commands
|
xbindkeys # bind keys to commands
|
||||||
xorg.xbacklight # control screen brightness
|
xorg.xbacklight # control screen brightness, the same as light
|
||||||
xorg.xdpyinfo # get screen information
|
xorg.xdpyinfo # get screen information
|
||||||
sysstat # get system information
|
sysstat # get system information
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
nixpkgs.config.permittedInsecurePackages = [
|
||||||
|
"electron-19.0.7" # required by wechat-uos, and it's already EOL
|
||||||
|
"openssl-1.1.1t" # OpenSSL 1.1 is reaching its end of life on 2023/09/11
|
||||||
|
];
|
||||||
|
|
||||||
|
environment.systemPackages = with config.nur.repos.xddxdd; [
|
||||||
|
# packages from nur-xddxdd
|
||||||
|
wechat-uos
|
||||||
|
];
|
||||||
|
|
||||||
|
# flatpack is recommended to install other apps such as netease-cloud-music/qqmusic/...
|
||||||
|
}
|
||||||
@@ -1,6 +1,9 @@
|
|||||||
{ config, pkgs, ... }:
|
{ config, pkgs, devenv, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
|
# enable flakes globally
|
||||||
|
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||||
|
|
||||||
# Set your time zone.
|
# Set your time zone.
|
||||||
time.timeZone = "Asia/Shanghai";
|
time.timeZone = "Asia/Shanghai";
|
||||||
|
|
||||||
@@ -21,24 +24,46 @@
|
|||||||
|
|
||||||
# Enable CUPS to print documents.
|
# Enable CUPS to print documents.
|
||||||
services.printing.enable = true;
|
services.printing.enable = true;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# all fonts are linked to /nix/var/nix/profiles/system/sw/share/X11/fonts
|
||||||
fonts = {
|
fonts = {
|
||||||
|
# use fonts specified by user rather than default ones
|
||||||
|
enableDefaultFonts = false;
|
||||||
|
fontDir.enable = true;
|
||||||
|
|
||||||
fonts = with pkgs; [
|
fonts = with pkgs; [
|
||||||
# icon fonts
|
# icon fonts
|
||||||
material-design-icons
|
material-design-icons
|
||||||
|
font-awesome
|
||||||
|
|
||||||
# normal fonts
|
# Noto 系列字体是 Google 主导的,名字的含义是「没有豆腐」(no tofu),因为缺字时显示的方框或者方框被叫作 tofu
|
||||||
noto-fonts
|
# Noto 系列字族名只支持英文,命名规则是 Noto + Sans 或 Serif + 文字名称。
|
||||||
noto-fonts-cjk
|
# 其中汉字部分叫 Noto Sans/Serif CJK SC/TC/HK/JP/KR,最后一个词是地区变种。
|
||||||
noto-fonts-emoji
|
noto-fonts # 大部分文字的常见样式,不包含汉字
|
||||||
|
noto-fonts-cjk # 汉字部分
|
||||||
|
noto-fonts-emoji # 彩色的表情符号字体
|
||||||
|
noto-fonts-extra # 提供额外的字重和宽度变种
|
||||||
|
|
||||||
|
# 思源系列字体是 Adobe 主导的。其中汉字部分被称为「思源黑体」和「思源宋体」,是由 Adobe + Google 共同开发的
|
||||||
|
source-sans # 无衬线字体,不含汉字。字族名叫 Source Sans 3 和 Source Sans Pro,以及带字重的变体,加上 Source Sans 3 VF
|
||||||
|
source-serif # 衬线字体,不含汉字。字族名叫 Source Code Pro,以及带字重的变体
|
||||||
|
source-han-sans # 思源黑体
|
||||||
|
source-han-serif # 思源宋体
|
||||||
|
|
||||||
# nerdfonts
|
# nerdfonts
|
||||||
(nerdfonts.override { fonts = [ "FiraCode" "JetBrainsMono" ]; })
|
(nerdfonts.override { fonts = [
|
||||||
];
|
"FiraCode"
|
||||||
|
"JetBrainsMono"
|
||||||
|
"Iosevka"
|
||||||
|
];})
|
||||||
|
|
||||||
# use fonts specified by user rather than default ones
|
(pkgs.callPackage ../fonts/icomoon-feather-icon-font.nix { })
|
||||||
enableDefaultFonts = false;
|
|
||||||
|
# arch linux icon, used temporarily in waybar
|
||||||
|
(pkgs.callPackage ../fonts/archcraft-icon-font.nix { })
|
||||||
|
|
||||||
|
];
|
||||||
|
|
||||||
# user defined fonts
|
# user defined fonts
|
||||||
# the reason there's Noto Color Emoji everywhere is to override DejaVu's
|
# the reason there's Noto Color Emoji everywhere is to override DejaVu's
|
||||||
@@ -78,24 +103,88 @@
|
|||||||
vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
|
vim # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
|
||||||
wget
|
wget
|
||||||
curl
|
curl
|
||||||
git
|
git # used by nix flakes
|
||||||
|
git-lfs # used by huggingface models
|
||||||
|
|
||||||
|
# networking tools
|
||||||
|
ethtool
|
||||||
|
iperf3
|
||||||
|
nmap
|
||||||
|
socat
|
||||||
|
|
||||||
|
# system tools
|
||||||
sysstat
|
sysstat
|
||||||
lm_sensors # for `sensors` command
|
lm_sensors # for `sensors` command
|
||||||
|
|
||||||
|
# misc
|
||||||
|
findutils
|
||||||
|
file
|
||||||
|
which
|
||||||
|
tree
|
||||||
|
gnused
|
||||||
|
gnutar
|
||||||
|
gawk
|
||||||
|
p7zip
|
||||||
|
xz
|
||||||
|
zstd
|
||||||
|
cifs-utils # for mounting windows shares
|
||||||
|
|
||||||
|
(python3.withPackages(ps: with ps; [
|
||||||
|
ipython
|
||||||
|
pandas
|
||||||
|
requests
|
||||||
|
pyquery
|
||||||
|
]))
|
||||||
|
|
||||||
|
# need to run `conda-install` before using it
|
||||||
|
# need to run `conda-shell` before using command `conda`
|
||||||
|
conda
|
||||||
|
|
||||||
|
# video/audio tools
|
||||||
|
libva-utils
|
||||||
|
nvtop
|
||||||
|
vdpauinfo
|
||||||
|
vulkan-tools
|
||||||
|
glxinfo
|
||||||
|
glmark2
|
||||||
|
|
||||||
# minimal screen capture tool, used by i3 blur lock to take a screenshot
|
# minimal screen capture tool, used by i3 blur lock to take a screenshot
|
||||||
# print screen key is also bound to this tool in i3 config
|
# print screen key is also bound to this tool in i3 config
|
||||||
scrot
|
scrot
|
||||||
|
|
||||||
neofetch
|
neofetch
|
||||||
xfce.thunar # xfce4's file manager
|
xfce.thunar # xfce4's file manager
|
||||||
nnn # terminal file manager
|
nnn # terminal file manager
|
||||||
|
xdg-user-dirs
|
||||||
|
|
||||||
|
# embedded development
|
||||||
|
minicom
|
||||||
|
|
||||||
|
# remote desktop(rdp connect)
|
||||||
|
remmina
|
||||||
|
freerdp # required by remmina
|
||||||
|
|
||||||
|
devenv.packages."${pkgs.system}".devenv
|
||||||
];
|
];
|
||||||
|
|
||||||
|
# replace default editor with vim
|
||||||
|
environment.variables.EDITOR = "vim";
|
||||||
|
|
||||||
# Enable sound with pipewire.
|
# Enable sound with pipewire.
|
||||||
sound.enable = true;
|
sound.enable = true;
|
||||||
hardware.pulseaudio.enable = false;
|
hardware.pulseaudio.enable = false;
|
||||||
|
|
||||||
|
# https://flatpak.org/setup/NixOS
|
||||||
|
services.flatpak.enable = true;
|
||||||
|
|
||||||
|
# security with polkit
|
||||||
services.power-profiles-daemon = {
|
services.power-profiles-daemon = {
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
security.polkit.enable = true;
|
security.polkit.enable = true;
|
||||||
|
# security with gnome-kering
|
||||||
|
services.gnome.gnome-keyring.enable = true;
|
||||||
|
security.pam.services.greetd.enableGnomeKeyring = true;
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
dbus.packages = [ pkgs.gcr ];
|
dbus.packages = [ pkgs.gcr ];
|
||||||
@@ -115,16 +204,14 @@
|
|||||||
#media-session.enable = true;
|
#media-session.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
udev.packages = with pkgs; [ gnome.gnome-settings-daemon ];
|
udev.packages = with pkgs; [
|
||||||
};
|
gnome.gnome-settings-daemon
|
||||||
|
platformio # udev rules for platformio
|
||||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
android-udev-rules
|
||||||
users.users.ryan = {
|
|
||||||
isNormalUser = true;
|
|
||||||
description = "ryan";
|
|
||||||
extraGroups = [ "networkmanager" "wheel" ];
|
|
||||||
openssh.authorizedKeys.keys = [
|
|
||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJx3Sk20pLL1b2PPKZey2oTyioODrErq83xG78YpFBoj admin@ryan-MBP"
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# android development tools, this will install adb/fastboot and other android tools and udev rules
|
||||||
|
# see https://github.com/NixOS/nixpkgs/blob/nixos-unstable/nixos/modules/programs/adb.nix
|
||||||
|
programs.adb.enable = true;
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
{config, pkgs, ...}:
|
||||||
|
|
||||||
|
{
|
||||||
|
users.groups = {
|
||||||
|
ryan = {};
|
||||||
|
docker = {};
|
||||||
|
wireshark = {};
|
||||||
|
};
|
||||||
|
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||||
|
users.users.ryan = {
|
||||||
|
isNormalUser = true;
|
||||||
|
description = "ryan";
|
||||||
|
extraGroups = [ "ryan" "users" "networkmanager" "wheel" "docker" "wireshark" "adbusers" ];
|
||||||
|
openssh.authorizedKeys.keys = [
|
||||||
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJx3Sk20pLL1b2PPKZey2oTyioODrErq83xG78YpFBoj"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
args:
|
||||||
|
# execute and import all overlay files in the current directory with the given args
|
||||||
|
builtins.map
|
||||||
|
(f: (import (./. + "/${f}") args)) # execute and import the overlay file
|
||||||
|
(builtins.filter # find all overlay files in the current directory
|
||||||
|
(f: f != "default.nix")
|
||||||
|
(builtins.attrNames (builtins.readDir ./.)))
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
# Fcitx5-Rime + Flypy
|
||||||
|
|
||||||
|
- fcitx5 input method - currently not work in vscode, and failed to add flypy input method
|
||||||
|
|
||||||
|
## Hisotry Problems
|
||||||
|
|
||||||
|
1. pay attention to the `rm -rf .local/share/fcitx5/rime/`, which may contains some auto generated rime config files, which may cause flypy not the default scheme for rime
|
||||||
|
2. manage `~/.config/fcitx5/profile` in ../home/hyprland/default.nix, which hardcode rime as the default input method, so you do not need to use fcitx-configtool to set rime as the default input method.
|
||||||
|
3. fcitx5-rime still cannot use on vscode & chrome now... need more time to figure out why and resolve it.
|
||||||
|
|
||||||
|
|
||||||
|
## Docs about fcitx5
|
||||||
|
|
||||||
|
- [Fcitx5 - Arch Linux Wiki](https://wiki.archlinux.org/title/Fcitx5)
|
||||||
|
- [Fcitx5 - Official Wiki](https://fcitx-im.org/wiki/Fcitx_5/zh-cn)
|
||||||
|
- [disscussion about using fcitx5 on hyprland](https://github.com/hyprwm/Hyprland/discussions/421)
|
||||||
|
- [hyprland issue about fcitx5](https://github.com/hyprwm/Hyprland/discussions/421)
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
# 为了不使用默认的 rime-data,改用我自定义的小鹤音形数据,这里需要 override
|
||||||
|
# 参考 https://github.com/NixOS/nixpkgs/blob/e4246ae1e7f78b7087dce9c9da10d28d3725025f/pkgs/tools/inputmethods/fcitx5/fcitx5-rime.nix
|
||||||
|
{...}:
|
||||||
|
|
||||||
|
(self: super: {
|
||||||
|
# 小鹤音形配置,配置来自 flypy.com 官方网盘的鼠须管配置压缩包「小鹤音形“鼠须管”for macOS.zip」
|
||||||
|
# 我仅修改了 default.yaml 文件,将其中的半角括号改为了直角括号「 与 」。
|
||||||
|
rime-data = ./rime-data-flypy;
|
||||||
|
fcitx5-rime = super.fcitx5-rime.override { rimeDataPkgs = [ ./rime-data-flypy ]; };
|
||||||
|
})
|
||||||
@@ -0,0 +1,92 @@
|
|||||||
|
# secrets management
|
||||||
|
|
||||||
|
This directory contains my secret files, encrypt by agenix:
|
||||||
|
|
||||||
|
- my wireguard configuration files, which is used by `wg-quick`
|
||||||
|
- github token, used by nix flakes to query and downloads flakes from github
|
||||||
|
- without this, you may reach out github api rate limit.
|
||||||
|
- ssh key pairs for my homelab and other servers
|
||||||
|
- ...
|
||||||
|
|
||||||
|
## TODO
|
||||||
|
|
||||||
|
- a better way to manage all these secrets, is to used a separate private github repository to store all these secrets, and use it as a flakes input this this repo.
|
||||||
|
- e.g. <https://github.com/xddxdd/nixos-config/blob/25ae3de/flake.nix#L82>
|
||||||
|
|
||||||
|
## Add or Update Secrets
|
||||||
|
|
||||||
|
This job is done by `agenix` CLI tool with the `./secrets.nix` file.
|
||||||
|
|
||||||
|
Pretend you want to add a new secret file `xxx.age`, then:
|
||||||
|
|
||||||
|
1. `cd` to this directory
|
||||||
|
1. edit `secrets.nix`, add a new entry for `xxx.age`, which defines the
|
||||||
|
encryption keys and the secret file path, e.g.
|
||||||
|
```nix
|
||||||
|
# This file is not imported into your NixOS configuration. It is only used for the agenix CLI.
|
||||||
|
# agenix use the public keys defined in this file to encrypt the secrets.
|
||||||
|
# and users can decrypt the secrets by any of the corresponding private keys.
|
||||||
|
|
||||||
|
let
|
||||||
|
# get user's ssh public key by command:
|
||||||
|
# cat ~/.ssh/id_ed25519.pub
|
||||||
|
# if you do not have one, you can generate it by command:
|
||||||
|
# ssh-keygen -t ed25519
|
||||||
|
ryan = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJx3Sk20pLL1b2PPKZey2oTyioODrErq83xG78YpFBoj";
|
||||||
|
users = [ ryan ];
|
||||||
|
|
||||||
|
# get system's ssh public key by command:
|
||||||
|
# cat /etc/ssh/ssh_host_ed25519_key.pub
|
||||||
|
msi-rtx4090 = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICGeXNCazqiqxn8TmbCRjA+pLWrxwenn+CFhizBMP6en root@msi-rtx4090";
|
||||||
|
systems = [ msi-rtx4090 ];
|
||||||
|
in
|
||||||
|
{
|
||||||
|
"./encrypt/xxx.age".publicKeys = users ++ systems;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
2. create and edit the secret file `xxx.age` interactively by command:
|
||||||
|
```shell
|
||||||
|
agenix -e ./encrypt/xxx.age
|
||||||
|
```
|
||||||
|
3. or you can also encrypt an existing file to `xxx.age` by command:
|
||||||
|
```shell
|
||||||
|
agenix -e ./encrypt/xxx.age < /path/to/xxx
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Deploy Secrets
|
||||||
|
|
||||||
|
This job is done by `nixos-rebuild` with the `./default.nix` file.
|
||||||
|
|
||||||
|
An nixos module exmaple(need to set agenix as flake inputs first...):
|
||||||
|
|
||||||
|
```nix
|
||||||
|
{ config, pkgs, agenix, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
agenix.nixosModules.default
|
||||||
|
];
|
||||||
|
|
||||||
|
environment.systemPackages = [
|
||||||
|
agenix.packages."${pkgs.system}".default
|
||||||
|
];
|
||||||
|
|
||||||
|
age.secrets."xxx" = {
|
||||||
|
# wether secrets are symlinked to age.secrets.<name>.path
|
||||||
|
symlink = true;
|
||||||
|
# target path for decrypted file
|
||||||
|
path = "/etc/xxx/";
|
||||||
|
# encrypted file path
|
||||||
|
file = ./encrypt/xxx.age;
|
||||||
|
mode = "0400";
|
||||||
|
owner = "root";
|
||||||
|
group = "root";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
`nixos-rebuild` will decrypt the secrets using the private keys defined by argument `age.identityPaths`,
|
||||||
|
And then symlink the secrets to the path defined by argument `age.secrets.<name>.path`, it defaults to `/etc/secrets`.
|
||||||
|
|
||||||
|
NOTE: `age.identityPaths` it defaults to `~/.ssh/id_ed25519` and `~/.ssh/id_rsa`, so you should put your decrypt keys there. if you're deploying to the same machine as you're encrypting from, it should work out of the box.
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
{ config, pkgs, agenix, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
agenix.nixosModules.default
|
||||||
|
];
|
||||||
|
|
||||||
|
environment.systemPackages = [
|
||||||
|
agenix.packages."${pkgs.system}".default
|
||||||
|
];
|
||||||
|
|
||||||
|
# # wireguard config used with `wg-quick up wg-business`
|
||||||
|
age.secrets."wg-business.conf" = {
|
||||||
|
# wether secrets are symlinked to age.secrets.<name>.path
|
||||||
|
symlink = true;
|
||||||
|
# target path for decrypted file
|
||||||
|
path = "/etc/wireguard/";
|
||||||
|
# encrypted file path
|
||||||
|
file = ./encrypt/wg-business.conf.age;
|
||||||
|
mode = "0400";
|
||||||
|
owner = "root";
|
||||||
|
group = "root";
|
||||||
|
};
|
||||||
|
|
||||||
|
# smb-credentials is referenced in /etc/fstab, by ../hosts/msi-rtx4090/cifs-mount.nix
|
||||||
|
age.secrets."smb-credentials" = {
|
||||||
|
# wether secrets are symlinked to age.secrets.<name>.path
|
||||||
|
symlink = true;
|
||||||
|
# encrypted file path
|
||||||
|
file = ./encrypt/smb-credentials.age;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
age-encryption.org/v1
|
||||||
|
-> ssh-ed25519 YVM6Sg vO0DYm8iol7IBG6rscZq/LQpRHh54+DdOFUR01b6yR0
|
||||||
|
gqEePw0Fvo2uDAcwEObd7PLjA2vU6e6JhGGVoGULazA
|
||||||
|
-> ssh-ed25519 Q4ARMQ fyGN9P+rvYJ8Qk5Iiyjn++Ml/XiVMvk62EshD9JOvDA
|
||||||
|
ikPmvDRZwhkHAZ2U8R10QgpJlTTynHI5Vm50xxQiKT8
|
||||||
|
-> b[1(F-grease 23C oS"65TE ~50zBiB
|
||||||
|
eMwvm36CT7qLNS6gXVezB3m8pCKyTbKfuCq3vgi/D4DQXfDq4IdAANp0o6DKuaTX
|
||||||
|
gQOZK5zIELG4bHS9SQRW4H7eAjJBUgA
|
||||||
|
--- 1p8fRawaLk8WpQHYAE7sD016F6bo4agn2UxDuUtZzmI
|
||||||
|
g·ógs=k+nN½"±äóoá/=^÷Z§Ÿ<~ÑÓŽk˜i Gw3ó�Ñ”=(Aˆm
|
||||||
|
úß¼¶�êU#’à
|
||||||