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 |
@@ -1,6 +0,0 @@
|
|||||||
result
|
|
||||||
result/
|
|
||||||
.direnv/
|
|
||||||
.DS_Store
|
|
||||||
.pre-commit-config.yaml
|
|
||||||
logs/
|
|
||||||
@@ -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,16 +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
|
||||||
|
|
||||||
|
- enable disk encryption to enhance data security
|
||||||
|
- make fcitx5-rime work in vscode/chrome on wayland
|
||||||
|
|
||||||
## 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
|
||||||
|
# deploy my test configuration
|
||||||
sudo nixos-rebuild switch --flake .#nixos-test
|
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,61 +1,631 @@
|
|||||||
{
|
{
|
||||||
"nodes": {
|
"nodes": {
|
||||||
"catppuccin-bat": {
|
"agenix": {
|
||||||
"flake": false,
|
"inputs": {
|
||||||
|
"darwin": "darwin",
|
||||||
|
"home-manager": "home-manager",
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1734996624,
|
"lastModified": 1684153753,
|
||||||
"narHash": "sha256-6fWoCH90IGumAMc4buLRWL0N61op+AuMNN9CAR9/OdI=",
|
"narHash": "sha256-PVbWt3qrjYAK+T5KplFcO+h7aZWfEj1UtyoKlvcDxh0=",
|
||||||
"owner": "catppuccin",
|
"owner": "ryantm",
|
||||||
"repo": "bat",
|
"repo": "agenix",
|
||||||
"rev": "699f60fc8ec434574ca7451b444b880430319941",
|
"rev": "db5637d10f797bb251b94ef9040b237f4702cde3",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "catppuccin",
|
"owner": "ryantm",
|
||||||
"repo": "bat",
|
"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": false,
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1673956053,
|
||||||
|
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=",
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "edolstra",
|
||||||
|
"repo": "flake-compat",
|
||||||
|
"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": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1667395993,
|
||||||
|
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"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"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"home-manager": {
|
"home-manager": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"nixpkgs": ["nixpkgs"]
|
"nixpkgs": [
|
||||||
|
"agenix",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1748487945,
|
"lastModified": 1684596126,
|
||||||
"narHash": "sha256-e9zc/rHdoH9i+sFFhhQiKoF6IuD+T2rB/nUyPaO7CCg=",
|
"narHash": "sha256-4RZZmygeEXpuBqEXGs38ZAcWjWKGwu13Iqbxub6wuJk=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"rev": "0d13ea58d565d3c1c1468ddae1f623316dc395d9",
|
"rev": "27ef11f0218d9018ebb2948d40133df2b1de622d",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"ref": "release-25.05",
|
|
||||||
"repo": "home-manager",
|
"repo": "home-manager",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"home-manager_2": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1684484967,
|
||||||
|
"narHash": "sha256-P3ftCqeJmDYS9LSr2gGC4XGGcp5vv8TOasJX6fVHWsw=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"rev": "b9a52ad20e58ebd003444915e35e3dd2c18fc715",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "home-manager",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"hyprland": {
|
||||||
|
"inputs": {
|
||||||
|
"hyprland-protocols": "hyprland-protocols",
|
||||||
|
"nixpkgs": "nixpkgs_3",
|
||||||
|
"wlroots": "wlroots",
|
||||||
|
"xdph": "xdph"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1683130508,
|
||||||
|
"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",
|
||||||
|
"repo": "lib-aggregate",
|
||||||
|
"rev": "19d70ca7a81956bd01a768297b84798f301e150f",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"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"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nixpkgs": {
|
"nixpkgs": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1748302896,
|
"lastModified": 1684570954,
|
||||||
"narHash": "sha256-ixMT0a8mM091vSswlTORZj93WQAJsRNmEvqLL+qwTFM=",
|
"narHash": "sha256-FX5y4Sm87RWwfu9PI71XFvuRpZLowh00FQpIJ1WfXqE=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "3005f20ce0aaa58169cdee57c8aa12e5f1b6e1b3",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"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",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "7848cd8c982f7740edf76ddb3b43d234cb80fc4d",
|
"rev": "628d4bb6e9f4f0c30cfd9b23d3c1cdcec9d3cb5c",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"ref": "nixos-25.05",
|
"ref": "nixos-22.11",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"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": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1677534593,
|
||||||
|
"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",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "3005f20ce0aaa58169cdee57c8aa12e5f1b6e1b3",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"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": {
|
||||||
"catppuccin-bat": "catppuccin-bat",
|
"agenix": "agenix",
|
||||||
"home-manager": "home-manager",
|
"devenv": "devenv",
|
||||||
"nixpkgs": "nixpkgs"
|
"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"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,88 +1,115 @@
|
|||||||
{
|
{
|
||||||
description = "NixOS configuration of Ryan Yin";
|
description = "NixOS configuration of Ryan Yin";
|
||||||
|
|
||||||
##################################################################################################################
|
# flake 为了确保够纯,它不依赖系统自身的 /etc/nix/nix.conf,而是在 flake.nix 中通过 nixConfig 设置
|
||||||
#
|
# 但是为了确保安全性,flake 默认仅允许直接设置少数 nixConfig 参数,其他参数都需要在执行 nix 命令时指定 `--accept-flake-config`,否则会被忽略
|
||||||
# Want to know Nix in details? Looking for a beginner-friendly tutorial?
|
# <https://nixos.org/manual/nix/stable/command-ref/conf-file.html>
|
||||||
# Check out https://github.com/ryan4yin/nixos-and-flakes-book !
|
# 如果有些包国内镜像下载不到,它仍然会走国外,这时候就得靠旁路由来解决了。
|
||||||
#
|
# 临时修改默认网关为旁路由: sudo ip route add default via 192.168.5.201
|
||||||
##################################################################################################################
|
# sudo ip route del default via 192.168.5.201
|
||||||
|
|
||||||
# the nixConfig here only affects the flake itself, not the system configuration!
|
|
||||||
nixConfig = {
|
nixConfig = {
|
||||||
# substituers will be appended to the default substituters when fetching packages
|
experimental-features = [ "nix-command" "flakes" ];
|
||||||
# nix com extra-substituters = [munity's cache server
|
substituters = [
|
||||||
|
# replace official cache with a mirror located in China
|
||||||
|
"https://mirrors.bfsu.edu.cn/nix-channels/store"
|
||||||
|
"https://cache.nixos.org/"
|
||||||
|
];
|
||||||
|
|
||||||
|
# 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="
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# 这是 flake.nix 的标准格式,inputs 是 flake 的依赖,outputs 是 flake 的输出
|
||||||
|
# inputs 中的每一项都被拉取、构建后,被作为参数传递给 outputs 函数
|
||||||
inputs = {
|
inputs = {
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
|
# flake inputs 有很多种引用方式,应用最广泛的是 github 的引用方式
|
||||||
home-manager.url = "github:nix-community/home-manager/release-25.05";
|
|
||||||
|
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";
|
||||||
|
# follows 是 inputs 中的继承语法
|
||||||
|
# 这里使 home-manager 的 nixpkgs 这个 inputs 与当前 flake 的 inputs.nixpkgs 保持一致,避免依赖的 nixpkgs 版本不一致导致问题
|
||||||
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
|
||||||
catppuccin-bat = {
|
# modern window compositor
|
||||||
url = "github:catppuccin/bat";
|
hyprland.url = "github:hyprwm/Hyprland/v0.25.0";
|
||||||
flake = false;
|
# 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 中定义的依赖项,可以通过它们的名称来引用。
|
||||||
self,
|
# 不过 self 是个例外,这个特殊参数指向 outputs 自身(自引用),以及 flake 根目录
|
||||||
nixpkgs,
|
# 这里的 @ 语法将函数的参数 attribute set 取了个别名,方便在内部使用
|
||||||
home-manager,
|
outputs = inputs@{
|
||||||
...
|
self,
|
||||||
|
nixpkgs,
|
||||||
|
home-manager,
|
||||||
|
...
|
||||||
}: {
|
}: {
|
||||||
nixosConfigurations = {
|
nixosConfigurations = {
|
||||||
nixos-test = let
|
msi-rtx4090 = nixpkgs.lib.nixosSystem {
|
||||||
username = "ryan";
|
system = "x86_64-linux";
|
||||||
specialArgs = {inherit username;};
|
|
||||||
in
|
|
||||||
nixpkgs.lib.nixosSystem {
|
|
||||||
inherit specialArgs;
|
|
||||||
system = "x86_64-linux";
|
|
||||||
|
|
||||||
modules = [
|
specialArgs = inputs;
|
||||||
./hosts/nixos-test
|
modules = [
|
||||||
./users/${username}/nixos.nix
|
./hosts/msi-rtx4090
|
||||||
|
|
||||||
home-manager.nixosModules.home-manager
|
# home-manager 作为 nixos 的一个 module
|
||||||
{
|
# 这样在 nixos-rebuild switch 时,home-manager 也会被自动部署,不需要额外执行 home-manager switch 命令
|
||||||
home-manager.useGlobalPkgs = true;
|
home-manager.nixosModules.home-manager
|
||||||
home-manager.useUserPackages = true;
|
{
|
||||||
|
home-manager.useGlobalPkgs = true;
|
||||||
|
home-manager.useUserPackages = true;
|
||||||
|
|
||||||
home-manager.extraSpecialArgs = inputs // specialArgs;
|
# 使用 home-manager.extraSpecialArgs 自定义传递给 ./home 的参数
|
||||||
home-manager.users.${username} = import ./users/${username}/home.nix;
|
home-manager.extraSpecialArgs = inputs;
|
||||||
}
|
home-manager.users.ryan = import ./home;
|
||||||
];
|
}
|
||||||
};
|
];
|
||||||
|
};
|
||||||
|
|
||||||
msi-rtx4090 = let
|
|
||||||
username = "suzi"; # another username for this machine
|
|
||||||
specialArgs = {inherit username;};
|
|
||||||
in
|
|
||||||
nixpkgs.lib.nixosSystem {
|
|
||||||
inherit specialArgs;
|
|
||||||
system = "x86_64-linux";
|
|
||||||
|
|
||||||
modules = [
|
nixos-test = nixpkgs.lib.nixosSystem {
|
||||||
./hosts/msi-rtx4090
|
system = "x86_64-linux";
|
||||||
./users/${username}/nixos.nix
|
specialArgs = inputs;
|
||||||
|
modules = [
|
||||||
|
./hosts/nixos-test
|
||||||
|
|
||||||
home-manager.nixosModules.home-manager
|
# home-manager 作为 nixos 的一个 module
|
||||||
{
|
# 这样在 nixos-rebuild switch 时,home-manager 也会被自动部署,不需要额外执行 home-manager switch 命令
|
||||||
home-manager.useGlobalPkgs = true;
|
home-manager.nixosModules.home-manager
|
||||||
home-manager.useUserPackages = true;
|
{
|
||||||
|
home-manager.useGlobalPkgs = true;
|
||||||
|
home-manager.useUserPackages = true;
|
||||||
|
|
||||||
home-manager.extraSpecialArgs = inputs // specialArgs;
|
# 使用 home-manager.extraSpecialArgs 自定义传递给 ./home 的参数
|
||||||
home-manager.users.${username} = import ./users/${username}/home.nix;
|
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;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,9 +1,21 @@
|
|||||||
{username, ...}: {
|
{ config, pkgs, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./fcitx5
|
||||||
|
./hyprland
|
||||||
|
# ./i3
|
||||||
|
./programs
|
||||||
|
./rofi
|
||||||
|
./shell
|
||||||
|
];
|
||||||
|
|
||||||
# Home Manager needs a bit of information about you and the
|
# Home Manager needs a bit of information about you and the
|
||||||
# paths it should manage.
|
# paths it should manage.
|
||||||
home = {
|
home = {
|
||||||
inherit username;
|
username = "ryan";
|
||||||
homeDirectory = "/home/${username}";
|
homeDirectory = "/home/ryan";
|
||||||
|
|
||||||
# This value determines the Home Manager release that your
|
# This value determines the Home Manager release that your
|
||||||
# configuration is compatible with. This helps avoid breakage
|
# configuration is compatible with. This helps avoid breakage
|
||||||
@@ -13,7 +25,7 @@
|
|||||||
# You can update Home Manager without changing this value. See
|
# You can update Home Manager without changing this value. See
|
||||||
# the Home Manager release notes for a list of state version
|
# the Home Manager release notes for a list of state version
|
||||||
# changes in each release.
|
# changes in each release.
|
||||||
stateVersion = "25.05";
|
stateVersion = "22.11";
|
||||||
};
|
};
|
||||||
|
|
||||||
# Let Home Manager install and manage itself.
|
# Let Home Manager install and manage itself.
|
||||||
@@ -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,21 +1,55 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
|
nixpkgs-stable,
|
||||||
config,
|
config,
|
||||||
username,
|
|
||||||
...
|
...
|
||||||
}: {
|
}: 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.${username} = {};
|
# 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,9 +1,7 @@
|
|||||||
|
{pkgs, config, ...}:
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
catppuccin-bat,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
# archives
|
# archives
|
||||||
zip
|
zip
|
||||||
@@ -12,78 +10,153 @@
|
|||||||
|
|
||||||
# utils
|
# utils
|
||||||
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
|
||||||
yarn
|
yarn
|
||||||
|
|
||||||
# db related
|
# db related
|
||||||
dbeaver-bin
|
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 = {
|
||||||
pager = "less -FR";
|
pager = "less -FR";
|
||||||
theme = "catppuccin-mocha";
|
theme = "Catppuccin-mocha";
|
||||||
};
|
};
|
||||||
themes = {
|
themes = {
|
||||||
# https://raw.githubusercontent.com/catppuccin/bat/main/Catppuccin-mocha.tmTheme
|
Catppuccin-mocha = builtins.readFile (pkgs.fetchurl {
|
||||||
catppuccin-mocha = {
|
url = "https://raw.githubusercontent.com/catppuccin/bat/main/Catppuccin-mocha.tmTheme";
|
||||||
src = catppuccin-bat;
|
hash = "sha256-qMQNJGZImmjrqzy7IiEkY5IhvPAMZpq0W6skLLsng/w=";
|
||||||
file = "Catppuccin-mocha.tmTheme";
|
});
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
btop.enable = true; # replacement of htop/nmon
|
btop.enable = true; # replacement of htop/nmon
|
||||||
eza.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;
|
||||||
|
|||||||
@@ -1,4 +1,8 @@
|
|||||||
{
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
imports = [
|
imports = [
|
||||||
./browsers.nix
|
./browsers.nix
|
||||||
./common.nix
|
./common.nix
|
||||||
@@ -6,4 +10,4 @@
|
|||||||
./media.nix
|
./media.nix
|
||||||
./xdg.nix
|
./xdg.nix
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
programs.git = {
|
programs.git = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
# ... Other options ...
|
userName = "Ryan Yin";
|
||||||
|
userEmail = "xiaoyin_c@qq.com";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -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,4 +1,4 @@
|
|||||||
{config, ...}: let
|
{config, pkgs, ...}: let
|
||||||
browser = ["firefox.desktop"];
|
browser = ["firefox.desktop"];
|
||||||
|
|
||||||
# XDG MIME types
|
# XDG MIME types
|
||||||
@@ -11,18 +11,18 @@
|
|||||||
"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;
|
||||||
"x-scheme-handler/unknown" = browser;
|
"x-scheme-handler/unknown" = browser;
|
||||||
|
|
||||||
"audio/*" = ["mpv.desktop"];
|
"audio/*" = ["mpv.desktop"];
|
||||||
"video/*" = ["mpv.desktop"];
|
"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"];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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,15 +10,23 @@ 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";
|
||||||
WINEPREFIX = d + "/wine";
|
WINEPREFIX = d + "/wine";
|
||||||
|
XAUTHORITY = "$XDG_RUNTIME_DIR/Xauthority";
|
||||||
|
|
||||||
# set default applications
|
# set default applications
|
||||||
EDITOR = "vim";
|
|
||||||
BROWSER = "firefox";
|
BROWSER = "firefox";
|
||||||
TERMINAL = "alacritty";
|
TERMINAL = "alacritty";
|
||||||
|
|
||||||
@@ -28,7 +36,9 @@ 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,973 +0,0 @@
|
|||||||
# Based on the default config generated by:
|
|
||||||
# ```
|
|
||||||
# config nu --doc
|
|
||||||
# ```
|
|
||||||
#
|
|
||||||
# Nushell Config File Documentation
|
|
||||||
#
|
|
||||||
# Warning: This file is intended for documentation purposes only and
|
|
||||||
# is not intended to be used as an actual configuration file as-is.
|
|
||||||
#
|
|
||||||
# version = "0.105.1"
|
|
||||||
#
|
|
||||||
# A `config.nu` file is used to override default Nushell settings,
|
|
||||||
# define (or import) custom commands, or run any other startup tasks.
|
|
||||||
# See https://www.nushell.sh/book/configuration.html
|
|
||||||
#
|
|
||||||
# Nushell sets "sensible defaults" for most configuration settings, so
|
|
||||||
# the user's `config.nu` only needs to override these defaults if
|
|
||||||
# desired.
|
|
||||||
#
|
|
||||||
# This file serves as simple "in-shell" documentation for these
|
|
||||||
# settings, or you can view a more complete discussion online at:
|
|
||||||
# https://nushell.sh/book/configuration
|
|
||||||
#
|
|
||||||
# You can pretty-print and page this file using:
|
|
||||||
# config nu --doc | nu-highlight | less -R
|
|
||||||
|
|
||||||
# $env.config
|
|
||||||
# -----------
|
|
||||||
# The $env.config environment variable is a record containing most Nushell
|
|
||||||
# configuration settings. Keep in mind that, as a record, setting it to a
|
|
||||||
# new record will remove any keys which aren't in the new record. Nushell
|
|
||||||
# will then automatically merge in the internal defaults for missing keys.
|
|
||||||
#
|
|
||||||
# The same holds true for keys in the $env.config which are also records
|
|
||||||
# or lists.
|
|
||||||
#
|
|
||||||
# For this reason, settings are typically changed by updating the value of
|
|
||||||
# a particular key. Merging a new config record is also possible. See the
|
|
||||||
# Configuration chapter of the book for more information.
|
|
||||||
|
|
||||||
# ------------------------
|
|
||||||
# History-related settings
|
|
||||||
# ------------------------
|
|
||||||
# $env.config.history.*
|
|
||||||
|
|
||||||
# file_format (string): Either "sqlite" or "plaintext". While text-backed history
|
|
||||||
# is currently the default for historical reasons, "sqlite" is stable and
|
|
||||||
# provides more advanced history features.
|
|
||||||
$env.config.history.file_format = "sqlite"
|
|
||||||
|
|
||||||
# max_size (int): The maximum number of entries allowed in the history.
|
|
||||||
# After exceeding this value, the oldest history items will be removed
|
|
||||||
# as new commands are added.
|
|
||||||
$env.config.history.max_size = 5_000_000
|
|
||||||
|
|
||||||
# sync_on_enter (bool): Whether the plaintext history file is updated
|
|
||||||
# each time a command is entered. If set to `false`, the plaintext history
|
|
||||||
# is only updated/written when the shell exits. This setting has no effect
|
|
||||||
# for SQLite-backed history.
|
|
||||||
$env.config.history.sync_on_enter = true
|
|
||||||
|
|
||||||
# isolation (bool):
|
|
||||||
# `true`: New history from other currently-open Nushell sessions is not
|
|
||||||
# seen when scrolling through the history using PrevHistory (typically
|
|
||||||
# the Up key) or NextHistory (Down key)
|
|
||||||
# `false`: All commands entered in other Nushell sessions will be mixed with
|
|
||||||
# those from the current shell.
|
|
||||||
# Note: Older history items (from before the current shell was started) are
|
|
||||||
# always shown.
|
|
||||||
# This setting only applies to SQLite-backed history
|
|
||||||
$env.config.history.isolation = true
|
|
||||||
|
|
||||||
# ----------------------
|
|
||||||
# Miscellaneous Settings
|
|
||||||
# ----------------------
|
|
||||||
|
|
||||||
# show_banner (bool): Enable or disable the welcome banner at startup
|
|
||||||
$env.config.show_banner = true
|
|
||||||
|
|
||||||
# rm.always_trash (bool):
|
|
||||||
# true: rm behaves as if the --trash/-t option is specified
|
|
||||||
# false: rm behaves as if the --permanent/-p option is specified (default)
|
|
||||||
# Explicitly calling `rm` with `--trash` or `--permanent` always override this setting
|
|
||||||
# Note that this feature is dependent on the host OS trashcan support.
|
|
||||||
$env.config.rm.always_trash = false
|
|
||||||
|
|
||||||
# recursion_limit (int): how many times a command can call itself recursively
|
|
||||||
# before an error will be generated.
|
|
||||||
$env.config.recursion_limit = 50
|
|
||||||
|
|
||||||
# ---------------------------
|
|
||||||
# Commandline Editor Settings
|
|
||||||
# ---------------------------
|
|
||||||
|
|
||||||
# edit_mode (string) "vi" or "emacs" sets the editing behavior of Reedline
|
|
||||||
$env.config.edit_mode = "emacs"
|
|
||||||
|
|
||||||
# Command that will be used to edit the current line buffer with Ctrl+O.
|
|
||||||
# If unset, uses $env.VISUAL and then $env.EDITOR
|
|
||||||
#
|
|
||||||
# Tip: Set to "editor" to use the default editor on Unix platforms using
|
|
||||||
# the Alternatives system or equivalent
|
|
||||||
$env.config.buffer_editor = "editor"
|
|
||||||
# To set arguments for the editor, a list can be used:
|
|
||||||
$env.config.buffer_editor = ["emacsclient", "-s", "light", "-t"]
|
|
||||||
|
|
||||||
# cursor_shape_* (string)
|
|
||||||
# -----------------------
|
|
||||||
# The following variables accept a string from the following selections:
|
|
||||||
# "block", "underscore", "line", "blink_block", "blink_underscore", "blink_line", or "inherit"
|
|
||||||
# "inherit" skips setting cursor shape and uses the current terminal setting.
|
|
||||||
$env.config.cursor_shape.emacs = "inherit" # Cursor shape in emacs mode
|
|
||||||
$env.config.cursor_shape.vi_insert = "block" # Cursor shape in vi-insert mode
|
|
||||||
$env.config.cursor_shape.vi_normal = "underscore" # Cursor shape in normal vi mode
|
|
||||||
|
|
||||||
# --------------------
|
|
||||||
# Completions Behavior
|
|
||||||
# --------------------
|
|
||||||
# $env.config.completions.*
|
|
||||||
# Apply to the Nushell completion system
|
|
||||||
|
|
||||||
# algorithm (string): "prefix", "substring" or "fuzzy"
|
|
||||||
$env.config.completions.algorithm = "prefix"
|
|
||||||
|
|
||||||
# sort (string): One of "smart" or "alphabetical"
|
|
||||||
# In "smart" mode sort order is based on the "algorithm" setting.
|
|
||||||
# When using the "prefix" algorithm, results are alphabetically sorted.
|
|
||||||
# When using the "substring" algorithm, results are alphabetically sorted.
|
|
||||||
# When using the "fuzzy" algorithm, results are sorted based on their fuzzy score.
|
|
||||||
$env.config.completions.sort = "smart"
|
|
||||||
|
|
||||||
# case_sensitive (bool): true/false to enable/disable case-sensitive completions
|
|
||||||
$env.config.completions.case_sensitive = false
|
|
||||||
|
|
||||||
# quick (bool):
|
|
||||||
# true: auto-select the completion when only one remains
|
|
||||||
# false: prevents auto-select of the final result
|
|
||||||
$env.config.completions.quick = true
|
|
||||||
|
|
||||||
# partial (bool):
|
|
||||||
# true: Partially complete up to the best possible match
|
|
||||||
# false: Do not partially complete
|
|
||||||
# Partial Example: If a directory contains only files named "forage", "food", and "forest",
|
|
||||||
# then typing "ls " and pressing <Tab> will partially complete the first two
|
|
||||||
# letters, "f" and "o". If the directory also includes a file named "faster",
|
|
||||||
# then only "f" would be partially completed.
|
|
||||||
$env.config.completions.partial = true
|
|
||||||
|
|
||||||
# use_ls_colors (bool): When true, apply LS_COLORS to file/path/directory matches
|
|
||||||
$env.config.completions.use_ls_colors = true
|
|
||||||
|
|
||||||
# --------------------
|
|
||||||
# External Completions
|
|
||||||
# --------------------
|
|
||||||
# completions.external.*: Settings related to completing external commands
|
|
||||||
# and additional completers
|
|
||||||
|
|
||||||
# external.enable (bool)
|
|
||||||
# true: search for external commands on the Path
|
|
||||||
# false: disabling might be desired for performance if your path includes
|
|
||||||
# directories on a slower filesystem
|
|
||||||
$env.config.completions.external.enable = true
|
|
||||||
|
|
||||||
# max_results (int): Limit the number of external commands retrieved from
|
|
||||||
# path to this value. Has no effect if `...external.enable` (above) is set to `false`
|
|
||||||
$env.config.completions.external.max_results = 50
|
|
||||||
|
|
||||||
# completer (closure with a |spans| parameter): A command to call for *argument* completions
|
|
||||||
# to commands (internal or external).
|
|
||||||
#
|
|
||||||
# The |spans| parameter is a list of strings representing the tokens (spans)
|
|
||||||
# on the current commandline. It is always a list of at least two strings - The
|
|
||||||
# command being completed plus the first argument of that command ("" if no argument has
|
|
||||||
# been partially typed yet), and additional strings for additional arguments beyond
|
|
||||||
# the first.
|
|
||||||
#
|
|
||||||
# This setting is usually set to a closure which will call a third-party completion system, such
|
|
||||||
# as Carapace.
|
|
||||||
#
|
|
||||||
# Note: The following is an over-simplified completer command that will call Carapace if it
|
|
||||||
# is installed. Please use the official Carapace completer, which can be generated automatically
|
|
||||||
# by Carapace itself. See the Carapace documentation for the proper syntax.
|
|
||||||
$env.config.completions.external.completer = {|spans|
|
|
||||||
carapace $spans.0 nushell ...$spans | from json
|
|
||||||
}
|
|
||||||
|
|
||||||
# --------------------
|
|
||||||
# Terminal Integration
|
|
||||||
# --------------------
|
|
||||||
# Nushell can output a number of escape codes to enable advanced features in Terminal Emulators
|
|
||||||
# that support them. Settings in this section enable or disable these features in Nushell.
|
|
||||||
# Features aren't supported by your Terminal can be disabled. Features can also be disabled,
|
|
||||||
# of course, if there is a conflict between the Nushell and Terminal's implementation.
|
|
||||||
|
|
||||||
# use_kitty_protocol (bool):
|
|
||||||
# A keyboard enhancement protocol supported by the Kitty Terminal. Additional keybindings are
|
|
||||||
# available when using this protocol in a supported terminal. For example, without this protocol,
|
|
||||||
# Ctrl+I is interpreted as the Tab Key. With this protocol, Ctrl+I and Tab can be mapped separately.
|
|
||||||
$env.config.use_kitty_protocol = false
|
|
||||||
|
|
||||||
# osc2 (bool):
|
|
||||||
# When true, the current directory and running command are shown in the terminal tab/window title.
|
|
||||||
# Also abbreviates the directory name by prepending ~ to the home directory and its subdirectories.
|
|
||||||
$env.config.shell_integration.osc2 = true
|
|
||||||
|
|
||||||
# osc7 (bool):
|
|
||||||
# Nushell will report the current directory to the terminal using OSC 7. This is useful when
|
|
||||||
# spawning new tabs in the same directory.
|
|
||||||
# This is disabled by default on Windows in favor of the `osc9_9` option.
|
|
||||||
$env.config.shell_integration.osc7 = true
|
|
||||||
|
|
||||||
# osc9_9 (bool):
|
|
||||||
# Enables/Disables OSC 9;9 support, originally a ConEmu terminal feature. This is an
|
|
||||||
# alternative to OSC 7 which also communicates the current path to the terminal.
|
|
||||||
# This is enabled by default on Windows as it is used by the Windows Terminal.
|
|
||||||
$env.config.shell_integration.osc9_9 = false
|
|
||||||
|
|
||||||
# osc8 (bool):
|
|
||||||
# When true, the `ls` command will generate clickable links that can be launched in another
|
|
||||||
# application by the terminal.
|
|
||||||
# Note: This setting replaces the now deprecated `ls.clickable_links`
|
|
||||||
$env.config.shell_integration.osc8 = true
|
|
||||||
|
|
||||||
# Deprecated
|
|
||||||
# $env.config.ls.clickable_links = true
|
|
||||||
|
|
||||||
# osc133 (bool):
|
|
||||||
# true/false to enable/disable OSC 133 support, a set of several escape sequences which
|
|
||||||
# report the (1) starting location of the prompt, (2) ending location of the prompt,
|
|
||||||
# (3) starting location of the command output, and (4) the exit code of the command.
|
|
||||||
|
|
||||||
# originating with Final Term. These sequences report information regarding the prompt
|
|
||||||
# location as well as command status to the terminal. This enables advanced features in
|
|
||||||
# some terminals, including the ability to provide separate background colors for the
|
|
||||||
# command vs. the output, collapsible output, or keybindings to scroll between prompts.
|
|
||||||
$env.config.shell_integration.osc133 = true
|
|
||||||
|
|
||||||
# osc633 (bool):
|
|
||||||
# true/false to enable/disable OSC 633, an extension to OSC 133 for Visual Studio Code
|
|
||||||
$env.config.shell_integration.osc633 = true
|
|
||||||
|
|
||||||
# reset_application_mode (bool):
|
|
||||||
# true/false to enable/disable sending ESC[?1l to the terminal
|
|
||||||
# This sequence is commonly used to keep cursor key modes in sync between the local
|
|
||||||
# terminal and a remote SSH host.
|
|
||||||
$env.config.shell_integration.reset_application_mode = true
|
|
||||||
|
|
||||||
# bracketed_paste (bool):
|
|
||||||
# true/false to enable/disable the bracketed-paste feature, which allows multiple-lines
|
|
||||||
# to be pasted into Nushell at once without immediate execution. When disabled,
|
|
||||||
# each pasted line is executed as it is received.
|
|
||||||
# Note that bracketed paste is not currently supported on the Windows version of
|
|
||||||
# Nushell.
|
|
||||||
$env.config.bracketed_paste = true
|
|
||||||
|
|
||||||
# use_ansi_coloring ("auto" or bool):
|
|
||||||
# The default value `"auto"` dynamically determines if ANSI coloring is used.
|
|
||||||
# It evaluates the following environment variables in decreasingly priority:
|
|
||||||
# `FORCE_COLOR`, `NO_COLOR`, and `CLICOLOR`.
|
|
||||||
# - If `FORCE_COLOR` is set, coloring is always enabled.
|
|
||||||
# - If `NO_COLOR` is set, coloring is disabled.
|
|
||||||
# - If `CLICOLOR` is set, its value (0 or 1) decides whether coloring is used.
|
|
||||||
# If none of these are set, it checks whether the standard output is a terminal
|
|
||||||
# and enables coloring if it is.
|
|
||||||
# A value of `true` or `false` overrides this behavior, explicitly enabling or
|
|
||||||
# disabling ANSI coloring in Nushell's internal commands.
|
|
||||||
# When disabled, built-in commands will only use the default foreground color.
|
|
||||||
# Note: This setting does not affect the `ansi` command.
|
|
||||||
$env.config.use_ansi_coloring = "auto"
|
|
||||||
|
|
||||||
# ----------------------
|
|
||||||
# Error Display Settings
|
|
||||||
# ----------------------
|
|
||||||
|
|
||||||
# error_style (string): One of "fancy" or "plain"
|
|
||||||
# Plain: Display plain-text errors for screen-readers
|
|
||||||
# Fancy: Display errors using line-drawing characters to point to the span in which the
|
|
||||||
# problem occurred.
|
|
||||||
$env.config.error_style = "fancy"
|
|
||||||
|
|
||||||
# display_errors.exit_code (bool):
|
|
||||||
# true: Display a Nushell error when an external command returns a non-zero exit code
|
|
||||||
# false: Display only the error information printed by the external command itself
|
|
||||||
# Note: Core dump errors are always printed; SIGPIPE never triggers an error
|
|
||||||
$env.config.display_errors.exit_code = false
|
|
||||||
|
|
||||||
# display_errors.termination_signal (bool):
|
|
||||||
# true/false to enable/disable displaying a Nushell error when a child process is
|
|
||||||
# terminated via any signal
|
|
||||||
$env.config.display_errors.termination_signal = true
|
|
||||||
|
|
||||||
# -------------
|
|
||||||
# Table Display
|
|
||||||
# -------------
|
|
||||||
# footer_mode (string or int):
|
|
||||||
# Specifies when to display table footers with column names. Allowed values:
|
|
||||||
# "always"
|
|
||||||
# "never"
|
|
||||||
# "auto": When the length of the table would scroll the header past the first line of the terminal
|
|
||||||
# (int): When the number of table rows meets or exceeds this value
|
|
||||||
# Note: Does not take into account rows with multiple lines themselves
|
|
||||||
$env.config.footer_mode = 25
|
|
||||||
|
|
||||||
# table.*
|
|
||||||
# mode (string):
|
|
||||||
# Specifies the visual display style of a table
|
|
||||||
# One of: "default", "basic", "compact", "compact_double", "heavy", "light", "none", "reinforced",
|
|
||||||
# "rounded", "thin", "with_love", "psql", "markdown", "dots", "restructured", "ascii_rounded",
|
|
||||||
# "basic_compact" or "single"
|
|
||||||
# Can be overridden by passing a table to `| table --theme/-t`
|
|
||||||
$env.config.table.mode = "default"
|
|
||||||
|
|
||||||
# index_mode (string) - One of:
|
|
||||||
# "never": never show the index column in a table or list
|
|
||||||
# "always": always show the index column in tables and lists
|
|
||||||
# "auto": show the column only when there is an explicit "index" column in the table
|
|
||||||
# Can be overridden by passing a table to `| table --index/-i`
|
|
||||||
$env.config.table.index_mode = "always"
|
|
||||||
|
|
||||||
# show_empty (bool):
|
|
||||||
# true: show "empty list" or "empty table" when no values exist
|
|
||||||
# false: display no output when no values exist
|
|
||||||
$env.config.table.show_empty = true
|
|
||||||
|
|
||||||
# padding.left/right (int): The number of spaces to pad around values in each column
|
|
||||||
$env.config.table.padding.left = 1
|
|
||||||
$env.config.table.padding.right = 1
|
|
||||||
|
|
||||||
# trim.*: The rules that will be used to display content in a table row when it would cause the
|
|
||||||
# table to exceed the terminal width.
|
|
||||||
# methodology (string): One of "wrapping" or "truncating"
|
|
||||||
# truncating_suffix (string): The text to show at the end of the row to indicate that it has
|
|
||||||
# been truncated. Only valid when `methodology = "truncating"`.
|
|
||||||
# wrapping_try_keep_words (bool): true to keep words together based on whitespace
|
|
||||||
# false to allow wrapping in the middle of a word.
|
|
||||||
# Only valid when `methodology = wrapping`.
|
|
||||||
$env.config.table.trim = {
|
|
||||||
methodology: "wrapping"
|
|
||||||
wrapping_try_keep_words: true
|
|
||||||
}
|
|
||||||
# or
|
|
||||||
$env.config.table.trim = {
|
|
||||||
methodology: "truncating"
|
|
||||||
truncating_suffix: "..."
|
|
||||||
}
|
|
||||||
|
|
||||||
# header_on_separator (bool):
|
|
||||||
# true: Displays the column headers as part of the top (or bottom) border of the table
|
|
||||||
# false: Displays the column header in its own row with a separator below.
|
|
||||||
$env.config.table.header_on_separator = false
|
|
||||||
|
|
||||||
# abbreviated_row_count (int or nothing):
|
|
||||||
# If set to an int, all tables will be abbreviated to only show the first <n> and last <n> rows
|
|
||||||
# If set to `null`, all table rows will be displayed
|
|
||||||
# Can be overridden by passing a table to `| table --abbreviated/-a`
|
|
||||||
$env.config.table.abbreviated_row_count = null
|
|
||||||
|
|
||||||
# footer_inheritance (bool): Footer behavior in nested tables
|
|
||||||
# true: If a nested table is long enough on its own to display a footer (per `footer_mode` above),
|
|
||||||
# then also display the footer for the parent table
|
|
||||||
# false: Always apply `footer_mode` rules to the parent table
|
|
||||||
$env.config.table.footer_inheritance = false
|
|
||||||
|
|
||||||
# missing_value_symbol (string): The symbol shown for missing values
|
|
||||||
$env.config.table.missing_value_symbol = "❎"
|
|
||||||
|
|
||||||
# ----------------
|
|
||||||
# Datetime Display
|
|
||||||
# ----------------
|
|
||||||
# datetime_format.* (string or nothing):
|
|
||||||
# Format strings that will be used for datetime values.
|
|
||||||
# When set to `null`, the default behavior is to "humanize" the value (e.g., "now" or "a day ago")
|
|
||||||
|
|
||||||
# datetime_format.table (string or nothing):
|
|
||||||
# The format string (or `null`) that will be used to display a datetime value when it appears in a
|
|
||||||
# structured value such as a table, list, or record.
|
|
||||||
$env.config.datetime_format.table = null
|
|
||||||
|
|
||||||
# datetime_format.normal (string or nothing):
|
|
||||||
# The format string (or `null`) that will be used to display a datetime value when it appears as
|
|
||||||
# a raw value.
|
|
||||||
$env.config.datetime_format.normal = "%m/%d/%y %I:%M:%S%p"
|
|
||||||
|
|
||||||
# ----------------
|
|
||||||
# Filesize Display
|
|
||||||
# ----------------
|
|
||||||
# filesize.unit (string): One of either:
|
|
||||||
# - A filesize unit: "B", "kB", "KiB", "MB", "MiB", "GB", "GiB", "TB", "TiB", "PB", "PiB", "EB", or "EiB".
|
|
||||||
# - An automatically scaled unit: "metric" or "binary".
|
|
||||||
# "metric" will use units with metric (SI) prefixes like kB, MB, or GB.
|
|
||||||
# "binary" will use units with binary prefixes like KiB, MiB, or GiB.
|
|
||||||
# Otherwise, setting this to one of the filesize units will use that particular unit when displaying all file sizes.
|
|
||||||
$env.config.filesize.unit = 'metric'
|
|
||||||
|
|
||||||
# filesize.show_unit (bool):
|
|
||||||
# Whether to show or hide the file size unit. Useful if `$env.config.filesize.unit` is set to a fixed unit,
|
|
||||||
# and you don't want that same unit repeated over and over again in which case you can set this to `false`.
|
|
||||||
$env.config.filesize.show_unit = true
|
|
||||||
|
|
||||||
# filesize.precision (int or nothing):
|
|
||||||
# The number of digits to display after the decimal point for file sizes.
|
|
||||||
# When set to `null`, all digits after the decimal point, if any, will be displayed.
|
|
||||||
$env.config.filesize.precision = 1
|
|
||||||
|
|
||||||
# ---------------------
|
|
||||||
# Miscellaneous Display
|
|
||||||
# ---------------------
|
|
||||||
|
|
||||||
# render_right_prompt_on_last_line(bool):
|
|
||||||
# true: When using a multi-line left-prompt, the right-prompt will be displayed on the last line
|
|
||||||
# false: The right-prompt is displayed on the first line of the left-prompt
|
|
||||||
$env.config.render_right_prompt_on_last_line = false
|
|
||||||
|
|
||||||
# float_precision (int):
|
|
||||||
# Float values will be rounded to this precision when displaying in structured values such as lists,
|
|
||||||
# tables, or records.
|
|
||||||
$env.config.float_precision = 2
|
|
||||||
|
|
||||||
# ls.use_ls_colors (bool):
|
|
||||||
# true: The `ls` command will apply the $env.LS_COLORS standard to filenames
|
|
||||||
# false: Filenames in the `ls` table will use the color_config for strings
|
|
||||||
$env.config.ls.use_ls_colors = true
|
|
||||||
|
|
||||||
# Hooks
|
|
||||||
# -----
|
|
||||||
# $env.config.hooks is a record containing the five different types of Nushell hooks.
|
|
||||||
# See the Hooks documentation at https://www.nushell.sh/book/hooks for details
|
|
||||||
#
|
|
||||||
# Most hooks can accept a string, a closure, or a list containing strings and/or closures.
|
|
||||||
# The display_output record can only accept a string or a closure, but never a list
|
|
||||||
#
|
|
||||||
# WARNING: A malformed display_output hook can suppress all Nushell output to the terminal.
|
|
||||||
# It can be reset by assigning an empty string as below:
|
|
||||||
|
|
||||||
# Before each prompt is displayed
|
|
||||||
$env.config.hooks.pre_prompt = []
|
|
||||||
# After <enter> is pressed; before the commandline is executed
|
|
||||||
$env.config.hooks.pre_execution = []
|
|
||||||
# When a specified environment variable changes
|
|
||||||
$env.config.hooks.env_change = {
|
|
||||||
# Example: Run if the PWD environment is different since the last REPL input
|
|
||||||
PWD: [{|before, after| null }]
|
|
||||||
}
|
|
||||||
# Before Nushell output is displayed in the terminal
|
|
||||||
$env.config.hooks.display_output = "if (term size).columns >= 100 { table -e } else { table }"
|
|
||||||
# When a command is not found
|
|
||||||
$env.config.hooks.command_not_found = []
|
|
||||||
|
|
||||||
# The env_change hook accepts a record with environment variable names as keys, and a list
|
|
||||||
# of hooks to run when that variable changes
|
|
||||||
$env.config.hooks.env_change = {}
|
|
||||||
|
|
||||||
# -----------
|
|
||||||
# Keybindings
|
|
||||||
# -----------
|
|
||||||
# keybindings (list): A list of user-defined keybindings
|
|
||||||
# Nushell/Reedline keybindings can be added or overridden using this setting.
|
|
||||||
# See https://www.nushell.sh/book/line_editor.html#keybindings for details.
|
|
||||||
#
|
|
||||||
# Example - Add a new Alt+. keybinding to insert the last token used on the previous commandline
|
|
||||||
$env.config.keybindings ++= [
|
|
||||||
{
|
|
||||||
name: insert_last_token
|
|
||||||
modifier: alt
|
|
||||||
keycode: char_.
|
|
||||||
mode: [emacs vi_normal vi_insert]
|
|
||||||
event: [
|
|
||||||
{ edit: InsertString, value: "!$" }
|
|
||||||
{ send: Enter }
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
# Example: Override the F1 keybinding with a user-defined help menu (see "Menus" below):
|
|
||||||
$env.config.keybindings ++= [
|
|
||||||
{
|
|
||||||
name: help_menu
|
|
||||||
modifier: none
|
|
||||||
keycode: f1
|
|
||||||
mode: [emacs, vi_insert, vi_normal]
|
|
||||||
event: { send: menu name: help_menu }
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
# -----
|
|
||||||
# Menus
|
|
||||||
# -----
|
|
||||||
# menus (list):
|
|
||||||
#
|
|
||||||
# Nushell/Reedline menus can be created and modified using this setting.
|
|
||||||
# See https://www.nushell.sh/book/line_editor.html#menus for details.
|
|
||||||
#
|
|
||||||
# Note that menus are usually activated via keybindings, which are defined in
|
|
||||||
# $env.config.keybindings (above).
|
|
||||||
#
|
|
||||||
# Simple example - Add a new Help menu to the list (note that a similar menu is already
|
|
||||||
# defined internally):
|
|
||||||
$env.config.menus ++= [
|
|
||||||
{
|
|
||||||
name: help_menu
|
|
||||||
only_buffer_difference: true
|
|
||||||
marker: "? "
|
|
||||||
type: {
|
|
||||||
layout: description
|
|
||||||
columns: 4
|
|
||||||
# col_width is an optional value. If missing, the entire screen width is used to
|
|
||||||
# calculate the column width
|
|
||||||
col_width: 20
|
|
||||||
col_padding: 2
|
|
||||||
selection_rows: 4
|
|
||||||
description_rows: 10
|
|
||||||
}
|
|
||||||
style: {
|
|
||||||
text: green
|
|
||||||
selected_text: green_reverse
|
|
||||||
description_text: yellow
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
# ---------------
|
|
||||||
# Plugin behavior
|
|
||||||
# ---------------
|
|
||||||
# Per-plugin configuration. See https://www.nushell.sh/contributor-book/plugins.html#plugin-configuration
|
|
||||||
$env.config.plugins = {}
|
|
||||||
|
|
||||||
# Plugin garbage collection configuration
|
|
||||||
# $env.config.plugin_gc.*
|
|
||||||
|
|
||||||
# enabled (bool): true/false to enable/disable stopping inactive plugins
|
|
||||||
$env.config.plugin_gc.default.enabled = true
|
|
||||||
# stop_after (duration): How long to wait after a plugin is inactive before stopping it
|
|
||||||
$env.config.plugin_gc.default.stop_after = 10sec
|
|
||||||
# plugins (record): Alternate garbage collection configuration per-plugin.
|
|
||||||
$env.config.plugin_gc.plugins = {
|
|
||||||
# gstat: {
|
|
||||||
# enabled: false
|
|
||||||
# }
|
|
||||||
}
|
|
||||||
|
|
||||||
# -------------------------------------
|
|
||||||
# Themes/Colors and Syntax Highlighting
|
|
||||||
# -------------------------------------
|
|
||||||
# For more information on defining custom themes, see
|
|
||||||
# https://www.nushell.sh/book/coloring_and_theming.html
|
|
||||||
|
|
||||||
# Use and/or contribute to the theme collection at
|
|
||||||
# https://github.com/nushell/nu_scripts/tree/main/themes
|
|
||||||
|
|
||||||
# Values:
|
|
||||||
|
|
||||||
# highlight_resolved_externals (bool):
|
|
||||||
# true: Applies the `color_config.shape_external_resolved` color (below) to external commands
|
|
||||||
# which are found (resolved) on the path
|
|
||||||
# false: Applies the `color_config.shape_external` color to *all* externals simply based on whether
|
|
||||||
# or not they would be *parsed* as an external command based on their position.
|
|
||||||
# Defaults to false for systems with a slower search path
|
|
||||||
$env.config.highlight_resolved_externals = true
|
|
||||||
|
|
||||||
# color_config (record): A record of shapes, types, UI elements, etc. that can be styled (e.g.,
|
|
||||||
# colorized) in Nushell, either on the commandline itself (shapes) or in output.
|
|
||||||
#
|
|
||||||
# Note that this is usually set through a theme provided by a record in a custom command. For
|
|
||||||
# instance, the standard library contains two "starter" theme commands: "dark-theme" and
|
|
||||||
# "light-theme". For example:
|
|
||||||
use std/config dark-theme
|
|
||||||
$env.config.color_config = (dark-theme)
|
|
||||||
|
|
||||||
# Or, individual color settings can be configured or overridden.
|
|
||||||
#
|
|
||||||
# Values can be one of:
|
|
||||||
# - A color name such as "red" (see `ansi -l` for a list)
|
|
||||||
# - A color RGB value in the form of "#C4C9C6"
|
|
||||||
# - A record including:
|
|
||||||
# * `fg` (color)
|
|
||||||
# * `bg` (color)
|
|
||||||
# * `attr`: a string with one or more of:
|
|
||||||
# - 'n': normal
|
|
||||||
# - 'b': bold
|
|
||||||
# - 'u': underline
|
|
||||||
# - 'r': reverse
|
|
||||||
# - 'i': italics
|
|
||||||
# - 'd': dimmed
|
|
||||||
|
|
||||||
# foreground, background, and cursor colors are not handled by Nushell, but can be used by
|
|
||||||
# custom-commands such as `theme` from the nu_scripts repository. That `theme` command can be
|
|
||||||
# used to set the terminal foreground, background, and cursor colors.
|
|
||||||
$env.config.color_config.foreground
|
|
||||||
$env.config.color_config.background
|
|
||||||
$env.config.color_config.cursor
|
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
# shape_: Applies syntax highlighting based on the "shape" (inferred or declared type) of an
|
|
||||||
# element on the commandline. Nushell's parser can identify shapes based on many criteria, often
|
|
||||||
# as the commandline is being typed.
|
|
||||||
|
|
||||||
# shape_string: Can appear as a single-or-quoted value, a bareword string, the key of a record,
|
|
||||||
# an argument which has been declared as a string, and other parsed strings.
|
|
||||||
$env.config.color_config.shape_string
|
|
||||||
|
|
||||||
# shape_string_interpolation: A single-or-double-quoted string interpolation. This style
|
|
||||||
# applies to the dollar sign and quotes of the string. The elements inside the string are
|
|
||||||
# styled according to their own shape.
|
|
||||||
$env.config.color_config.shape_string_interpolation
|
|
||||||
|
|
||||||
# shape_raw_string: a raw string literal. E.g., r#'This is a raw string'#. This style applies
|
|
||||||
# to the entire raw string.
|
|
||||||
$env.config.color_config.shape_raw_string
|
|
||||||
|
|
||||||
# shape_record: A record-literal. This style applies to the brackets around the record. The keys
|
|
||||||
# and values will be styled according to their individual shapes.
|
|
||||||
$env.config.color_config.shape_record
|
|
||||||
|
|
||||||
# shape_list: A list-literal. This style applies to the brackets and list separator only. The
|
|
||||||
# items in a list are styled according to their individual shapes.
|
|
||||||
$env.config.color_config.shape_list
|
|
||||||
|
|
||||||
# shape_table: A table-literl. Color applies to the brackets, semicolon, and list separators. The
|
|
||||||
# items in the table are style according to their individual shapes.
|
|
||||||
$env.config.color_config.shape_table
|
|
||||||
|
|
||||||
# shape_bool: A boolean-literal `true` or `false` value
|
|
||||||
$env.config.color_config.shape_bool
|
|
||||||
|
|
||||||
# shape_int: Integer literals
|
|
||||||
$env.config.color_config.shape_int
|
|
||||||
|
|
||||||
# shape_float: Float literals. E.g., 5.4
|
|
||||||
# Also integer literals in a float-argument position
|
|
||||||
$env.config.color_config.shape_float
|
|
||||||
|
|
||||||
# shape_range: Range literals
|
|
||||||
$env.config.color_config.shape_range
|
|
||||||
|
|
||||||
# shape_binary: Binary literals
|
|
||||||
$env.config.color_config.shape_binary
|
|
||||||
|
|
||||||
# shape_datetime: Datetime literals
|
|
||||||
$env.config.color_config.shape_datetime
|
|
||||||
|
|
||||||
# shape_custom: A custom value, usually from a plugin
|
|
||||||
$env.config.color_config.shape_custom
|
|
||||||
|
|
||||||
# shape_nothing: A literal `null`
|
|
||||||
$env.config.color_config.shape_nothing
|
|
||||||
|
|
||||||
# shape_literal: Not currently used
|
|
||||||
$env.config.color_config.shape_literal
|
|
||||||
|
|
||||||
# shape_operator: An operator such as +, -, ++, in, not-in, etc.
|
|
||||||
$env.config.color_config.shape_operator
|
|
||||||
|
|
||||||
# shape_filepath: An argument that appears in the position of a `path` shape for a command
|
|
||||||
$env.config.color_config.shape_filepath
|
|
||||||
|
|
||||||
# shape_directory: A more specific 'path' shape that only accepts a directory.
|
|
||||||
$env.config.color_config.shape_directory
|
|
||||||
|
|
||||||
# shape_globpattern: An argument in the position of a glob parameter. E.g., the asterisk (or any other string) in `ls *`.
|
|
||||||
$env.config.color_config.shape_globpattern
|
|
||||||
|
|
||||||
# shape_glob_interpolation: Deprecated
|
|
||||||
$env.config.color_config.shape_glob_interpolation
|
|
||||||
|
|
||||||
# shape_garbage: When an argument is of the wrong type or cannot otherwise be parsed.
|
|
||||||
# E.g., `ls {a: 5}` - A record argument to `ls` is 'garbage'. Also applied in real-time when
|
|
||||||
# an expression is not (yet) properly closed.
|
|
||||||
$env.config.color_config.shape_garbage
|
|
||||||
|
|
||||||
# shape_variable: The *use* of a variable. E.g., `$env` or `$a`.
|
|
||||||
$env.config.color_config.shape_variable
|
|
||||||
|
|
||||||
# shape_vardecl: The *declaration* of a variable. E.g. the "a" in `let a = 5`.
|
|
||||||
$env.config.color_config.shape_vardecl
|
|
||||||
|
|
||||||
# shape_matching_brackets: When the cursor is positioned on an opening or closing bracket (e.g,
|
|
||||||
# braces, curly braces, or parenthesis), and there is a matching opening/closing bracket, both will
|
|
||||||
# temporarily have this style applied.
|
|
||||||
$env.config.color_config.shape_matching_brackets
|
|
||||||
|
|
||||||
# shape_pipe: The pipe `|` when used to separate expressions in a pipeline
|
|
||||||
$env.config.color_config.shape_pipe
|
|
||||||
|
|
||||||
# shape_internalcall: A known Nushell built-in or custom command in the "command position" (usually
|
|
||||||
# the first bare word of an expression).
|
|
||||||
$env.config.color_config.shape_internalcall
|
|
||||||
|
|
||||||
# shape_external: A token in the "command position" (see above) that is not a known Nushell
|
|
||||||
# built-in or custom command. This is assumed to be an external command.
|
|
||||||
$env.config.color_config.shape_external
|
|
||||||
|
|
||||||
# shape_external_resolved: Requires "highlight_resolved_externals" (above) to be enabled.
|
|
||||||
# When a token matches the "external" requirement (above) and is also a *confirmed* external
|
|
||||||
# command, this style will be applied.
|
|
||||||
$env.config.color_config.shape_external_resolved
|
|
||||||
|
|
||||||
# shape_externalarg: Arguments to an external command (whether resolved or not)
|
|
||||||
$env.config.color_config.shape_externalarg
|
|
||||||
|
|
||||||
# shape_match_pattern: The matching pattern for each arm in a match expression. Does not
|
|
||||||
# include the guard expression (if present).
|
|
||||||
$env.config.color_config.shape_match_pattern
|
|
||||||
|
|
||||||
# shape_block: The curly-braces around a block. Expressions within the block will have their
|
|
||||||
# their own shapes' styles applied.
|
|
||||||
$env.config.color_config.shape_block
|
|
||||||
|
|
||||||
# shape_signature: The parameter definitions and input/output types for a command signature.
|
|
||||||
$env.config.color_config.shape_signature
|
|
||||||
|
|
||||||
# shape_keyword: Not current used
|
|
||||||
$env.config.color_config.shape_keyword
|
|
||||||
|
|
||||||
# shape_closure: Styles the brackets and arguments of a closure.
|
|
||||||
$env.config.color_config.shape_closure
|
|
||||||
|
|
||||||
# shape_direction: The redirection symbols such as `o>`, `error>`, `e>|`, etc.
|
|
||||||
$env.config.color_config.shape_redirection
|
|
||||||
|
|
||||||
# shape_flag: Flags and switches to internal and custom-commands. Only the `--flag` (`-f`) portion
|
|
||||||
# is styled. The argument to a flag will be styled using its own shape.
|
|
||||||
$env.config.color_config.shape_flag
|
|
||||||
|
|
||||||
# -------------------------------------------------------------------------------------------------
|
|
||||||
# color.config.<type>
|
|
||||||
# *Values* of a particular *type* can be styled differently than the *shape*.
|
|
||||||
# Note that the style is applied only when this type is displayed in *structured* data (list,
|
|
||||||
# record, or table). It is not currently applied to basic raw values.
|
|
||||||
#
|
|
||||||
# Note that some types are rarely or never seen in a context in which styling would be applied.
|
|
||||||
# For example, a cell-path *value* is unlikely to (but can) appear in a list, record, or table.
|
|
||||||
#
|
|
||||||
# Tip: In addition to the styles above (fg, bg, attr), types typically accept a closure which can
|
|
||||||
# dynamically change the style based on the *value*. For instance, the themes in the nu_scripts
|
|
||||||
# repository will style filesizes difference in an `ls` (or other table) differently depending on
|
|
||||||
# their magnitude.
|
|
||||||
|
|
||||||
# Simple examples:
|
|
||||||
|
|
||||||
# bool: A boolean value
|
|
||||||
$env.config.color_config.bool = {||
|
|
||||||
if $in {
|
|
||||||
{
|
|
||||||
bg: 'light_green'
|
|
||||||
fg: 'white'
|
|
||||||
attr: 'b'
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
{
|
|
||||||
bg: 'yellow'
|
|
||||||
fg: 'black'
|
|
||||||
attr: 'b'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# int: An integer value
|
|
||||||
$env.config.color_config.int = {||
|
|
||||||
if $in == 42 { 'green' } else { 'red' }
|
|
||||||
}
|
|
||||||
|
|
||||||
# Additional type values (without examples):
|
|
||||||
$env.config.color_config.string # String
|
|
||||||
$env.config.color_config.float # Float value
|
|
||||||
$env.config.color_config.glob # Glob value (must be declared)
|
|
||||||
$env.config.color_config.binary # Binary value
|
|
||||||
$env.config.color_config.custom # Custom value (often from a plugin)
|
|
||||||
$env.config.color_config.nothing # Not used, since a null is not displayed
|
|
||||||
$env.config.color_config.date # datetime value
|
|
||||||
$env.config.color_config.filesize # filesize value
|
|
||||||
$env.config.color_config.list # Not currently used. Lists are displayed using their
|
|
||||||
# members' styles
|
|
||||||
$env.config.color_config.record # Not currently used. Records are displayed using their
|
|
||||||
# member's styles
|
|
||||||
$env.config.color_config.duration # Duration type
|
|
||||||
$env.config.color_config.range # Range value
|
|
||||||
$env.config.color_config.cell-path # Cell-path value
|
|
||||||
$env.config.color_config.closure # Not currently used
|
|
||||||
$env.config.color_config.block # Not currently used
|
|
||||||
|
|
||||||
# Additional UI elements
|
|
||||||
# hints: The (usually dimmed) style in which completion hints are displayed
|
|
||||||
$env.config.color_config.hints
|
|
||||||
|
|
||||||
# search_result: The style applied to `find` search results
|
|
||||||
$env.config.color_config.search_result
|
|
||||||
|
|
||||||
# header: The column names in a table header
|
|
||||||
$env.config.color_config.header
|
|
||||||
|
|
||||||
# separator: Used for table/list/record borders
|
|
||||||
$env.config.color_config.separator
|
|
||||||
|
|
||||||
# row_index: The `#` or `index` column of a table or list
|
|
||||||
$env.config.color_config.row_index
|
|
||||||
|
|
||||||
# empty: This style is applied to empty/missing values in a table. However, since the ❎
|
|
||||||
# emoji is used for this purpose, there is limited styling that can be applied.
|
|
||||||
$env.config.color_config.empty
|
|
||||||
|
|
||||||
# leading_trailing_space_bg: When a string value inside structured data has leading or trailing
|
|
||||||
# whitespace, that whitespace will be displayed using this style.
|
|
||||||
# Use { attr: n } to disable.
|
|
||||||
$env.config.color_config.leading_trailing_space_bg = { bg: 'red' }
|
|
||||||
|
|
||||||
# banner_foreground: The default text style for the Welcome Banner displayed at startup
|
|
||||||
$env.config.color_config.banner_foreground = "attr_normal"
|
|
||||||
|
|
||||||
# banner_highlight1 and banner_highlight2: Colors for highlighted text in the Welcome Banner
|
|
||||||
$env.config.color_config.banner_highlight1 = "green"
|
|
||||||
$env.config.color_config.banner_highlight2 = "purple"
|
|
||||||
|
|
||||||
# ------------------------
|
|
||||||
# `explore` command colors
|
|
||||||
# ------------------------
|
|
||||||
# Configure the UI colors of the `explore` command
|
|
||||||
# Allowed values are the same as for the `color_config` options above.
|
|
||||||
# Example:
|
|
||||||
$env.config.explore = {
|
|
||||||
status_bar_background: { fg: "#1D1F21", bg: "#C4C9C6" },
|
|
||||||
command_bar_text: { fg: "#C4C9C6" },
|
|
||||||
highlight: { fg: "black", bg: "yellow" },
|
|
||||||
status: {
|
|
||||||
error: { fg: "white", bg: "red" },
|
|
||||||
warn: {}
|
|
||||||
info: {}
|
|
||||||
},
|
|
||||||
selected_cell: { bg: light_blue },
|
|
||||||
}
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------------------
|
|
||||||
# Environment Variables
|
|
||||||
# ---------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
# In addition to the $env.config record, a number of other environment variables
|
|
||||||
# also affect Nushell's behavior:
|
|
||||||
|
|
||||||
# PROMPT_*
|
|
||||||
# --------
|
|
||||||
# Prompt configuration
|
|
||||||
# PROMPT_ variables accept either a string or a closure that returns a string
|
|
||||||
|
|
||||||
# PROMPT_COMMAND
|
|
||||||
# --------------
|
|
||||||
# Defines the primary prompt. Note that the PROMPT_INDICATOR (below) is appended to this value.
|
|
||||||
# Simple example - Static string:
|
|
||||||
$env.PROMPT_COMMAND = "Nushell"
|
|
||||||
# Simple example - Dynamic closure displaying the path:
|
|
||||||
$env.PROMPT_COMMAND = {|| pwd}
|
|
||||||
|
|
||||||
# PROMPT_COMMAND_RIGHT
|
|
||||||
# --------------------
|
|
||||||
# Defines a prompt which will appear right-aligned in the terminal
|
|
||||||
$env.PROMPT_COMMAND_RIGHT = {|| date now | format date "%d-%a %r" }
|
|
||||||
|
|
||||||
# PROMPT_INDICATOR*
|
|
||||||
# -----------------
|
|
||||||
# The prompt indicators are environmental variables that represent
|
|
||||||
# the state of the prompt. The specified character(s) will appear
|
|
||||||
# immediately following the PROMPT_COMMAND
|
|
||||||
|
|
||||||
# When in Emacs mode (default):
|
|
||||||
$env.PROMPT_INDICATOR = "> "
|
|
||||||
|
|
||||||
# When in normal vi mode:
|
|
||||||
$env.PROMPT_INDICATOR_VI_NORMAL = "> "
|
|
||||||
# When in vi insert-mode:
|
|
||||||
$env.PROMPT_INDICATOR_VI_INSERT = ": "
|
|
||||||
|
|
||||||
# When a commandline extends across multiple lines:
|
|
||||||
$env.PROMPT_MULTILINE_INDICATOR = "::: "
|
|
||||||
|
|
||||||
# TRANSIENT_PROMPT_*
|
|
||||||
# ------------------
|
|
||||||
# Allows a different prompt to be shown after a command has been executed. This
|
|
||||||
# can be useful if you have a 2-line prompt. Instead of each previously-entered
|
|
||||||
# command taking up at least 2 lines, the transient prompt can condense it to a
|
|
||||||
# shorter version. The following example shows a rocket emoji before each
|
|
||||||
# previously-entered command:
|
|
||||||
$env.TRANSIENT_PROMPT_COMMAND = "🚀 "
|
|
||||||
$env.TRANSIENT_PROMPT_INDICATOR = ""
|
|
||||||
$env.TRANSIENT_PROMPT_INDICATOR_VI_INSERT = ""
|
|
||||||
$env.TRANSIENT_PROMPT_INDICATOR_VI_NORMAL = ""
|
|
||||||
# Tip: Removing the transient multiline indicator and right-prompt can simplify
|
|
||||||
# copying from the terminal
|
|
||||||
$env.TRANSIENT_PROMPT_MULTILINE_INDICATOR = ""
|
|
||||||
$env.TRANSIENT_PROMPT_COMMAND_RIGHT = ""
|
|
||||||
|
|
||||||
# ENV_CONVERSIONS
|
|
||||||
# ---------------
|
|
||||||
# Certain variables, such as those containing multiple paths, are often stored as a
|
|
||||||
# colon-separated string in other shells. Nushell can convert these automatically to a
|
|
||||||
# more convenient Nushell list. The ENV_CONVERSIONS variable specifies how environment
|
|
||||||
# variables are:
|
|
||||||
# - converted from a string to a value on Nushell startup (from_string)
|
|
||||||
# - converted from a value back to a string when running external commands (to_string)
|
|
||||||
#
|
|
||||||
# Note: The OS Path variable is automatically converted before env.nu loads, so it can
|
|
||||||
# be treated a list in this file.
|
|
||||||
#
|
|
||||||
# Note: Environment variables are not case-sensitive, so the following will work
|
|
||||||
# for both Windows and Unix-like platforms.
|
|
||||||
#
|
|
||||||
# By default, the internal conversion looks something like the following, so there
|
|
||||||
# is no need to add this in your actual env.nu:
|
|
||||||
$env.ENV_CONVERSIONS = {
|
|
||||||
"Path": {
|
|
||||||
from_string: { |s| $s | split row (char esep) | path expand --no-symlink }
|
|
||||||
to_string: { |v| $v | path expand --no-symlink | str join (char esep) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# Here's an example converts the XDG_DATA_DIRS variable to and from a list:
|
|
||||||
$env.ENV_CONVERSIONS = $env.ENV_CONVERSIONS | merge {
|
|
||||||
"XDG_DATA_DIRS": {
|
|
||||||
from_string: { |s| $s | split row (char esep) | path expand --no-symlink }
|
|
||||||
to_string: { |v| $v | path expand --no-symlink | str join (char esep) }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#
|
|
||||||
# Other common directory-lists for conversion: TERMINFO_DIRS.
|
|
||||||
# Note that other variable conversions take place after `config.nu` is loaded.
|
|
||||||
|
|
||||||
# NU_LIB_DIRS
|
|
||||||
# -----------
|
|
||||||
# Directories in this constant are searched by the
|
|
||||||
# `use` and `source` commands.
|
|
||||||
#
|
|
||||||
# By default, the `scripts` subdirectory of the default configuration
|
|
||||||
# directory is included:
|
|
||||||
const NU_LIB_DIRS = [
|
|
||||||
($nu.default-config-dir | path join 'scripts') # add <nushell-config-dir>/scripts
|
|
||||||
($nu.data-dir | path join 'completions') # default home for nushell completions
|
|
||||||
]
|
|
||||||
# You can replace (override) or append to this list by shadowing the constant
|
|
||||||
const NU_LIB_DIRS = $NU_LIB_DIRS ++ [($nu.default-config-dir | path join 'modules')]
|
|
||||||
|
|
||||||
# An environment variable version of this also exists. It is searched after the constant.
|
|
||||||
$env.NU_LIB_DIRS ++= [ ($nu.data-dir | path join "nu_scripts") ]
|
|
||||||
|
|
||||||
# NU_PLUGIN_DIRS
|
|
||||||
# --------------
|
|
||||||
# Directories to search for plugin binaries when calling add.
|
|
||||||
|
|
||||||
# By default, the `plugins` subdirectory of the default configuration
|
|
||||||
# directory is included:
|
|
||||||
const NU_PLUGIN_DIRS = [
|
|
||||||
($nu.default-config-dir | path join 'plugins') # add <nushell-config-dir>/plugins
|
|
||||||
]
|
|
||||||
# You can replace (override) or append to this list by shadowing the constant
|
|
||||||
const NU_PLUGIN_DIRS = $NU_PLUGIN_DIRS ++ [($nu.default-config-dir | path join 'plugins')]
|
|
||||||
|
|
||||||
# As with NU_LIB_DIRS, an $env.NU_PLUGIN_DIRS is searched after the constant version
|
|
||||||
|
|
||||||
# Appending to the OS path is a common configuration task.
|
|
||||||
# Because of the previous ENV_CONVERSIONS (performed internally
|
|
||||||
# before your config.nu loads), the path variable is a list that can
|
|
||||||
# be appended to using, for example:
|
|
||||||
$env.PATH ++= [ "~/.local/bin" ]
|
|
||||||
|
|
||||||
# Or prepend using
|
|
||||||
$env.PATH = [ "~/.local/bin" ] ++ $env.PATH
|
|
||||||
|
|
||||||
# The `path add` function from the Standard Library also provides
|
|
||||||
# a convenience method for prepending to the path:
|
|
||||||
use std/util "path add"
|
|
||||||
path add "~/.local/bin"
|
|
||||||
path add ($env.CARGO_HOME | path join "bin")
|
|
||||||
|
|
||||||
# You can remove duplicate directories from the path using:
|
|
||||||
$env.PATH = ($env.PATH | uniq)
|
|
||||||
|
|
||||||
|
|||||||
@@ -2,5 +2,6 @@
|
|||||||
programs.nushell = {
|
programs.nushell = {
|
||||||
enable = true;
|
enable = true;
|
||||||
configFile.source = ./config.nu;
|
configFile.source = ./config.nu;
|
||||||
|
envFile.source = ./env.nu;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
# Nushell Environment Config File
|
||||||
|
|
||||||
|
# Specifies how environment variables are:
|
||||||
|
# - converted from a string to a value on Nushell startup (from_string)
|
||||||
|
# - converted from a value back to a string when running external commands (to_string)
|
||||||
|
# Note: The conversions happen *after* config.nu is loaded
|
||||||
|
let-env ENV_CONVERSIONS = {
|
||||||
|
"PATH": {
|
||||||
|
from_string: { |s| $s | split row (char esep) | path expand -n }
|
||||||
|
to_string: { |v| $v | path expand -n | str join (char esep) }
|
||||||
|
}
|
||||||
|
"Path": {
|
||||||
|
from_string: { |s| $s | split row (char esep) | path expand -n }
|
||||||
|
to_string: { |v| $v | path expand -n | str join (char esep) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Directories to search for scripts when calling source or use
|
||||||
|
#
|
||||||
|
# By default, <nushell-config-dir>/scripts is added
|
||||||
|
let-env NU_LIB_DIRS = [
|
||||||
|
($nu.config-path | path dirname | path join 'scripts')
|
||||||
|
]
|
||||||
|
|
||||||
|
# Directories to search for plugin binaries when calling register
|
||||||
|
#
|
||||||
|
# By default, <nushell-config-dir>/plugins is added
|
||||||
|
let-env NU_PLUGIN_DIRS = [
|
||||||
|
($nu.config-path | path dirname | path join 'plugins')
|
||||||
|
]
|
||||||
|
|
||||||
|
# To add entries to PATH (on Windows you might use Path), you can use the following pattern:
|
||||||
|
# let-env PATH = ($env.PATH | split row (char esep) | prepend '/some/path')
|
||||||
|
|
||||||
|
mkdir ~/.cache/starship
|
||||||
|
starship init nu | sed "s/size -c/size/" | save ~/.cache/starship/init.nu
|
||||||
@@ -1,11 +1,6 @@
|
|||||||
{config, ...}: {
|
{config, ...}: {
|
||||||
home.sessionVariables.STARSHIP_CACHE = "${config.xdg.cacheHome}/starship";
|
|
||||||
|
|
||||||
programs.starship = {
|
programs.starship = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableBashIntegration = true;
|
|
||||||
enableZshIntegration = true;
|
|
||||||
enableNushellIntegration = true;
|
|
||||||
settings = {
|
settings = {
|
||||||
character = {
|
character = {
|
||||||
success_symbol = "[›](bold green)";
|
success_symbol = "[›](bold green)";
|
||||||
@@ -13,4 +8,4 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -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"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1,19 +1,32 @@
|
|||||||
# Edit this configuration file to define what should be installed on
|
# Edit this configuration file to define what should be installed on
|
||||||
# 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,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [
|
|
||||||
../../modules/system.nix
|
|
||||||
../../modules/i3.nix
|
|
||||||
|
|
||||||
|
|
||||||
|
{ config, pkgs, home-manager, nur, ... } @ args:
|
||||||
|
|
||||||
|
{
|
||||||
|
imports = [
|
||||||
|
# This adds a nur configuration option.
|
||||||
|
# Use `config.nur.repos.<user>.<package-name>` in NixOS Module for packages from the NUR.
|
||||||
|
nur.nixosModules.nur
|
||||||
|
|
||||||
|
./cifs-mount.nix
|
||||||
# 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 = {
|
efi = {
|
||||||
@@ -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
|
||||||
@@ -48,5 +91,8 @@
|
|||||||
# this value at the release version of the first install of this system.
|
# this value at the release version of the first install of this system.
|
||||||
# Before changing this value read the documentation for this option
|
# Before changing this value read the documentation for this option
|
||||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
system.stateVersion = "25.05"; # Did you read the comment?
|
system.stateVersion = "22.11"; # Did you read the comment?
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -1,44 +1,59 @@
|
|||||||
# Edit this configuration file to define what should be installed on
|
# Edit this configuration file to define what should be installed on
|
||||||
# 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, home-manager, nur, ... } @args:
|
||||||
|
|
||||||
{
|
{
|
||||||
config,
|
|
||||||
pkgs,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
imports = [
|
imports = [
|
||||||
../../modules/system.nix
|
# This adds a nur configuration option.
|
||||||
../../modules/i3.nix
|
# Use `config.nur.repos.<user>.<package-name>` in NixOS Module for packages from the NUR.
|
||||||
|
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"
|
||||||
efiSupport = false;
|
efiSupport = false;
|
||||||
useOSProber = true;
|
useOSProber = true;
|
||||||
#efiInstallAsRemovable = true; # in case canTouchEfiVariables doesn't work for your system
|
#efiInstallAsRemovable = true; # in case canTouchEfiVariables doesn't work for your system
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
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
|
||||||
@@ -46,5 +61,8 @@
|
|||||||
# this value at the release version of the first install of this system.
|
# this value at the release version of the first install of this system.
|
||||||
# Before changing this value read the documentation for this option
|
# Before changing this value read the documentation for this option
|
||||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
system.stateVersion = "25.05"; # Did you read the comment?
|
system.stateVersion = "22.11"; # Did you read the comment?
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,7 +1,10 @@
|
|||||||
{pkgs, ...}: {
|
{pkgs, ...}:
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
|
||||||
# i3 related options
|
# i3 related options
|
||||||
environment.pathsToLink = ["/libexec"]; # links /libexec from derivations to /run/current-system/sw
|
environment.pathsToLink = [ "/libexec" ]; # links /libexec from derivations to /run/current-system/sw
|
||||||
services.displayManager.defaultSession = "none+i3";
|
|
||||||
services.xserver = {
|
services.xserver = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
@@ -10,6 +13,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
displayManager = {
|
displayManager = {
|
||||||
|
defaultSession = "none+i3";
|
||||||
lightdm.enable = false;
|
lightdm.enable = false;
|
||||||
gdm.enable = true;
|
gdm.enable = true;
|
||||||
};
|
};
|
||||||
@@ -17,28 +21,28 @@
|
|||||||
windowManager.i3 = {
|
windowManager.i3 = {
|
||||||
enable = true;
|
enable = true;
|
||||||
extraPackages = with pkgs; [
|
extraPackages = with pkgs; [
|
||||||
rofi # application launcher, the same as dmenu
|
rofi # application launcher, the same as dmenu
|
||||||
dunst # notification daemon
|
dunst # notification daemon
|
||||||
i3blocks # status bar
|
i3blocks # status bar
|
||||||
i3lock # default i3 screen locker
|
i3lock # default i3 screen locker
|
||||||
xautolock # lock screen after some time
|
xautolock # lock screen after some time
|
||||||
i3status # provide information to i3bar
|
i3status # provide information to i3bar
|
||||||
i3-gaps # i3 with gaps
|
i3-gaps # i3 with gaps
|
||||||
picom # transparency and shadows
|
picom # transparency and shadows
|
||||||
feh # set wallpaper
|
feh # set wallpaper
|
||||||
acpi # battery information
|
acpi # battery information
|
||||||
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
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
# Configure keymap in X11
|
# Configure keymap in X11
|
||||||
xkb.layout = "us";
|
layout = "us";
|
||||||
xkb.variant = "";
|
xkbVariant = "";
|
||||||
};
|
};
|
||||||
|
|
||||||
# thunar file manager(part of xfce) related options
|
# thunar file manager(part of xfce) related options
|
||||||
@@ -48,4 +52,4 @@
|
|||||||
];
|
];
|
||||||
services.gvfs.enable = true; # Mount, trash, and other functionalities
|
services.gvfs.enable = true; # Mount, trash, and other functionalities
|
||||||
services.tumbler.enable = true; # Thumbnail support for images
|
services.tumbler.enable = true; # Thumbnail support for images
|
||||||
}
|
}
|
||||||
@@ -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,52 +1,8 @@
|
|||||||
|
{ config, pkgs, devenv, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
pkgs,
|
# enable flakes globally
|
||||||
lib,
|
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
||||||
username,
|
|
||||||
...
|
|
||||||
}: {
|
|
||||||
# ============================= User related =============================
|
|
||||||
|
|
||||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
|
||||||
users.users.${username} = {
|
|
||||||
isNormalUser = true;
|
|
||||||
description = username;
|
|
||||||
extraGroups = ["networkmanager" "wheel"];
|
|
||||||
};
|
|
||||||
# given the users in this list the right to specify additional substituters via:
|
|
||||||
# 1. `nixConfig.substituers` in `flake.nix`
|
|
||||||
# 2. command line args `--options substituers http://xxx`
|
|
||||||
nix.settings.trusted-users = [username];
|
|
||||||
|
|
||||||
# customise /etc/nix/nix.conf declaratively via `nix.settings`
|
|
||||||
nix.settings = {
|
|
||||||
# enable flakes globally
|
|
||||||
experimental-features = ["nix-command" "flakes"];
|
|
||||||
|
|
||||||
substituters = [
|
|
||||||
# cache mirror located in China
|
|
||||||
# status: https://mirror.sjtu.edu.cn/
|
|
||||||
"https://mirror.sjtu.edu.cn/nix-channels/store"
|
|
||||||
# status: https://mirrors.ustc.edu.cn/status/
|
|
||||||
# "https://mirrors.ustc.edu.cn/nix-channels/store"
|
|
||||||
|
|
||||||
"https://cache.nixos.org"
|
|
||||||
];
|
|
||||||
|
|
||||||
trusted-public-keys = [
|
|
||||||
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
|
|
||||||
];
|
|
||||||
builders-use-substitutes = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# do garbage collection weekly to keep disk usage low
|
|
||||||
nix.gc = {
|
|
||||||
automatic = lib.mkDefault true;
|
|
||||||
dates = lib.mkDefault "weekly";
|
|
||||||
options = lib.mkDefault "--delete-older-than 7d";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Allow unfree packages
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
|
||||||
|
|
||||||
# Set your time zone.
|
# Set your time zone.
|
||||||
time.timeZone = "Asia/Shanghai";
|
time.timeZone = "Asia/Shanghai";
|
||||||
@@ -69,35 +25,54 @@
|
|||||||
# 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 = {
|
||||||
packages = with pkgs; [
|
# use fonts specified by user rather than default ones
|
||||||
|
enableDefaultFonts = false;
|
||||||
|
fontDir.enable = true;
|
||||||
|
|
||||||
|
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-sans
|
# 其中汉字部分叫 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
|
||||||
# https://github.com/NixOS/nixpkgs/blob/nixos-unstable-small/pkgs/data/fonts/nerd-fonts/manifests/fonts.json
|
(nerdfonts.override { fonts = [
|
||||||
nerd-fonts.symbols-only # symbols icon only
|
"FiraCode"
|
||||||
nerd-fonts.fira-code
|
"JetBrainsMono"
|
||||||
nerd-fonts.jetbrains-mono
|
"Iosevka"
|
||||||
nerd-fonts.iosevka
|
];})
|
||||||
];
|
|
||||||
|
|
||||||
# use fonts specified by user rather than default ones
|
(pkgs.callPackage ../fonts/icomoon-feather-icon-font.nix { })
|
||||||
enableDefaultPackages = 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
|
||||||
# B&W emojis that would sometimes show instead of some Color emojis
|
# B&W emojis that would sometimes show instead of some Color emojis
|
||||||
fontconfig.defaultFonts = {
|
fontconfig.defaultFonts = {
|
||||||
serif = ["Noto Serif" "Noto Color Emoji"];
|
serif = [ "Noto Serif" "Noto Color Emoji" ];
|
||||||
sansSerif = ["Noto Sans" "Noto Color Emoji"];
|
sansSerif = [ "Noto Sans" "Noto Color Emoji" ];
|
||||||
monospace = ["JetBrainsMono Nerd Font" "Noto Color Emoji"];
|
monospace = [ "JetBrainsMono Nerd Font" "Noto Color Emoji" ];
|
||||||
emoji = ["Noto Color Emoji"];
|
emoji = [ "Noto Color Emoji" ];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -113,38 +88,106 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
X11Forwarding = true;
|
X11Forwarding = true;
|
||||||
PermitRootLogin = "no"; # disable root login
|
PermitRootLogin = "no"; # disable root login
|
||||||
PasswordAuthentication = false; # disable password login
|
PasswordAuthentication = false; # disable password login
|
||||||
};
|
};
|
||||||
openFirewall = true;
|
openFirewall = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# Allow unfree packages
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
# List packages installed in system profile. To search, run:
|
# List packages installed in system profile. To search, run:
|
||||||
# $ nix search wget
|
# $ nix search wget
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
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.
|
||||||
services.pulseaudio.enable = false;
|
sound.enable = true;
|
||||||
|
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 ];
|
||||||
|
|
||||||
geoclue2.enable = true;
|
geoclue2.enable = true;
|
||||||
|
|
||||||
@@ -161,6 +204,14 @@
|
|||||||
#media-session.enable = true;
|
#media-session.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
udev.packages = with pkgs; [gnome-settings-daemon];
|
udev.packages = with pkgs; [
|
||||||
|
gnome.gnome-settings-daemon
|
||||||
|
platformio # udev rules for platformio
|
||||||
|
android-udev-rules
|
||||||
|
];
|
||||||
};
|
};
|
||||||
}
|
|
||||||
|
# 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 ]; };
|
||||||
|
})
|
||||||