mirror of
https://github.com/ryan4yin/nix-config.git
synced 2026-05-28 18:39:31 +02:00
Compare commits
146 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7b5b23ce29 | |||
| fa2e7ae0a4 | |||
| 34297e2cd6 | |||
| db711d5ff8 | |||
| 756ccca234 | |||
| ca627a1b28 | |||
| bc36220606 | |||
| c6113d6f28 | |||
| d8ba9671fc | |||
| b065d3381f | |||
| 3818f9dabf | |||
| a97baf175c | |||
| 49796cdc50 | |||
| fa9aaa6d27 | |||
| 41be352b2c | |||
| 4c38a38848 | |||
| 127a4362b5 | |||
| fcb1f200ed | |||
| a17afea08c | |||
| 4080bad9df | |||
| 0342d55c4f | |||
| b612932b17 | |||
| e53e7d80e4 | |||
| 8b2842026a | |||
| b1eede94f6 | |||
| cc1004bf29 | |||
| fa21a9b7ec | |||
| 927d97deed | |||
| c88a7a6723 | |||
| 149f06c645 | |||
| fff0dc22c2 | |||
| a250432a59 | |||
| 3a41b2b2cf | |||
| 2645d9e279 | |||
| c539962c96 | |||
| 4a4427cf2d | |||
| 6090b28a98 | |||
| 8dee9864fc | |||
| 413cc67a4a | |||
| f5f8b1ecc3 | |||
| e370856b94 | |||
| 60f57b6ea2 | |||
| e95476d7b4 | |||
| 50c911ea2d | |||
| 978ebab16f | |||
| e4d2eb35dc | |||
| dc4a7d8827 | |||
| c99e1378c5 | |||
| 19faab32f7 | |||
| 69e0572df1 | |||
| a2007fd88c | |||
| d66ca3680c | |||
| 4c474f399c | |||
| bee1ef06a4 | |||
| 9649a79e75 | |||
| e2a0d429de | |||
| 822a17861a | |||
| 9919ac8811 | |||
| 26384a73ed | |||
| b44d277072 | |||
| 43721fba8a | |||
| 9a2883f5de | |||
| 377b37ef0f | |||
| 0fe00c237b | |||
| 277ef1d04b | |||
| b0e3794734 | |||
| e151d3b488 | |||
| 2ba35fd07f | |||
| 7e5e1a99df | |||
| db4811ed88 | |||
| 92a6a7ebc8 | |||
| e13079f7a8 | |||
| 65e1ea4fc5 | |||
| 8c40436e41 | |||
| 25e1604cda | |||
| cbc5b55ec2 | |||
| eeba466cda | |||
| 15ec912368 | |||
| 1c02730d1d | |||
| dc7bac0025 | |||
| 8fff2bd556 | |||
| 5dc287dde7 | |||
| a60671a983 | |||
| 75081d1d5a | |||
| 15628b667a | |||
| 4465b0388e | |||
| c872728eea | |||
| f1a3aa0e9c | |||
| 49ed072d25 | |||
| aaf499a52c | |||
| 9ade06b235 | |||
| dfb26c3b59 | |||
| 28b642bff1 | |||
| 49de321e32 | |||
| 2315c7c1df | |||
| f585ba721a | |||
| 47179e46ba | |||
| 6b2f5542da | |||
| 17184d7835 | |||
| 6e2b2e8dbb | |||
| dc24978eaf | |||
| 908656e5d4 | |||
| a69b60bf6e | |||
| 9d26022139 | |||
| cfdf12b356 | |||
| 417d7ad2d7 | |||
| 891c70e045 | |||
| 18485a5530 | |||
| 8ff415a55f | |||
| 7e4c6de8cc | |||
| 0cac8e1763 | |||
| ec2d41742c | |||
| b30199c437 | |||
| a3aa2db0f1 | |||
| 3ad2a334c9 | |||
| 935c80ef5a | |||
| 7c493445a2 | |||
| 922a59a68b | |||
| 7deed26cc5 | |||
| 2a21d77f33 | |||
| 113b764052 | |||
| df13f1b0c3 | |||
| 0a9697352b | |||
| 6fc0c5bcc2 | |||
| f0576ecc88 | |||
| d5e6432efa | |||
| 921df30ef0 | |||
| ab5a154de8 | |||
| 28b20d279e | |||
| 071b91758e | |||
| 870ca80869 | |||
| 366aef4d2c | |||
| 1955875498 | |||
| 102ec54f82 | |||
| cc44f41584 | |||
| d82119183c | |||
| 1cd6c0b124 | |||
| 595f76e120 | |||
| 961d24c80a | |||
| 4ed9432280 | |||
| 3daf799be2 | |||
| 0683ef0a13 | |||
| 97f1a6a950 | |||
| 4503964146 | |||
| 2eb37b34ea | |||
| c768073783 |
@@ -1,7 +1,7 @@
|
|||||||
# just is a command runner, Justfile is very similar to Makefile, but simpler.
|
# just is a command runner, Justfile is very similar to Makefile, but simpler.
|
||||||
|
|
||||||
# Use nushell for shell commands
|
# Use nushell for shell commands
|
||||||
# To usage this justfile, you need to enter a shell with just & nushell installed:
|
# To use this justfile, you need to enter a shell with just & nushell installed:
|
||||||
#
|
#
|
||||||
# nix shell nixpkgs#just nixpkgs#nushell
|
# nix shell nixpkgs#just nixpkgs#nushell
|
||||||
set shell := ["nu", "-c"]
|
set shell := ["nu", "-c"]
|
||||||
@@ -145,12 +145,21 @@ ha mode="default":
|
|||||||
# Depoly to fern(macOS host)
|
# Depoly to fern(macOS host)
|
||||||
[macos]
|
[macos]
|
||||||
[group('desktop')]
|
[group('desktop')]
|
||||||
fe mode="default": darwin-set-proxy
|
fe mode="default":
|
||||||
#!/usr/bin/env nu
|
#!/usr/bin/env nu
|
||||||
use {{utils_nu}} *;
|
use {{utils_nu}} *;
|
||||||
darwin-build "fern" {{mode}};
|
darwin-build "fern" {{mode}};
|
||||||
darwin-switch "fern" {{mode}}
|
darwin-switch "fern" {{mode}}
|
||||||
|
|
||||||
|
# Depoly to frieren(macOS host)
|
||||||
|
[macos]
|
||||||
|
[group('desktop')]
|
||||||
|
fr mode="default":
|
||||||
|
#!/usr/bin/env nu
|
||||||
|
use {{utils_nu}} *;
|
||||||
|
darwin-build "frieren" {{mode}};
|
||||||
|
darwin-switch "frieren" {{mode}}
|
||||||
|
|
||||||
# Reset launchpad to force it to reindex Applications
|
# Reset launchpad to force it to reindex Applications
|
||||||
[macos]
|
[macos]
|
||||||
[group('desktop')]
|
[group('desktop')]
|
||||||
@@ -317,60 +326,6 @@ k3s-prod:
|
|||||||
k3s-test:
|
k3s-test:
|
||||||
colmena apply --on '@k3s-test-*' --verbose --show-trace
|
colmena apply --on '@k3s-test-*' --verbose --show-trace
|
||||||
|
|
||||||
############################################################################
|
|
||||||
#
|
|
||||||
# Neovim related commands
|
|
||||||
#
|
|
||||||
############################################################################
|
|
||||||
|
|
||||||
[group('neovim')]
|
|
||||||
nvim-test:
|
|
||||||
rm -rf $"($env.HOME)/.config/nvim"
|
|
||||||
rsync -avz --copy-links --chmod=D2755,F744 home/base/tui/editors/neovim/nvim/ $"($env.HOME)/.config/nvim/"
|
|
||||||
|
|
||||||
[group('neovim')]
|
|
||||||
nvim-clean:
|
|
||||||
rm -rf $"($env.HOME)/.config/nvim"
|
|
||||||
|
|
||||||
# =================================================
|
|
||||||
# Emacs related commands
|
|
||||||
# =================================================
|
|
||||||
|
|
||||||
[group('emacs')]
|
|
||||||
emacs-test:
|
|
||||||
rm -rf $"($env.HOME)/.config/doom"
|
|
||||||
rsync -avz --copy-links --chmod=D2755,F744 home/base/tui/editors/emacs/doom/ $"($env.HOME)/.config/doom/"
|
|
||||||
doom clean
|
|
||||||
doom sync
|
|
||||||
|
|
||||||
[group('emacs')]
|
|
||||||
emacs-clean:
|
|
||||||
rm -rf $"($env.HOME)/.config/doom/"
|
|
||||||
|
|
||||||
[group('emacs')]
|
|
||||||
emacs-purge:
|
|
||||||
doom purge
|
|
||||||
doom clean
|
|
||||||
doom sync
|
|
||||||
|
|
||||||
[linux]
|
|
||||||
[group('emacs')]
|
|
||||||
emacs-reload:
|
|
||||||
doom sync
|
|
||||||
systemctl --user restart emacs.service
|
|
||||||
systemctl --user status emacs.service
|
|
||||||
|
|
||||||
|
|
||||||
emacs-plist-path := "~/Library/LaunchAgents/org.nix-community.home.emacs.plist"
|
|
||||||
|
|
||||||
[macos]
|
|
||||||
[group('emacs')]
|
|
||||||
emacs-reload:
|
|
||||||
doom sync
|
|
||||||
launchctl unload {{emacs-plist-path}}
|
|
||||||
launchctl load {{emacs-plist-path}}
|
|
||||||
tail -f ~/Library/Logs/emacs-daemon.stderr.log
|
|
||||||
|
|
||||||
# =================================================
|
# =================================================
|
||||||
#
|
#
|
||||||
# Other useful commands
|
# Other useful commands
|
||||||
@@ -415,3 +370,8 @@ list-inactive:
|
|||||||
[group('services')]
|
[group('services')]
|
||||||
list-failed:
|
list-failed:
|
||||||
systemctl list-units -all --state=failed
|
systemctl list-units -all --state=failed
|
||||||
|
|
||||||
|
[linux]
|
||||||
|
[group('services')]
|
||||||
|
list-systemd:
|
||||||
|
systemctl list-units systemd-*
|
||||||
|
|||||||
@@ -8,7 +8,7 @@
|
|||||||
<a href="https://github.com/ryan4yin/nix-config/stargazers">
|
<a href="https://github.com/ryan4yin/nix-config/stargazers">
|
||||||
<img alt="Stargazers" src="https://img.shields.io/github/stars/ryan4yin/nix-config?style=for-the-badge&logo=starship&color=C9CBFF&logoColor=D9E0EE&labelColor=302D41"></a>
|
<img alt="Stargazers" src="https://img.shields.io/github/stars/ryan4yin/nix-config?style=for-the-badge&logo=starship&color=C9CBFF&logoColor=D9E0EE&labelColor=302D41"></a>
|
||||||
<a href="https://nixos.org/">
|
<a href="https://nixos.org/">
|
||||||
<img src="https://img.shields.io/badge/NixOS-24.05-informational.svg?style=for-the-badge&logo=nixos&color=F2CDCD&logoColor=D9E0EE&labelColor=302D41"></a>
|
<img src="https://img.shields.io/badge/NixOS-25.05-informational.svg?style=for-the-badge&logo=nixos&color=F2CDCD&logoColor=D9E0EE&labelColor=302D41"></a>
|
||||||
<a href="https://github.com/ryan4yin/nixos-and-flakes-book">
|
<a href="https://github.com/ryan4yin/nixos-and-flakes-book">
|
||||||
<img src="https://img.shields.io/static/v1?label=Nix Flakes&message=learning&style=for-the-badge&logo=nixos&color=DDB6F2&logoColor=D9E0EE&labelColor=302D41"></a>
|
<img src="https://img.shields.io/static/v1?label=Nix Flakes&message=learning&style=for-the-badge&logo=nixos&color=DDB6F2&logoColor=D9E0EE&labelColor=302D41"></a>
|
||||||
</a>
|
</a>
|
||||||
@@ -17,7 +17,7 @@
|
|||||||
> My configuration is becoming more and more complex, and **it will be difficult for beginners to
|
> My configuration is becoming more and more complex, and **it will be difficult for beginners to
|
||||||
> read**. If you are new to NixOS and want to know how I use NixOS, I would recommend you to take a
|
> read**. If you are new to NixOS and want to know how I use NixOS, I would recommend you to take a
|
||||||
> look at the [ryan4yin/nix-config/releases](https://github.com/ryan4yin/nix-config/releases) first,
|
> look at the [ryan4yin/nix-config/releases](https://github.com/ryan4yin/nix-config/releases) first,
|
||||||
> **checkout to some simpler older versions, such as
|
> **check out to some simpler older versions, such as
|
||||||
> [i3-kickstarter](https://github.com/ryan4yin/nix-config/tree/i3-kickstarter), which will be much
|
> [i3-kickstarter](https://github.com/ryan4yin/nix-config/tree/i3-kickstarter), which will be much
|
||||||
> easier to understand**.
|
> easier to understand**.
|
||||||
|
|
||||||
@@ -38,13 +38,13 @@ Virtual Machine from this flake.
|
|||||||
|
|
||||||
Nix allows for easy-to-manage, collaborative, reproducible deployments. This means that once
|
Nix allows for easy-to-manage, collaborative, reproducible deployments. This means that once
|
||||||
something is setup and configured once, it works (almost) forever. If someone else shares their
|
something is setup and configured once, it works (almost) forever. If someone else shares their
|
||||||
configuration, anyone else can just use it (if you really understand what you're copying/refering
|
configuration, anyone else can just use it (if you really understand what you're copying/referring
|
||||||
now).
|
now).
|
||||||
|
|
||||||
As for Flakes, refer to
|
As for Flakes, refer to
|
||||||
[Introduction to Flakes - NixOS & Nix Flakes Book](https://nixos-and-flakes.thiscute.world/nixos-with-flakes/introduction-to-flakes)
|
[Introduction to Flakes - NixOS & Nix Flakes Book](https://nixos-and-flakes.thiscute.world/nixos-with-flakes/introduction-to-flakes)
|
||||||
|
|
||||||
**Want to know NixOS & Flaks in detail? Looking for a beginner-friendly tutorial or best practices?
|
**Want to know NixOS & Flakes in detail? Looking for a beginner-friendly tutorial or best practices?
|
||||||
You don't have to go through the pain I've experienced again! Check out my
|
You don't have to go through the pain I've experienced again! Check out my
|
||||||
[NixOS & Nix Flakes Book - 🛠️ ❤️ An unofficial & opinionated :book: for beginners](https://github.com/ryan4yin/nixos-and-flakes-book)!**
|
[NixOS & Nix Flakes Book - 🛠️ ❤️ An unofficial & opinionated :book: for beginners](https://github.com/ryan4yin/nixos-and-flakes-book)!**
|
||||||
|
|
||||||
@@ -68,34 +68,27 @@ You don't have to go through the pain I've experienced again! Check out my
|
|||||||
| **System resource monitor** | [Btop][Btop] |
|
| **System resource monitor** | [Btop][Btop] |
|
||||||
| **File Manager** | [Yazi][Yazi] + [thunar][thunar] |
|
| **File Manager** | [Yazi][Yazi] + [thunar][thunar] |
|
||||||
| **Shell** | [Nushell][Nushell] + [Starship][Starship] |
|
| **Shell** | [Nushell][Nushell] + [Starship][Starship] |
|
||||||
| **Music Player** | [mpd][mpd], [ncmpcpp][ncmpcpp], [mpc][mpc] |
|
|
||||||
| **Media Player** | [mpv][mpv] |
|
| **Media Player** | [mpv][mpv] |
|
||||||
| **Text Editor** | [Neovim][Neovim] + [DoomEmacs][DoomEmacs] |
|
| **Text Editor** | [Neovim][Neovim] |
|
||||||
| **Fonts** | [Nerd fonts][Nerd fonts] |
|
| **Fonts** | [Nerd fonts][Nerd fonts] |
|
||||||
| **Image Viewer** | [imv][imv] |
|
| **Image Viewer** | [imv][imv] |
|
||||||
| **Screenshot Software** | [flameshot][flameshot] + [grim][grim] |
|
| **Screenshot Software** | [hyprshot][hyprshot] |
|
||||||
| **Screen Recording** | [OBS][OBS] |
|
| **Screen Recording** | [OBS][OBS] |
|
||||||
| **Filesystem & Encryption** | tmpfs on `/`, [Btrfs][Btrfs] subvolumes on a [LUKS][LUKS] encrypted partition for persistent, unlock via passphrase |
|
| **Filesystem & Encryption** | tmpfs on `/`, [Btrfs][Btrfs] subvolumes on a [LUKS][LUKS] encrypted partition for persistent, unlock via passphrase |
|
||||||
| **Secure Boot** | [lanzaboote][lanzaboote] |
|
| **Secure Boot** | [lanzaboote][lanzaboote] |
|
||||||
|
|
||||||
Wallpapers: https://github.com/ryan4yin/wallpapers
|
Wallpapers: https://github.com/ryan4yin/wallpapers
|
||||||
|
|
||||||
## Hyprland + AstroNvim + DoomEmacs
|
## Hyprland + AstroNvim
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Neovim
|
## Neovim
|
||||||
|
|
||||||
See [./home/base/tui/editors/neovim/](./home/base/tui/editors/neovim/) for details.
|
See [./home/base/tui/editors/neovim/](./home/base/tui/editors/neovim/) for details.
|
||||||
|
|
||||||
## Emacs
|
|
||||||
|
|
||||||
See [./home/base/tui/editors/emacs/](./home/base/tui/editors/emacs/) for details.
|
|
||||||
|
|
||||||
## Secrets Management
|
## Secrets Management
|
||||||
|
|
||||||
See [./secrets](./secrets) for details.
|
See [./secrets](./secrets) for details.
|
||||||
@@ -107,13 +100,13 @@ See [./secrets](./secrets) for details.
|
|||||||
> It will not succeed.** This flake contains my hardware configuration(such as
|
> It will not succeed.** This flake contains my hardware configuration(such as
|
||||||
> [hardware-configuration.nix](hosts/idols-ai/hardware-configuration.nix),
|
> [hardware-configuration.nix](hosts/idols-ai/hardware-configuration.nix),
|
||||||
> [Nvidia Support](https://github.com/ryan4yin/nix-config/blob/v0.1.1/hosts/idols-ai/default.nix#L77-L91),
|
> [Nvidia Support](https://github.com/ryan4yin/nix-config/blob/v0.1.1/hosts/idols-ai/default.nix#L77-L91),
|
||||||
> etc.) which is not suitable for your hardwares, and requires my private secrets repository
|
> etc.) which is not suitable for your hardware, and requires my private secrets repository
|
||||||
> [ryan4yin/nix-secrets](https://github.com/ryan4yin/nix-config/tree/main/secrets) to deploy. You
|
> [ryan4yin/nix-secrets](https://github.com/ryan4yin/nix-config/tree/main/secrets) to deploy. You
|
||||||
> may use this repo as a reference to build your own configuration.
|
> may use this repo as a reference to build your own configuration.
|
||||||
|
|
||||||
For NixOS:
|
For NixOS:
|
||||||
|
|
||||||
> To deploy this flake from NixOS's official ISO image(purest installation method), please refer to
|
> To deploy this flake from NixOS's official ISO image (purest installation method), please refer to
|
||||||
> [./nixos-installer/](./nixos-installer/)
|
> [./nixos-installer/](./nixos-installer/)
|
||||||
|
|
||||||
> Need to restart the machine when switching between `wayland` and `xorg`.
|
> Need to restart the machine when switching between `wayland` and `xorg`.
|
||||||
@@ -136,7 +129,7 @@ For macOS:
|
|||||||
# 1. install nix & homebrew manually.
|
# 1. install nix & homebrew manually.
|
||||||
# 2. prepare the deployment environment with essential packages available
|
# 2. prepare the deployment environment with essential packages available
|
||||||
nix-shell -p just nushell
|
nix-shell -p just nushell
|
||||||
# 3. comment home-manager's code in lib/macosSystem.nix to speed up the first deplyment.
|
# 3. comment home-manager's code in lib/macosSystem.nix to speed up the first deployment.
|
||||||
# 4. comment out the proxy settings in scripts/darwin_set_proxy.py if the proxy is not ready yet.
|
# 4. comment out the proxy settings in scripts/darwin_set_proxy.py if the proxy is not ready yet.
|
||||||
|
|
||||||
# 4. deploy harmonica's configuration(macOS Intel)
|
# 4. deploy harmonica's configuration(macOS Intel)
|
||||||
@@ -178,6 +171,7 @@ Other dotfiles that inspired me:
|
|||||||
journey.
|
journey.
|
||||||
- [HeinzDev/Hyprland-dotfiles](https://github.com/HeinzDev/Hyprland-dotfiles): Refer to the waybar
|
- [HeinzDev/Hyprland-dotfiles](https://github.com/HeinzDev/Hyprland-dotfiles): Refer to the waybar
|
||||||
configuration here.
|
configuration here.
|
||||||
|
- [Zeioth/zeioth-hyprland-config](https://github.com/Zeioth/zeioth-hyprland-config)
|
||||||
- [linuxmobile/kaku](https://github.com/linuxmobile/kaku)
|
- [linuxmobile/kaku](https://github.com/linuxmobile/kaku)
|
||||||
- Neovim/AstroNvim
|
- Neovim/AstroNvim
|
||||||
- [maxbrunet/dotfiles](https://github.com/maxbrunet/dotfiles): astronvim with nix flakes.
|
- [maxbrunet/dotfiles](https://github.com/maxbrunet/dotfiles): astronvim with nix flakes.
|
||||||
@@ -199,19 +193,12 @@ Other dotfiles that inspired me:
|
|||||||
[Zellij]: https://github.com/zellij-org/zellij
|
[Zellij]: https://github.com/zellij-org/zellij
|
||||||
[Neovim]: https://github.com/neovim/neovim
|
[Neovim]: https://github.com/neovim/neovim
|
||||||
[AstroNvim]: https://github.com/AstroNvim/AstroNvim
|
[AstroNvim]: https://github.com/AstroNvim/AstroNvim
|
||||||
[DoomEmacs]: https://github.com/doomemacs/doomemacs
|
[Hyprshot]: https://github.com/Gustash/Hyprshot
|
||||||
[flameshot]: https://github.com/flameshot-org/flameshot
|
|
||||||
[grim]: https://github.com/emersion/grim
|
|
||||||
[flameshot]: https://github.com/flameshot-org/flameshot
|
|
||||||
[imv]: https://sr.ht/~exec64/imv/
|
[imv]: https://sr.ht/~exec64/imv/
|
||||||
[OBS]: https://obsproject.com
|
[OBS]: https://obsproject.com
|
||||||
[Mako]: https://github.com/emersion/mako
|
[Mako]: https://github.com/emersion/mako
|
||||||
[Nerd fonts]: https://github.com/ryanoasis/nerd-fonts
|
[Nerd fonts]: https://github.com/ryanoasis/nerd-fonts
|
||||||
[catppuccin]: https://github.com/catppuccin/catppuccin
|
[catppuccin]: https://github.com/catppuccin/catppuccin
|
||||||
[mpd]: https://github.com/MusicPlayerDaemon/MPD
|
|
||||||
[ncmpcpp]: https://github.com/ncmpcpp/ncmpcpp
|
|
||||||
[mpc]: https://github.com/MusicPlayerDaemon/mpc
|
|
||||||
[Netease-cloud-music-gtk]: https://github.com/gmg137/netease-cloud-music-gtk
|
|
||||||
[NetworkManager]: https://wiki.gnome.org/Projects/NetworkManager
|
[NetworkManager]: https://wiki.gnome.org/Projects/NetworkManager
|
||||||
[wl-clipboard]: https://github.com/bugaevc/wl-clipboard
|
[wl-clipboard]: https://github.com/bugaevc/wl-clipboard
|
||||||
[GDM]: https://wiki.archlinux.org/title/GDM
|
[GDM]: https://wiki.archlinux.org/title/GDM
|
||||||
|
|||||||
Generated
+283
-1017
File diff suppressed because it is too large
Load Diff
@@ -35,11 +35,15 @@
|
|||||||
|
|
||||||
# Official NixOS package source, using nixos's unstable branch by default
|
# Official NixOS package source, using nixos's unstable branch by default
|
||||||
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable-small";
|
# nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable-small";
|
||||||
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.05";
|
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
|
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.05";
|
||||||
|
|
||||||
|
nixpkgs-ollama.url = "github:nixos/nixpkgs/nixos-unstable";
|
||||||
|
|
||||||
# for macos
|
# for macos
|
||||||
nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-24.05-darwin";
|
# nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-25.05-darwin";
|
||||||
|
nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-unstable";
|
||||||
nix-darwin = {
|
nix-darwin = {
|
||||||
url = "github:lnl7/nix-darwin";
|
url = "github:lnl7/nix-darwin";
|
||||||
inputs.nixpkgs.follows = "nixpkgs-darwin";
|
inputs.nixpkgs.follows = "nixpkgs-darwin";
|
||||||
@@ -49,7 +53,7 @@
|
|||||||
# home-manager, used for managing user configuration
|
# home-manager, used for managing user configuration
|
||||||
home-manager = {
|
home-manager = {
|
||||||
url = "github:nix-community/home-manager/master";
|
url = "github:nix-community/home-manager/master";
|
||||||
# url = "github:nix-community/home-manager/release-24.05";
|
# url = "github:nix-community/home-manager/release-25.05";
|
||||||
|
|
||||||
# The `follows` keyword in inputs is used for inheritance.
|
# The `follows` keyword in inputs is used for inheritance.
|
||||||
# Here, `inputs.nixpkgs` of home-manager is kept consistent with the `inputs.nixpkgs` of the current flake,
|
# Here, `inputs.nixpkgs` of home-manager is kept consistent with the `inputs.nixpkgs` of the current flake,
|
||||||
@@ -58,7 +62,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
lanzaboote = {
|
lanzaboote = {
|
||||||
url = "github:nix-community/lanzaboote/v0.4.1";
|
url = "github:nix-community/lanzaboote/v0.4.2";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -79,17 +83,17 @@
|
|||||||
};
|
};
|
||||||
# secrets management
|
# secrets management
|
||||||
agenix = {
|
agenix = {
|
||||||
# lock with git commit at 0.15.0
|
# lock with git commit at May 18, 2025
|
||||||
# url = "github:ryantm/agenix/564595d0ad4be7277e07fa63b5a991b3c645655d";
|
url = "github:ryantm/agenix/4835b1dc898959d8547a871ef484930675cb47f1";
|
||||||
# replaced with a type-safe reimplementation to get a better error message and less bugs.
|
# replaced with a type-safe reimplementation to get a better error message and less bugs.
|
||||||
url = "github:ryan4yin/ragenix";
|
# url = "github:ryan4yin/ragenix";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
nix-gaming.url = "github:fufexan/nix-gaming";
|
nix-gaming.url = "github:fufexan/nix-gaming";
|
||||||
|
|
||||||
disko = {
|
disko = {
|
||||||
url = "github:nix-community/disko/v1.6.1";
|
url = "github:nix-community/disko/v1.11.0";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -111,14 +115,14 @@
|
|||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
######################## Some non-flake repositories #########################################
|
ghostty = {
|
||||||
|
url = "github:ghostty-org/ghostty";
|
||||||
# doom-emacs is a configuration framework for GNU Emacs.
|
|
||||||
doomemacs = {
|
|
||||||
url = "github:doomemacs/doomemacs";
|
|
||||||
flake = false;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
blender-bin.url = "github:edolstra/nix-warez?dir=blender";
|
||||||
|
|
||||||
|
######################## Some non-flake repositories #########################################
|
||||||
|
|
||||||
polybar-themes = {
|
polybar-themes = {
|
||||||
url = "github:adi1090x/polybar-themes";
|
url = "github:adi1090x/polybar-themes";
|
||||||
flake = false;
|
flake = false;
|
||||||
@@ -140,6 +144,8 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
nur-ryan4yin.url = "github:ryan4yin/nur-packages";
|
nur-ryan4yin.url = "github:ryan4yin/nur-packages";
|
||||||
nur-ataraxiasjel.url = "github:AtaraxiaSjel/nur";
|
|
||||||
|
# for waydroid
|
||||||
|
# nur-ataraxiasjel.url = "github:AtaraxiaSjel/nur";
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,10 +45,11 @@ mkNixPak {
|
|||||||
# NOTE: sloth.mkdir is used to create the directory if it does not exist!
|
# NOTE: sloth.mkdir is used to create the directory if it does not exist!
|
||||||
(sloth.mkdir (sloth.concat' sloth.homeDir "/.mozilla"))
|
(sloth.mkdir (sloth.concat' sloth.homeDir "/.mozilla"))
|
||||||
|
|
||||||
sloth.xdgDownloadDir
|
|
||||||
# ================ for externsions ===============================
|
# ================ for externsions ===============================
|
||||||
# required by https://github.com/browserpass/browserpass-extension
|
# required by https://github.com/browserpass/browserpass-extension
|
||||||
(sloth.concat' sloth.homeDir "/.local/share/password-store") # pass
|
(sloth.concat' sloth.homeDir "/.local/share/password-store") # pass
|
||||||
|
sloth.xdgDownloadDir
|
||||||
|
sloth.xdgDocumentsDir
|
||||||
];
|
];
|
||||||
bind.ro = [
|
bind.ro = [
|
||||||
# To actually make Firefox run
|
# To actually make Firefox run
|
||||||
|
|||||||
@@ -41,7 +41,8 @@ mkNixPak {
|
|||||||
# given the read write permission to the following directories.
|
# given the read write permission to the following directories.
|
||||||
# NOTE: sloth.mkdir is used to create the directory if it does not exist!
|
# NOTE: sloth.mkdir is used to create the directory if it does not exist!
|
||||||
(sloth.mkdir (sloth.concat [sloth.xdgConfigHome "/QQ"]))
|
(sloth.mkdir (sloth.concat [sloth.xdgConfigHome "/QQ"]))
|
||||||
(sloth.mkdir (sloth.concat [sloth.xdgDownloadDir "/QQ"]))
|
(sloth.mkdir (sloth.concat [sloth.xdgDocumentsDir "/QQ"]))
|
||||||
|
sloth.xdgDownloadDir
|
||||||
];
|
];
|
||||||
sockets = {
|
sockets = {
|
||||||
x11 = false;
|
x11 = false;
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ mkNixPak {
|
|||||||
(sloth.mkdir (sloth.concat [sloth.homeDir "/.xwechat"]))
|
(sloth.mkdir (sloth.concat [sloth.homeDir "/.xwechat"]))
|
||||||
(sloth.mkdir (sloth.concat [sloth.xdgDocumentsDir "/xwechat_files"]))
|
(sloth.mkdir (sloth.concat [sloth.xdgDocumentsDir "/xwechat_files"]))
|
||||||
(sloth.mkdir (sloth.concat [sloth.xdgDocumentsDir "/WeChat_Data/"]))
|
(sloth.mkdir (sloth.concat [sloth.xdgDocumentsDir "/WeChat_Data/"]))
|
||||||
(sloth.mkdir (sloth.concat [sloth.xdgDownloadDir "/WeChat"]))
|
sloth.xdgDownloadDir
|
||||||
];
|
];
|
||||||
sockets = {
|
sockets = {
|
||||||
x11 = false;
|
x11 = false;
|
||||||
|
|||||||
+16
-1
@@ -5,7 +5,6 @@
|
|||||||
}: {
|
}: {
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
# Misc
|
# Misc
|
||||||
tldr
|
|
||||||
cowsay
|
cowsay
|
||||||
gnupg
|
gnupg
|
||||||
gnumake
|
gnumake
|
||||||
@@ -102,6 +101,22 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# very fast version of tldr in Rust
|
||||||
|
tealdeer = {
|
||||||
|
enable = true;
|
||||||
|
enableAutoUpdates = true;
|
||||||
|
settings = {
|
||||||
|
display = {
|
||||||
|
compact = false;
|
||||||
|
use_pager = true;
|
||||||
|
};
|
||||||
|
updates = {
|
||||||
|
auto_update = false;
|
||||||
|
auto_update_interval_hours = 720;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
# zoxide is a smarter cd command, inspired by z and autojump.
|
# zoxide is a smarter cd command, inspired by z and autojump.
|
||||||
# It remembers which directories you use most frequently,
|
# It remembers which directories you use most frequently,
|
||||||
# so you can "jump" to them in just a few keystrokes.
|
# so you can "jump" to them in just a few keystrokes.
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
neovim = {
|
neovim = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
defaultEditor = true;
|
|
||||||
viAlias = true;
|
viAlias = true;
|
||||||
vimAlias = true;
|
vimAlias = true;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,10 +2,16 @@ _: {
|
|||||||
# use mirror for pip install
|
# use mirror for pip install
|
||||||
xdg.configFile."pip/pip.conf".text = ''
|
xdg.configFile."pip/pip.conf".text = ''
|
||||||
[global]
|
[global]
|
||||||
index-url = https://mirrors.ustc.edu.cn/pypi/web/simple
|
index-url = https://mirror.nju.edu.cn/pypi/web/simple
|
||||||
format = columns
|
format = columns
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
# xdg.configFile."pip/pip.conf".text = ''
|
||||||
|
# [global]
|
||||||
|
# index-url = https://mirror.nju.edu.cn/pypi/web/simple
|
||||||
|
# format = columns
|
||||||
|
# '';
|
||||||
|
|
||||||
# xdg.configFile."pip/pip.conf".text = ''
|
# xdg.configFile."pip/pip.conf".text = ''
|
||||||
# [global]
|
# [global]
|
||||||
# index-url = https://mirrors.bfsu.edu.cn/pypi/web/simple
|
# index-url = https://mirrors.bfsu.edu.cn/pypi/web/simple
|
||||||
|
|||||||
+161
-137
@@ -1,146 +1,170 @@
|
|||||||
# Nushell Config File
|
# Nushell Config File Documentation
|
||||||
#
|
#
|
||||||
# version = 0.81.1
|
# 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.103.0"
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
|
||||||
# let's define some colors
|
# $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.
|
||||||
|
|
||||||
# https://github.com/catppuccin/i3/blob/main/themes/catppuccin-mocha
|
|
||||||
let rosewater = "#f5e0dc"
|
|
||||||
let flamingo = "#f2cdcd"
|
|
||||||
let pink = "#f5c2e7"
|
|
||||||
let mauve = "#cba6f7"
|
|
||||||
let red = "#f38ba8"
|
|
||||||
let maroon = "#eba0ac"
|
|
||||||
let peach = "#fab387"
|
|
||||||
let green = "#a6e3a1"
|
|
||||||
let teal = "#94e2d5"
|
|
||||||
let sky = "#89dceb"
|
|
||||||
let sapphire = "#74c7ec"
|
|
||||||
let blue = "#89b4fa"
|
|
||||||
let lavender = "#b4befe"
|
|
||||||
let text = "#cdd6f4"
|
|
||||||
let subtext1 = "#bac2de"
|
|
||||||
let subtext0 = "#a6adc8"
|
|
||||||
let overlay2 = "#9399b2"
|
|
||||||
let overlay1 = "#7f849c"
|
|
||||||
let overlay0 = "#6c7086"
|
|
||||||
let surface2 = "#585b70"
|
|
||||||
let surface1 = "#45475a"
|
|
||||||
let surface0 = "#313244"
|
|
||||||
let base = "#1e1e2e"
|
|
||||||
let mantle = "#181825"
|
|
||||||
let crust = "#11111b"
|
|
||||||
|
|
||||||
# we're creating a theme here that uses the colors we defined above.
|
$env.config.history.file_format = "sqlite"
|
||||||
|
$env.config.history.max_size = 5_000_000
|
||||||
|
|
||||||
let catppuccin_theme = {
|
# isolation (bool):
|
||||||
separator: $overlay2
|
# `true`: New history from other currently-open Nushell sessions is not
|
||||||
leading_trailing_space_bg: $surface2
|
# seen when scrolling through the history using PrevHistory (typically
|
||||||
header: $red
|
# the Up key) or NextHistory (Down key)
|
||||||
date: $pink
|
# `false`: All commands entered in other Nushell sessions will be mixed with
|
||||||
filesize: $green
|
# those from the current shell.
|
||||||
row_index: $text
|
# Note: Older history items (from before the current shell was started) are
|
||||||
bool: $peach
|
# always shown.
|
||||||
int: $red
|
# This setting only applies to SQLite-backed history
|
||||||
duration: $sky
|
$env.config.history.isolation = true
|
||||||
range: $sapphire
|
|
||||||
float: $lavender
|
|
||||||
string: $text
|
|
||||||
nothing: $overlay1
|
|
||||||
binary: $subtext1
|
|
||||||
cellpath: $subtext0
|
|
||||||
hints: dark_gray
|
|
||||||
|
|
||||||
shape_garbage: { fg: $overlay2 bg: $red attr: b}
|
# ----------------------
|
||||||
shape_bool: $maroon
|
# Miscellaneous Settings
|
||||||
shape_int: { fg: $pink attr: b}
|
# ----------------------
|
||||||
shape_float: { fg: $pink attr: b}
|
|
||||||
shape_range: { fg: $overlay0 attr: b}
|
|
||||||
shape_internalcall: { fg: $maroon attr: b}
|
|
||||||
shape_external: $mauve
|
|
||||||
shape_externalarg: { fg: $red attr: b}
|
|
||||||
shape_literal: $flamingo
|
|
||||||
shape_operator: $rosewater
|
|
||||||
shape_signature: { fg: $red attr: b}
|
|
||||||
shape_string: $red
|
|
||||||
shape_filepath: $peach
|
|
||||||
shape_globpattern: { fg: $teal attr: b}
|
|
||||||
shape_variable: $pink
|
|
||||||
shape_flag: { fg: $mauve attr: b}
|
|
||||||
shape_custom: {attr: b}
|
|
||||||
}
|
|
||||||
|
|
||||||
# The default config record. This is where much of your global configuration is setup.
|
# show_banner (bool): Enable or disable the welcome banner at startup
|
||||||
$env.config = {
|
$env.config.show_banner = false
|
||||||
color_config: $catppuccin_theme # <-- this is the theme
|
|
||||||
use_ansi_coloring: true
|
|
||||||
|
|
||||||
# true or false to enable or disable the welcome banner at startup
|
# rm.always_trash (bool):
|
||||||
show_banner: false
|
# true: rm behaves as if the --trash/-t option is specified
|
||||||
|
# false: rm behaves as if the --permanent/-p option is specified (default)
|
||||||
table: {
|
$env.config.rm.always_trash = true
|
||||||
mode: rounded # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other
|
|
||||||
index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column
|
# recursion_limit (int): how many times a command can call itself recursively
|
||||||
show_empty: true # show 'empty list' and 'empty record' placeholders for command output
|
# before an error will be generated.
|
||||||
trim: {
|
$env.config.recursion_limit = 50
|
||||||
methodology: wrapping # wrapping or truncating
|
|
||||||
wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology
|
# ---------------------------
|
||||||
truncating_suffix: "..." # A suffix used by the 'truncating' methodology
|
# Commandline Editor Settings
|
||||||
}
|
# ---------------------------
|
||||||
}
|
|
||||||
|
# edit_mode (string) "vi" or "emacs" sets the editing behavior of Reedline
|
||||||
|
$env.config.edit_mode = "vi"
|
||||||
|
|
||||||
|
# Command that will be used to edit the current line buffer with Ctrl+O.
|
||||||
|
# If unset, uses $env.VISUAL and then $env.EDITOR
|
||||||
|
#
|
||||||
|
$env.config.buffer_editor = ["nvim", "--clean"]
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# --------------------
|
||||||
|
# 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.
|
||||||
|
$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.
|
||||||
|
$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
|
||||||
|
|
||||||
|
# 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
|
||||||
|
|
||||||
|
# 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
|
||||||
|
]
|
||||||
|
|
||||||
|
# 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
|
||||||
|
]
|
||||||
|
|
||||||
|
# As with NU_LIB_DIRS, an $env.NU_PLUGIN_DIRS is searched after the constant version
|
||||||
|
|
||||||
|
# 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"
|
||||||
|
|
||||||
|
# You can remove duplicate directories from the path using:
|
||||||
|
$env.PATH = ($env.PATH | uniq)
|
||||||
|
|
||||||
completions: {
|
|
||||||
case_sensitive: false # set to true to enable case-sensitive completions
|
|
||||||
quick: true # set this to false to prevent auto-selecting completions when only one remains
|
|
||||||
partial: true # set this to false to prevent partial filling of the prompt
|
|
||||||
algorithm: "prefix" # prefix or fuzzy
|
|
||||||
external: {
|
|
||||||
enable: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up may be very slow
|
|
||||||
max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options
|
|
||||||
completer: null # check 'carapace_completer' above as an example
|
|
||||||
}
|
|
||||||
}
|
|
||||||
filesize: {
|
|
||||||
metric: true # true => KB, MB, GB (ISO standard), false => KiB, MiB, GiB (Windows standard)
|
|
||||||
format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, zb, zib, auto
|
|
||||||
}
|
|
||||||
cursor_shape: {
|
|
||||||
emacs: line # block, underscore, line, blink_block, blink_underscore, blink_line (line is the default)
|
|
||||||
vi_insert: block # block, underscore, line , blink_block, blink_underscore, blink_line (block is the default)
|
|
||||||
vi_normal: underscore # block, underscore, line, blink_block, blink_underscore, blink_line (underscore is the default)
|
|
||||||
}
|
|
||||||
footer_mode: "auto" # always, never, number_of_rows, auto
|
|
||||||
float_precision: 2 # the precision for displaying floats in tables
|
|
||||||
# buffer_editor: "emacs" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL
|
|
||||||
bracketed_paste: true # enable bracketed paste, currently useless on windows
|
|
||||||
edit_mode: emacs # emacs, vi
|
|
||||||
shell_integration: {
|
|
||||||
# osc2 abbreviates the path if in the home_dir, sets the tab/window title, shows the running command in the tab/window title
|
|
||||||
osc2: true
|
|
||||||
# osc7 is a way to communicate the path to the terminal, this is helpful for spawning new tabs in the same directory
|
|
||||||
osc7: true
|
|
||||||
# osc8 is also implemented as the deprecated setting ls.show_clickable_links, it shows clickable links in ls output if your terminal supports it. show_clickable_links is deprecated in favor of osc8
|
|
||||||
osc8: true
|
|
||||||
# osc9_9 is from ConEmu and is starting to get wider support. It's similar to osc7 in that it communicates the path to the terminal
|
|
||||||
osc9_9: false
|
|
||||||
# osc133 is several escapes invented by Final Term which include the supported ones below.
|
|
||||||
# 133;A - Mark prompt start
|
|
||||||
# 133;B - Mark prompt end
|
|
||||||
# 133;C - Mark pre-execution
|
|
||||||
# 133;D;exit - Mark execution finished with exit code
|
|
||||||
# This is used to enable terminals to know where the prompt is, the command is, where the command finishes, and where the output of the command is
|
|
||||||
osc133: true
|
|
||||||
# osc633 is closely related to osc133 but only exists in visual studio code (vscode) and supports their shell integration features
|
|
||||||
# 633;A - Mark prompt start
|
|
||||||
# 633;B - Mark prompt end
|
|
||||||
# 633;C - Mark pre-execution
|
|
||||||
# 633;D;exit - Mark execution finished with exit code
|
|
||||||
# 633;E - NOT IMPLEMENTED - Explicitly set the command line with an optional nonce
|
|
||||||
# 633;P;Cwd=<path> - Mark the current working directory and communicate it to the terminal
|
|
||||||
# and also helps with the run recent menu in vscode
|
|
||||||
osc633: true
|
|
||||||
# reset_application_mode is escape \x1b[?1l and was added to help ssh work better
|
|
||||||
reset_application_mode: true
|
|
||||||
}
|
|
||||||
render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt.
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -5,6 +5,6 @@
|
|||||||
wireshark # network analyzer
|
wireshark # network analyzer
|
||||||
|
|
||||||
# IDEs
|
# IDEs
|
||||||
jetbrains.idea-community
|
# jetbrains.idea-community
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ Error opening terminal: xterm-kitty.
|
|||||||
|
|
||||||
NixOS preserve the `TERMINFO` and `TERMINFO_DIRS` environment variables, for `root` and the `wheel`
|
NixOS preserve the `TERMINFO` and `TERMINFO_DIRS` environment variables, for `root` and the `wheel`
|
||||||
group:
|
group:
|
||||||
[nixpkgs/nixos/modules/config/terminfo.nix](https://github.com/NixOS/nixpkgs/blob/nixos-24.05/nixos/modules/config/terminfo.nix#L18)
|
[nixpkgs/nixos/modules/config/terminfo.nix](https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/config/terminfo.nix#L18)
|
||||||
|
|
||||||
For nix-darwin, take a look at <https://github.com/LnL7/nix-darwin/wiki/Terminfo-issues>
|
For nix-darwin, take a look at <https://github.com/LnL7/nix-darwin/wiki/Terminfo-issues>
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,16 @@
|
|||||||
programs.foot = {
|
programs.foot = {
|
||||||
# foot is designed only for Linux
|
# foot is designed only for Linux
|
||||||
enable = pkgs.stdenv.isLinux;
|
enable = pkgs.stdenv.isLinux;
|
||||||
|
|
||||||
|
# foot can also be run in a server mode. In this mode, one process hosts multiple windows.
|
||||||
|
# All Wayland communication, VT parsing and rendering is done in the server process.
|
||||||
|
# New windows are opened by running footclient, which remains running until the terminal window is closed.
|
||||||
|
#
|
||||||
|
# Advantages to run foot in server mode including reduced memory footprint and startup time.
|
||||||
|
# The downside is a performance penalty. If one window is very busy with, for example, producing output,
|
||||||
|
# then other windows will suffer. Also, should the server process crash, all windows will be gone.
|
||||||
|
server.enable = true;
|
||||||
|
|
||||||
# https://man.archlinux.org/man/foot.ini.5
|
# https://man.archlinux.org/man/foot.ini.5
|
||||||
settings = {
|
settings = {
|
||||||
main = {
|
main = {
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
ghostty,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
###########################################################
|
||||||
|
#
|
||||||
|
# Ghostty Configuration
|
||||||
|
#
|
||||||
|
###########################################################
|
||||||
|
{
|
||||||
|
programs.ghostty = {
|
||||||
|
enable = true;
|
||||||
|
package =
|
||||||
|
if pkgs.stdenv.isDarwin
|
||||||
|
then pkgs.hello # pkgs.ghostty is currently broken on darwin
|
||||||
|
else pkgs.ghostty; # the stable version
|
||||||
|
# package = ghostty.packages.${pkgs.system}.default; # the latest version
|
||||||
|
enableBashIntegration = false;
|
||||||
|
installBatSyntax = false;
|
||||||
|
# installVimSyntax = true;
|
||||||
|
settings = {
|
||||||
|
theme = "catppuccin-mocha";
|
||||||
|
|
||||||
|
font-family = "JetBrains Mono";
|
||||||
|
font-size = 13;
|
||||||
|
|
||||||
|
background-opacity = 0.93;
|
||||||
|
# only supported on macOS;
|
||||||
|
background-blur-radius = 10;
|
||||||
|
scrollback-limit = 20000;
|
||||||
|
|
||||||
|
# https://ghostty.org/docs/config/reference#command
|
||||||
|
# To resolve issues:
|
||||||
|
# 1. https://github.com/ryan4yin/nix-config/issues/26
|
||||||
|
# 2. https://github.com/ryan4yin/nix-config/issues/8
|
||||||
|
# Spawn a nushell in login mode via `bash`
|
||||||
|
command = "${pkgs.bash}/bin/bash --login -c 'nu --login --interactive'";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
+1
-4
@@ -12,9 +12,6 @@
|
|||||||
# 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 = "24.05";
|
stateVersion = "24.11";
|
||||||
};
|
};
|
||||||
|
|
||||||
# Let Home Manager install and manage itself.
|
|
||||||
programs.home-manager.enable = true;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
pkgs,
|
pkgs,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
|
# https://developer.hashicorp.com/terraform/cli/config/config-file
|
||||||
|
home.file.".terraformrc".source = ./terraformrc;
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
# infrastructure as code
|
# infrastructure as code
|
||||||
# pulumi
|
# pulumi
|
||||||
@@ -27,7 +30,9 @@
|
|||||||
# digitalocean
|
# digitalocean
|
||||||
doctl
|
doctl
|
||||||
# google cloud
|
# google cloud
|
||||||
google-cloud-sdk
|
(google-cloud-sdk.withExtraComponents (with google-cloud-sdk.components; [
|
||||||
|
gke-gcloud-auth-plugin
|
||||||
|
]))
|
||||||
|
|
||||||
# cloud tools that nix do not have cache for.
|
# cloud tools that nix do not have cache for.
|
||||||
terraform
|
terraform
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
plugin_cache_dir = "$HOME/.terraform.d/plugin-cache"
|
||||||
|
disable_checkpoint = true
|
||||||
@@ -12,7 +12,14 @@
|
|||||||
go-containerregistry # provides `crane` & `gcrane`, it's similar to skopeo
|
go-containerregistry # provides `crane` & `gcrane`, it's similar to skopeo
|
||||||
|
|
||||||
kubectl
|
kubectl
|
||||||
kubectx
|
kubectx # kubectx & kubens
|
||||||
|
kubectl-view-secret # kubectl view-secret
|
||||||
|
kubectl-tree # kubectl tree
|
||||||
|
kubectl-node-shell # exec into node
|
||||||
|
kubepug # kubernetes pre upgrade checker
|
||||||
|
k8sgpt
|
||||||
|
nur-ryan4yin.packages.${pkgs.system}.kubectl-ai # an ai helper opensourced by google
|
||||||
|
|
||||||
kubebuilder
|
kubebuilder
|
||||||
istioctl
|
istioctl
|
||||||
clusterctl # for kubernetes cluster-api
|
clusterctl # for kubernetes cluster-api
|
||||||
@@ -47,5 +54,9 @@
|
|||||||
in
|
in
|
||||||
skin_attr;
|
skin_attr;
|
||||||
};
|
};
|
||||||
|
kubecolor = {
|
||||||
|
enable = true;
|
||||||
|
enableAlias = true;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
minicom
|
minicom
|
||||||
|
|
||||||
# ai related
|
# ai related
|
||||||
pkgs-unstable.python312Packages.huggingface-hub # huggingface-cli
|
pkgs-unstable.python313Packages.huggingface-hub # huggingface-cli
|
||||||
|
|
||||||
# misc
|
# misc
|
||||||
pkgs-unstable.devbox
|
pkgs-unstable.devbox
|
||||||
|
|||||||
@@ -3,8 +3,7 @@
|
|||||||
My editors:
|
My editors:
|
||||||
|
|
||||||
1. Neovim
|
1. Neovim
|
||||||
2. Emacs
|
2. Helix
|
||||||
3. Helix
|
|
||||||
|
|
||||||
And `Zellij` for a smooth and stable terminal experience.
|
And `Zellij` for a smooth and stable terminal experience.
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,6 @@
|
|||||||
|
|
||||||
Some plugins:
|
Some plugins:
|
||||||
|
|
||||||
- Emacs
|
|
||||||
- [parinfer-rusT-mode](https://github.com/justinbarclay/parinfer-rust-mode)
|
|
||||||
- Neovim
|
- Neovim
|
||||||
- [parinfer-rust](https://github.com/eraserhd/parinfer-rust)
|
- [parinfer-rust](https://github.com/eraserhd/parinfer-rust)
|
||||||
- <https://github.com/Olical/conjure>
|
- <https://github.com/Olical/conjure>
|
||||||
|
|||||||
@@ -1,230 +0,0 @@
|
|||||||
# Emacs Editor
|
|
||||||
|
|
||||||
## Why emacs?
|
|
||||||
|
|
||||||
1. Explore the unknown, just for fun!
|
|
||||||
2. Org Mode
|
|
||||||
3. Lisp Coding
|
|
||||||
4. A top-level tutorial for Emacs(Chinese): <https://nyk.ma/tags/emacs/>
|
|
||||||
5. A Beginner's Guide to Emacs(Chinese):
|
|
||||||
<https://github.com/emacs-tw/emacs-101-beginner-survival-guide>
|
|
||||||
|
|
||||||
## Screenshot
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## Useful Links
|
|
||||||
|
|
||||||
- Framework: <https://github.com/doomemacs/doomemacs>
|
|
||||||
- key bindings:
|
|
||||||
- source code:
|
|
||||||
<https://github.com/doomemacs/doomemacs/blob/master/modules/config/default/%2Bevil-bindings.el>
|
|
||||||
- docs: <https://github.com/doomemacs/doomemacs/blob/master/modules/editor/evil/README.org>
|
|
||||||
- module index: <https://github.com/doomemacs/doomemacs/blob/master/docs/modules.org>
|
|
||||||
- LSP Client: <https://github.com/manateelazycat/lsp-bridge>
|
|
||||||
- Emacs Wiki: <https://www.emacswiki.org/emacs/SiteMap>
|
|
||||||
- Awesome Emacs: <https://github.com/emacs-tw/awesome-emacs#lsp-client>
|
|
||||||
- Chinese(rime) support: <https://github.com/DogLooksGood/emacs-rime>
|
|
||||||
- modal editing:
|
|
||||||
- <https://github.com/emacs-evil/evil>: evil mode, enabled by default in doom-emacs.
|
|
||||||
- <https://github.com/meow-edit/meow>
|
|
||||||
|
|
||||||
## Install or Update
|
|
||||||
|
|
||||||
After deploying this nix flake, run the following command to install or update emacs:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
doom sync
|
|
||||||
```
|
|
||||||
|
|
||||||
when in doubt, run `doom sync`!
|
|
||||||
|
|
||||||
## Testing
|
|
||||||
|
|
||||||
> via `Justfile` located at the root of this repo.
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# testing
|
|
||||||
just emacs-test
|
|
||||||
just emacs-purge
|
|
||||||
just emacs-reload
|
|
||||||
|
|
||||||
# clear test data
|
|
||||||
just emacs-clean
|
|
||||||
```
|
|
||||||
|
|
||||||
## Limits
|
|
||||||
|
|
||||||
- It's too slow to start up and install(compile/build) packages.
|
|
||||||
- I have to use emacs in daemon/client mode to avoid this issue.
|
|
||||||
- It's too large in size, not suitable for servers.
|
|
||||||
- So vim/neovim is still the best choice for servers.
|
|
||||||
- Emacs's markdown-mode works not well with tables, see:
|
|
||||||
- https://github.com/jrblevin/markdown-mode/issues/380
|
|
||||||
- I use git command frequently, but doomemacs only autoupdates status of git diff / treemacs when
|
|
||||||
using magit.
|
|
||||||
- I have to learn magit to avoid this issue...
|
|
||||||
- GitHub's orgmode support is not well, Markdown is better for GitHub.
|
|
||||||
- Use markdown for repo's README.md, and use orgmode for my personal notes and docs only.
|
|
||||||
|
|
||||||
## Cheetsheet
|
|
||||||
|
|
||||||
Here is the cheetsheet related to my DoomEmacs configs. Please read vim's common cheetsheet at
|
|
||||||
[../README.md](../README.md) before reading the following.
|
|
||||||
|
|
||||||
### Basics
|
|
||||||
|
|
||||||
> Terminal(vterm) is useful in GUI mode, I use Zellij instead in terminal mode.
|
|
||||||
|
|
||||||
| Action | Shortcut |
|
|
||||||
| ---------------------- | ------------------------------------------------- |
|
|
||||||
| Popup Terminal(vterm) | `SPC + o + t` |
|
|
||||||
| Open Terminal | `SPC + o + T` |
|
|
||||||
| Open file tree sidebar | `SPC + o + p` |
|
|
||||||
| Frame fullscreen | `SPC + t + F` |
|
|
||||||
| Exit | `M-x C-c` |
|
|
||||||
| Execute Command | `M-x`(hold on `Alt`/`option`, and then press `x`) |
|
|
||||||
| Eval Lisp Code | `M-:`(hold on `Alt`/`option`, and then press `:`) |
|
|
||||||
|
|
||||||
### Window Navigation
|
|
||||||
|
|
||||||
| Action | Shortcut |
|
|
||||||
| ------------------------------------------ | --------------------------------------------------------------------- |
|
|
||||||
| Split a window vertically and horizontally | `SPC w v/s` |
|
|
||||||
| Move to a window in a specific direction | `Ctrl-w + h/j/k/l` |
|
|
||||||
| Move a window to a specific direction | `Ctrl-w + H/J/K/L` |
|
|
||||||
| Move to the next window | `SPC w w` |
|
|
||||||
| Close the current window | `SPC w q` |
|
|
||||||
| Rebalance all windows | `SPC w =` |
|
|
||||||
| Set window's width(columns) | `80 SPC w \|` (the Vertical line is escaped due to markdown's limits) |
|
|
||||||
| Set window's height | `30 SPC w _ ` |
|
|
||||||
|
|
||||||
### File Tree
|
|
||||||
|
|
||||||
- treemacs: <https://github.com/Alexander-Miller/treemacs/blob/master/src/elisp/treemacs-mode.el>
|
|
||||||
- treemacs-evil:
|
|
||||||
<https://github.com/Alexander-Miller/treemacs/blob/master/src/extra/treemacs-evil.el>
|
|
||||||
|
|
||||||
| Action | Shortcut |
|
|
||||||
| ------------------------------------- | --------- |
|
|
||||||
| Resize Treemacs's window | `>` & `<` |
|
|
||||||
| Extra Wide Window | `W` |
|
|
||||||
| Rename | `R` |
|
|
||||||
| Delete File/Direcoty | `d` |
|
|
||||||
| New File | `cf` |
|
|
||||||
| New Directory | `cd` |
|
|
||||||
| Go to parent | `u` |
|
|
||||||
| Run shell command in for current node | `!` |
|
|
||||||
| Refresh file tree | `gr` |
|
|
||||||
| Copy project-path into pasteboard | `yp` |
|
|
||||||
| Copy absolute-path into pasteboard | `ya` |
|
|
||||||
| Copy relative-path into pasteboard | `yr` |
|
|
||||||
| Copy file to another location | `yf` |
|
|
||||||
| Move file to another location | `m` |
|
|
||||||
| quit | `q` |
|
|
||||||
|
|
||||||
And bookmarks:
|
|
||||||
|
|
||||||
- Add bookmarks in treemacs: `b`
|
|
||||||
- Show Bookmark List: `SPC s m`
|
|
||||||
|
|
||||||
### Splitting and Buffers
|
|
||||||
|
|
||||||
| Action | Shortcut |
|
|
||||||
| ----------------------- | ----------------- |
|
|
||||||
| Buffer List | `<Space> + ,` |
|
|
||||||
| Save all buffers(Tab) | `<Space> + b + S` |
|
|
||||||
| Kill the current buffer | `<Space> + b + k` |
|
|
||||||
| Kill all buffers | `<Space> + b + K` |
|
|
||||||
|
|
||||||
### Editing and Formatting
|
|
||||||
|
|
||||||
| Action | Shortcut |
|
|
||||||
| ------------------------------------------ | ------------------- |
|
|
||||||
| Format Document | `<Space> + cf` |
|
|
||||||
| Code Actions | `<Space> + ca` |
|
|
||||||
| Rename | `<Space> + cr` |
|
|
||||||
| Opening LSP symbols | `<Space> + cS` |
|
|
||||||
| Show all LSP Errors | `<Space> + c + x/X` |
|
|
||||||
| Show infinite undo history(really useful!) | `<Space> + s + u` |
|
|
||||||
| Open filepath/URL at cursor | `gf` |
|
|
||||||
| Find files by keyword in path | `<Space> + <Space>` |
|
|
||||||
| Grep string in files (vertico + ripgrep) | `<Space> + sd` |
|
|
||||||
|
|
||||||
### Image Preview(GUI mode only)
|
|
||||||
|
|
||||||
Use `-`, `+` to resize the image, `r` to rotate the image.
|
|
||||||
|
|
||||||
### Search & replace
|
|
||||||
|
|
||||||
```bash
|
|
||||||
SPC s p foo C-; E C-c C-p :%s/foo/bar/g RET Z Z
|
|
||||||
```
|
|
||||||
|
|
||||||
1. `SPC s p`: search in project
|
|
||||||
1. `foo`: the keyword to search
|
|
||||||
1. `C-; E`: exports what you’re looking at into a new buffer in grep-mode
|
|
||||||
1. `C-c C-p` to run wgrep-change-to-wgrep-mode to make the search results writable.
|
|
||||||
1. `:%s/foo/bar/g RET`: replace in the current buffer(just like neovim/vim)
|
|
||||||
1. `Z Z`: to write all the changes to their respective files
|
|
||||||
|
|
||||||
### Projects
|
|
||||||
|
|
||||||
> easily switch between projects without exit emacs!
|
|
||||||
|
|
||||||
| Action | Shortcut |
|
|
||||||
| -------------------------- | ------------- |
|
|
||||||
| Switch between projects | `SPC + p + p` |
|
|
||||||
| Browse the current project | `SPC + p + .` |
|
|
||||||
| Add new project | `SPC + p + a` |
|
|
||||||
|
|
||||||
### Workspaces
|
|
||||||
|
|
||||||
> Very useful when run emacs in daemon/client modes
|
|
||||||
|
|
||||||
| Action | Shortcut |
|
|
||||||
| --------------------------- | --------------------------- |
|
|
||||||
| Switch between workspaces | `M-1/2/3/...`(Alt-1/2/3/..) |
|
|
||||||
| New Workspace | `SPC + TAB + n` |
|
|
||||||
| New Named Workspace | `SPC + TAB + N` |
|
|
||||||
| Delete Workspace | `SPC + TAB + d` |
|
|
||||||
| Display Workspaces bar blow | `SPC + TAB + TAB` |
|
|
||||||
|
|
||||||
### Magit
|
|
||||||
|
|
||||||
> https://github.com/magit/magit
|
|
||||||
|
|
||||||
Magit is a powerful tool that make git operations easy and intuitive.
|
|
||||||
|
|
||||||
| Action | Shortcut |
|
|
||||||
| ------------------------ | ------------------------ |
|
|
||||||
| Open Magit | `C-x g` or `SPC + g + g` |
|
|
||||||
| Switch branch | `SPC + g + b` |
|
|
||||||
| Show buffer's commit log | `SPC + g + L` |
|
|
||||||
|
|
||||||
Shortcuts in magit's pane:
|
|
||||||
|
|
||||||
> When run `git commit` / `git add` / `git push` /... via magit, multiple Arguments can be set. Set
|
|
||||||
> arguments won't trigger a git command immediately. Magit will try to run a git command only after
|
|
||||||
> an Action key is pressed.
|
|
||||||
|
|
||||||
| Action | Shortcut |
|
|
||||||
| -------------------------------------------------- | --------------------------------------------- |
|
|
||||||
| Quit the current Magit pane | `q` |
|
|
||||||
| Show log | `l` |
|
|
||||||
| Show current branch's log | `l + l` |
|
|
||||||
| Show current reflog | `l + r` |
|
|
||||||
| Commit | `c` |
|
|
||||||
| Stage | `s` |
|
|
||||||
| Unstage | `u` |
|
|
||||||
| Push | `p` |
|
|
||||||
| Pull | `f` |
|
|
||||||
| Rebase | `r` |
|
|
||||||
| Rebase Interactively | `r + i`, select on a commit, then `C-c + C-c` |
|
|
||||||
| Stash | `z` |
|
|
||||||
| Merge | `m` |
|
|
||||||
| Fold/Unfold | `TAB` |
|
|
||||||
| Show details of the current unit(commit/stage/...) | `<ENTER>` |
|
|
||||||
|
|
||||||
KeyBinding full list:
|
|
||||||
<https://github.com/emacs-evil/evil-collection/tree/master/modes/magit#key-bindings>
|
|
||||||
@@ -1,132 +0,0 @@
|
|||||||
# ==============================================
|
|
||||||
# Based on doomemacs's author's config:
|
|
||||||
# https://github.com/hlissner/dotfiles/blob/master/modules/editors/emacs.nix
|
|
||||||
#
|
|
||||||
# Emacs Tutorials:
|
|
||||||
# 1. Official: <https://www.gnu.org/software/emacs/tour/index.html>
|
|
||||||
# 2. Doom Emacs: <https://github.com/doomemacs/doomemacs/blob/master/docs/index.org>
|
|
||||||
#
|
|
||||||
{
|
|
||||||
config,
|
|
||||||
lib,
|
|
||||||
pkgs,
|
|
||||||
doomemacs,
|
|
||||||
...
|
|
||||||
}:
|
|
||||||
with lib; let
|
|
||||||
cfg = config.modules.editors.emacs;
|
|
||||||
envExtra = lib.mkAfter ''
|
|
||||||
export PATH="${config.xdg.configHome}/emacs/bin:$PATH"
|
|
||||||
'';
|
|
||||||
shellAliases = {
|
|
||||||
e = "emacsclient --create-frame"; # gui
|
|
||||||
et = "emacsclient --create-frame --tty"; # terminal
|
|
||||||
};
|
|
||||||
librime-dir = "${config.xdg.dataHome}/emacs/librime";
|
|
||||||
parinfer-rust-lib-dir = "${config.xdg.dataHome}/emacs/parinfer-rust";
|
|
||||||
myEmacsPackagesFor = emacs: ((pkgs.emacsPackagesFor emacs).emacsWithPackages (epkgs: [
|
|
||||||
epkgs.vterm
|
|
||||||
]));
|
|
||||||
in {
|
|
||||||
options.modules.editors.emacs = {
|
|
||||||
enable = mkEnableOption "Emacs Editor";
|
|
||||||
};
|
|
||||||
|
|
||||||
config = mkIf cfg.enable (mkMerge [
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
|
||||||
## Doom dependencies
|
|
||||||
git
|
|
||||||
(ripgrep.override {withPCRE2 = true;})
|
|
||||||
gnutls # for TLS connectivity
|
|
||||||
|
|
||||||
## Optional dependencies
|
|
||||||
fd # faster projectile indexing
|
|
||||||
imagemagick # for image-dired
|
|
||||||
fd # faster projectile indexing
|
|
||||||
zstd # for undo-fu-session/undo-tree compression
|
|
||||||
|
|
||||||
# go-mode
|
|
||||||
# gocode # project archived, use gopls instead
|
|
||||||
|
|
||||||
## Module dependencies
|
|
||||||
# :checkers spell
|
|
||||||
(aspellWithDicts (ds: with ds; [en en-computers en-science]))
|
|
||||||
# :tools editorconfig
|
|
||||||
editorconfig-core-c # per-project style config
|
|
||||||
# :tools lookup & :lang org +roam
|
|
||||||
sqlite
|
|
||||||
# :lang latex & :lang org (latex previews)
|
|
||||||
# texlive.combined.scheme-medium
|
|
||||||
];
|
|
||||||
|
|
||||||
programs.bash.bashrcExtra = envExtra;
|
|
||||||
programs.zsh.envExtra = envExtra;
|
|
||||||
home.shellAliases = shellAliases;
|
|
||||||
programs.nushell.shellAliases = shellAliases;
|
|
||||||
|
|
||||||
xdg.configFile."doom" = {
|
|
||||||
source = ./doom;
|
|
||||||
force = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
home.activation.installDoomEmacs = lib.hm.dag.entryAfter ["writeBoundary"] ''
|
|
||||||
${pkgs.rsync}/bin/rsync -avz --chmod=D2755,F744 ${doomemacs}/ ${config.xdg.configHome}/emacs/
|
|
||||||
|
|
||||||
# librime for emacs-rime
|
|
||||||
mkdir -p ${librime-dir}
|
|
||||||
${pkgs.rsync}/bin/rsync -avz --chmod=D2755,F744 ${pkgs.librime}/ ${librime-dir}/
|
|
||||||
|
|
||||||
# libparinfer_rust for emacs' parinfer-rust-mode
|
|
||||||
mkdir -p ${parinfer-rust-lib-dir}
|
|
||||||
${pkgs.rsync}/bin/rsync -avz --chmod=D2755,F744 ${pkgs.vimPlugins.parinfer-rust}/lib/libparinfer_rust.* ${parinfer-rust-lib-dir}/parinfer-rust.so
|
|
||||||
'';
|
|
||||||
}
|
|
||||||
|
|
||||||
(mkIf pkgs.stdenv.isLinux (
|
|
||||||
let
|
|
||||||
# Do not use emacs-nox here, which makes the mouse wheel work abnormally in terminal mode.
|
|
||||||
# pgtk (pure gtk) build add native support for wayland.
|
|
||||||
# https://www.gnu.org/savannah-checkouts/gnu/emacs/emacs.html#Releases
|
|
||||||
emacsPkg = myEmacsPackagesFor pkgs.emacs29-pgtk;
|
|
||||||
in {
|
|
||||||
home.packages = [emacsPkg];
|
|
||||||
services.emacs = {
|
|
||||||
enable = true;
|
|
||||||
package = emacsPkg;
|
|
||||||
client = {
|
|
||||||
enable = true;
|
|
||||||
arguments = [" --create-frame"];
|
|
||||||
};
|
|
||||||
startWithUserSession = true;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
))
|
|
||||||
|
|
||||||
(mkIf pkgs.stdenv.isDarwin (
|
|
||||||
let
|
|
||||||
# macport adds some native features based on GNU Emacs 29
|
|
||||||
# https://bitbucket.org/mituharu/emacs-mac/src/master/README-mac
|
|
||||||
emacsPkg = myEmacsPackagesFor pkgs.emacs29;
|
|
||||||
in {
|
|
||||||
home.packages = [emacsPkg];
|
|
||||||
launchd.enable = true;
|
|
||||||
launchd.agents.emacs = {
|
|
||||||
enable = true;
|
|
||||||
config = {
|
|
||||||
ProgramArguments = [
|
|
||||||
"${pkgs.bash}/bin/bash"
|
|
||||||
"-l"
|
|
||||||
"-c"
|
|
||||||
"${emacsPkg}/bin/emacs --fg-daemon"
|
|
||||||
];
|
|
||||||
StandardErrorPath = "${config.home.homeDirectory}/Library/Logs/emacs-daemon.stderr.log";
|
|
||||||
StandardOutPath = "${config.home.homeDirectory}/Library/Logs/emacs-daemon.stdout.log";
|
|
||||||
RunAtLoad = true;
|
|
||||||
KeepAlive = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
))
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
@@ -1,175 +0,0 @@
|
|||||||
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
|
|
||||||
|
|
||||||
;; Place your private configuration here! Remember, you do not need to run 'doom
|
|
||||||
;; sync' after modifying this file!
|
|
||||||
|
|
||||||
|
|
||||||
;; Some functionality uses this to identify you, e.g. GPG configuration, email
|
|
||||||
;; clients, file templates and snippets. It is optional.
|
|
||||||
;; (setq user-full-name "John Doe"
|
|
||||||
;; user-mail-address "john@doe.com")
|
|
||||||
|
|
||||||
;; Doom exposes five (optional) variables for controlling fonts in Doom:
|
|
||||||
;;
|
|
||||||
;; - `doom-font' -- the primary font to use
|
|
||||||
;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable)
|
|
||||||
;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for
|
|
||||||
;; presentations or streaming.
|
|
||||||
;; - `doom-symbol-font' -- for symbols
|
|
||||||
;; - `doom-serif-font' -- for the `fixed-pitch-serif' face
|
|
||||||
;;
|
|
||||||
;; See 'C-h v doom-font' for documentation and more examples of what they
|
|
||||||
;; accept. For example:
|
|
||||||
;;
|
|
||||||
(setq doom-font (font-spec :family "JetBrainsMono Nerd Font" :size 18)
|
|
||||||
doom-variable-pitch-font (font-spec :family "DejaVu Sans")
|
|
||||||
doom-symbol-font (font-spec :family "Symbols Nerd Font Mono")
|
|
||||||
doom-big-font (font-spec :family "JetBrainsMono Nerd Font" :size 28))
|
|
||||||
|
|
||||||
;; Users should inject their own font logic in `after-setting-font-hook'
|
|
||||||
;; Add font for CJK charset
|
|
||||||
(defun init-cjk-fonts()
|
|
||||||
(dolist (charset '(kana han cjk-misc bopomofo))
|
|
||||||
(set-fontset-font (frame-parameter nil 'font)
|
|
||||||
charset (font-spec :family "Source Han Sans SC"))))
|
|
||||||
(add-hook 'after-setting-font-hook 'init-cjk-fonts)
|
|
||||||
|
|
||||||
|
|
||||||
;; If you or Emacs can't find your font, use 'M-x describe-font' to look them
|
|
||||||
;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
|
|
||||||
;; refresh your font settings. If Emacs still can't find your font, it likely
|
|
||||||
;; wasn't installed correctly. Font issues are rarely Doom issues!
|
|
||||||
|
|
||||||
;; There are two ways to load a theme. Both assume the theme is installed and
|
|
||||||
;; available. You can either set `doom-theme' or manually load a theme with the
|
|
||||||
;; `load-theme' function. This is the default:
|
|
||||||
;; other doom's official themes:
|
|
||||||
;; https://github.com/doomemacs/themes
|
|
||||||
(setq doom-theme 'doom-dracula) ;; doom-one doom-dracula doom-nord
|
|
||||||
(if (eq system-type 'darwin)
|
|
||||||
;; Transparent Backgroud - for macOS
|
|
||||||
;;(set-frame-parameter (selected-frame) 'alpha '(<active> . <inactive>))
|
|
||||||
;;(set-frame-parameter (selected-frame) 'alpha <both>)
|
|
||||||
(progn
|
|
||||||
(set-frame-parameter (selected-frame) 'alpha '(85 . 70))
|
|
||||||
(add-to-list 'default-frame-alist '(alpha . (85 . 70))))
|
|
||||||
;; Transparent Background - for Linux Xorg/Wayland
|
|
||||||
(set-frame-parameter nil 'alpha-background 93) ; For current frame
|
|
||||||
(add-to-list 'default-frame-alist '(alpha-background . 93))); For all new frames henceforth
|
|
||||||
|
|
||||||
;; This determines the style of line numbers in effect. If set to `nil', line
|
|
||||||
;; numbers are disabled. For relative line numbers, set this to `relative'.
|
|
||||||
(setq display-line-numbers-type t)
|
|
||||||
(setq warning-minimum-level :error)
|
|
||||||
;; If you use `org' and don't want your org files in the default location below,
|
|
||||||
;; change `org-directory'. It must be set before org loads!
|
|
||||||
(setq org-directory "~/org/")
|
|
||||||
;; Whenever you reconfigure a package, make sure to wrap your config in an
|
|
||||||
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
|
|
||||||
;;
|
|
||||||
;; (after! PACKAGE
|
|
||||||
;; (setq x y))
|
|
||||||
;;
|
|
||||||
;; The exceptions to this rule:
|
|
||||||
;;
|
|
||||||
;; - Setting file/directory variables (like `org-directory')
|
|
||||||
;; - Setting variables which explicitly tell you to set them before their
|
|
||||||
;; package is loaded (see 'C-h v VARIABLE' to look up their documentation).
|
|
||||||
;; - Setting doom variables (which start with 'doom-' or '+').
|
|
||||||
;;
|
|
||||||
;; Here are some additional functions/macros that will help you configure Doom.
|
|
||||||
;;
|
|
||||||
;; - `load!' for loading external *.el files relative to this one
|
|
||||||
;; - `use-package!' for configuring packages
|
|
||||||
;; - `after!' for running code after a package has loaded
|
|
||||||
;; - `add-load-path!' for adding directories to the `load-path', relative to
|
|
||||||
;; this file. Emacs searches the `load-path' when you load packages with
|
|
||||||
;; `require' or `use-package'.
|
|
||||||
;; - `map!' for binding new keys
|
|
||||||
;;
|
|
||||||
;; To get information about any of these functions/macros, move the cursor over
|
|
||||||
;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
|
|
||||||
;; This will open documentation for it, including demos of how they are used.
|
|
||||||
;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces,
|
|
||||||
;; etc).
|
|
||||||
;;
|
|
||||||
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
|
|
||||||
;; they are implemented.
|
|
||||||
|
|
||||||
;; use alejandra to format nix files
|
|
||||||
(use-package! lsp-nix
|
|
||||||
:ensure lsp-mode
|
|
||||||
:after
|
|
||||||
(lsp-mode)
|
|
||||||
:demand t
|
|
||||||
:custom
|
|
||||||
(lsp-nix-nil-formatter
|
|
||||||
["alejandra"]))
|
|
||||||
|
|
||||||
(use-package! nushell-mode
|
|
||||||
:config
|
|
||||||
(setq nushell-enable-auto-indent 1))
|
|
||||||
(after! vterm
|
|
||||||
(setq vterm-shell "nu")) ; use nushell by defualt
|
|
||||||
|
|
||||||
;; emacs-rime
|
|
||||||
(use-package! rime
|
|
||||||
:custom
|
|
||||||
(default-input-method "rime")
|
|
||||||
(rime-librime-root "~/.local/share/emacs/librime"))
|
|
||||||
|
|
||||||
;; use parinfer for lisp editing
|
|
||||||
(use-package! parinfer-rust-mode
|
|
||||||
:hook ((emacs-lisp-mode
|
|
||||||
clojure-mode
|
|
||||||
scheme-mode
|
|
||||||
lisp-mode
|
|
||||||
racket-mode
|
|
||||||
fennel-mode
|
|
||||||
hy-mode) . parinfer-rust-mode)
|
|
||||||
:init
|
|
||||||
;; parinfer-rust library do not provide a apple silicon binary.
|
|
||||||
;; fix: https://github.com/doomemacs/doomemacs/issues/6163
|
|
||||||
(setq parinfer-rust-auto-download 0)
|
|
||||||
;; we need to download it manually and put it in this path
|
|
||||||
(setq parinfer-rust-library "~/.local/share/emacs/parinfer-rust/parinfer-rust.so")
|
|
||||||
:config
|
|
||||||
(map! :map parinfer-rust-mode-map
|
|
||||||
:localleader
|
|
||||||
"p" #'parinfer-rust-switch-mode
|
|
||||||
"P" #'parinfer-rust-toggle-disable))
|
|
||||||
|
|
||||||
;; disable smatparens-mode here to void conflict with parinfer
|
|
||||||
;; https://discourse.doomemacs.org/t/disable-smartparens-or-parenthesis-completion/134
|
|
||||||
(add-hook 'clojure-mode-hook #'turn-off-smartparens-mode)
|
|
||||||
(add-hook 'scheme-mode-hook #'turn-off-smartparens-mode)
|
|
||||||
(add-hook 'lisp-mode-hook #'turn-off-smartparens-mode)
|
|
||||||
(add-hook 'racket-mode-hook #'turn-off-smartparens-mode)
|
|
||||||
(add-hook 'fennel-mode-hook #'turn-off-smartparens-mode)
|
|
||||||
(add-hook 'hy-mode-hook #'turn-off-smartparens-mode)
|
|
||||||
|
|
||||||
;; auto-save
|
|
||||||
(use-package super-save
|
|
||||||
:ensure t
|
|
||||||
:config
|
|
||||||
(super-save-mode +1)
|
|
||||||
(setq super-save-auto-save-when-idle t)
|
|
||||||
(setq auto-save-default nil))
|
|
||||||
|
|
||||||
;; save on find-file
|
|
||||||
(add-to-list 'super-save-hook-triggers 'find-file-hook)
|
|
||||||
|
|
||||||
(use-package! copilot
|
|
||||||
:hook
|
|
||||||
(prog-mode . copilot-mode)
|
|
||||||
:bind
|
|
||||||
(:map copilot-completion-map
|
|
||||||
("<tab>" . 'copilot-accept-completion)
|
|
||||||
("TAB" . 'copilot-accept-completion)
|
|
||||||
("C-TAB" . 'copilot-accept-completion-by-word)
|
|
||||||
("C-<tab>" . 'copilot-accept-completion-by-word))
|
|
||||||
:config
|
|
||||||
(copilot-mode +1))
|
|
||||||
|
|
||||||
(use-package! wakatime-mode :ensure t)
|
|
||||||
|
|
||||||
@@ -1,211 +0,0 @@
|
|||||||
;;; init.el -*- lexical-binding: t; -*-
|
|
||||||
|
|
||||||
;; This file controls what Doom modules are enabled and what order they load
|
|
||||||
;; in. Remember to run 'doom sync' after modifying it!
|
|
||||||
|
|
||||||
;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
|
|
||||||
;; documentation. There you'll find a link to Doom's Module Index where all
|
|
||||||
;; of our modules are listed, including what flags they support.
|
|
||||||
|
|
||||||
;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
|
|
||||||
;; 'C-c c k' for non-vim users) to view its documentation. This works on
|
|
||||||
;; flags as well (those symbols that start with a plus).
|
|
||||||
;;
|
|
||||||
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
|
|
||||||
;; directory (for easy access to its source code).
|
|
||||||
|
|
||||||
|
|
||||||
(doom! :input
|
|
||||||
;;bidi ; (tfel ot) thgir etirw uoy gnipleh
|
|
||||||
chinese
|
|
||||||
;;japanese
|
|
||||||
;;layout ; auie,ctsrnm is the superior home row
|
|
||||||
|
|
||||||
:completion
|
|
||||||
;; (company +childframe) ; conflict with lsp-bridge
|
|
||||||
; the ultimate code completion backend
|
|
||||||
;;helm ; the *other* search engine for love and life
|
|
||||||
;;ido ; the other *other* search engine...
|
|
||||||
;;ivy ; a search engine for love and life
|
|
||||||
vertico ; the search engine of the future
|
|
||||||
|
|
||||||
:ui
|
|
||||||
;;deft ; notational velocity for Emacs
|
|
||||||
doom ; what makes DOOM look the way it does
|
|
||||||
doom-dashboard ; a nifty splash screen for Emacs
|
|
||||||
;;doom-quit ; DOOM quit-message prompts when you quit Emacs
|
|
||||||
;; (emoji +unicode) ; Emacs 29 provides native support for inserting Unicode emojis.
|
|
||||||
; 🙂
|
|
||||||
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
|
|
||||||
indent-guides ; highlighted indent columns
|
|
||||||
ligatures ; ligatures and symbols to make your code pretty again
|
|
||||||
modeline ; snazzy, Atom-inspired modeline, plus API
|
|
||||||
ophints ; highlight the region an operation acts on
|
|
||||||
(popup +defaults)
|
|
||||||
; tame sudden yet inevitable temporary windows
|
|
||||||
tabs ; a tab bar for Emacs
|
|
||||||
treemacs ; a project drawer, like neotree but cooler
|
|
||||||
unicode ; extended unicode support for various languages
|
|
||||||
(vc-gutter +pretty)
|
|
||||||
; vcs diff in the fringe
|
|
||||||
vi-tilde-fringe ; fringe tildes to mark beyond EOB
|
|
||||||
;;window-select ; visually switch windows
|
|
||||||
workspaces ; tab emulation, persistence & separate workspaces
|
|
||||||
;;zen ; distraction-free coding or writing
|
|
||||||
|
|
||||||
:editor
|
|
||||||
(evil +everywhere)
|
|
||||||
; come to the dark side, we have cookies
|
|
||||||
file-templates ; auto-snippets for empty files
|
|
||||||
fold ; (nigh) universal code folding
|
|
||||||
(format +onsave)
|
|
||||||
; automated prettiness
|
|
||||||
;; multiple-cursors ; editing in many places at once
|
|
||||||
;; objed ; text object editing for the innocent, conflict with parinfer
|
|
||||||
parinfer ; turn lisp into python, sort of, conflict with copilot/objed/smartparens
|
|
||||||
;;rotate-text ; cycle region at point between text candidates
|
|
||||||
snippets ; my elves. They type so I don't have to
|
|
||||||
word-wrap ; soft wrapping with language-aware indent
|
|
||||||
|
|
||||||
:emacs
|
|
||||||
dired ; making dired pretty [functional]
|
|
||||||
electric ; smarter, keyword-based electric-indent
|
|
||||||
ibuffer ; interactive buffer management
|
|
||||||
undo ; persistent, smarter undo for your inevitable mistakes
|
|
||||||
vc ; version-control and Emacs, sitting in a tree
|
|
||||||
|
|
||||||
:term
|
|
||||||
;;eshell ; the elisp shell that works everywhere
|
|
||||||
;;shell ; simple shell REPL for Emacs
|
|
||||||
;;term ; basic terminal emulator for Emacs
|
|
||||||
vterm ; the best terminal emulation in Emacs
|
|
||||||
|
|
||||||
:checkers
|
|
||||||
syntax ; tasing you for every semicolon you forget
|
|
||||||
(spell +flyspell)
|
|
||||||
; tasing you for misspelling mispelling
|
|
||||||
grammar ; tasing grammar mistake every you make
|
|
||||||
|
|
||||||
:tools
|
|
||||||
;;ansible
|
|
||||||
;;biblio ; Writes a PhD for you (citation needed)
|
|
||||||
;;collab ; buffers with friends
|
|
||||||
;;debugger ; FIXME stepping through code, to help you add bugs
|
|
||||||
;;direnv
|
|
||||||
(docker)
|
|
||||||
editorconfig ; let someone else argue about tabs vs spaces
|
|
||||||
;;ein ; tame Jupyter notebooks with emacs
|
|
||||||
(eval +overlay)
|
|
||||||
; run code, run (also, repls)
|
|
||||||
lookup ; navigate your code and its documentation
|
|
||||||
lsp ; lsp-mode, conflict with lsp-bridge
|
|
||||||
magit ; a git porcelain for Emacs
|
|
||||||
;;make ; run make tasks from Emacs
|
|
||||||
;;pass ; password manager for nerds
|
|
||||||
pdf ; pdf enhancements
|
|
||||||
;;prodigy ; FIXME managing external services & code builders
|
|
||||||
(terraform)
|
|
||||||
; infrastructure as code
|
|
||||||
tree-sitter ; syntax and parsing, sitting in a tree...
|
|
||||||
;;upload ; map local to remote projects via ssh/ftp
|
|
||||||
|
|
||||||
:os
|
|
||||||
(:if IS-MAC macos)
|
|
||||||
; improve compatibility with macOS
|
|
||||||
tty ; improve the terminal Emacs experience
|
|
||||||
|
|
||||||
:lang
|
|
||||||
;;agda ; types of types of types of types...
|
|
||||||
;;beancount ; mind the GAAP
|
|
||||||
(cc +lsp +tree-sitter)
|
|
||||||
; C > C++ == 1
|
|
||||||
;;clojure ; java with a lisp
|
|
||||||
;;common-lisp ; if you've seen one lisp, you've seen them all
|
|
||||||
;;coq ; proofs-as-programs
|
|
||||||
;;crystal ; ruby at the speed of c
|
|
||||||
;;csharp ; unity, .NET, and mono shenanigans
|
|
||||||
data ; config/data formats
|
|
||||||
;;(dart +flutter) ; paint ui and not much else
|
|
||||||
;;dhall
|
|
||||||
;;elixir ; erlang done right
|
|
||||||
;;elm ; care for a cup of TEA?
|
|
||||||
emacs-lisp ; drown in parentheses
|
|
||||||
;;erlang ; an elegant language for a more civilized age
|
|
||||||
;;ess ; emacs speaks statistics
|
|
||||||
;;factor
|
|
||||||
;;faust ; dsp, but you get to keep your soul
|
|
||||||
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
|
|
||||||
;;fsharp ; ML stands for Microsoft's Language
|
|
||||||
;;fstar ; (dependent) types and (monadic) effects and Z3
|
|
||||||
;;gdscript ; the language you waited for
|
|
||||||
(go +lsp +tree-sitter) ;; disable go-mode, use lsp-bridge instead
|
|
||||||
; the hipster dialect
|
|
||||||
;;(graphql) ; Give queries a REST
|
|
||||||
;;(haskell) ; a language that's lazier than I am
|
|
||||||
;;hy ; readability of scheme w/ speed of python
|
|
||||||
;;idris ; a language you can depend on
|
|
||||||
(json +lsp +tree-sitter)
|
|
||||||
; At least it ain't XML
|
|
||||||
(java +lsp +tree-sitter)
|
|
||||||
; the poster child for carpal tunnel syndrome
|
|
||||||
(javascript +lsp +tree-sitter)
|
|
||||||
; all(hope(abandon(ye(who(enter(here))))))
|
|
||||||
;;julia ; a better, faster MATLAB
|
|
||||||
;;kotlin ; a better, slicker Java(Script)
|
|
||||||
(latex)
|
|
||||||
; writing papers in Emacs has never been so fun
|
|
||||||
;;lean ; for folks with too much to prove
|
|
||||||
;;ledger ; be audit you can be
|
|
||||||
(lua +lsp +tree-sitter)
|
|
||||||
; one-based indices? one-based indices
|
|
||||||
(markdown +grip)
|
|
||||||
; writing docs for people to ignore
|
|
||||||
;;nim ; python + lisp at the speed of c
|
|
||||||
(nix +lsp +tree-sitter)
|
|
||||||
; I hereby declare "nix geht mehr!"
|
|
||||||
;;ocaml ; an objective camel
|
|
||||||
(org +pandoc +hugo +jupyter) ; organize your plain life in plain text
|
|
||||||
;;php ; perl's insecure younger brother
|
|
||||||
;;plantuml ; diagrams for confusing people more
|
|
||||||
;;purescript ; javascript, but functional
|
|
||||||
(python +lsp +tree-sitter +pyright)
|
|
||||||
; beautiful is better than ugly
|
|
||||||
;;qt ; the 'cutest' gui framework ever
|
|
||||||
racket ; a DSL for DSLs
|
|
||||||
;;raku ; the artist formerly known as perl6
|
|
||||||
;;rest ; Emacs as a REST client
|
|
||||||
;;rst ; ReST in peace
|
|
||||||
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
|
|
||||||
(rust +lsp +tree-sitter)
|
|
||||||
; Fe2O3.unwrap().unwrap().unwrap().unwrap()
|
|
||||||
;;scala ; java, but good
|
|
||||||
(scheme +guile)
|
|
||||||
; a fully conniving family of lisps
|
|
||||||
(sh +lsp +tree-sitter)
|
|
||||||
; she sells {ba,z,fi}sh shells on the C xor
|
|
||||||
;;sml
|
|
||||||
;;solidity ; do you need a blockchain? No.
|
|
||||||
;;swift ; who asked for emoji variables?
|
|
||||||
;;terra ; Earth and Moon in alignment for performance.
|
|
||||||
(web +lsp +tree-sitter)
|
|
||||||
; support for various web languages, including HTML5, CSS, SASS/SCSS, Pug/Jade/Slim, and more
|
|
||||||
(yaml +lsp +tree-sitter)
|
|
||||||
; JSON, but readable
|
|
||||||
;;zig ; C, but simpler
|
|
||||||
|
|
||||||
:email
|
|
||||||
;;(mu4e +org +gmail)
|
|
||||||
;;notmuch
|
|
||||||
;;(wanderlust +gmail)
|
|
||||||
|
|
||||||
:app
|
|
||||||
;;calendar
|
|
||||||
;;emms
|
|
||||||
;;everywhere ; *leave* Emacs!? You must be joking
|
|
||||||
;;irc ; how neckbeards socialize
|
|
||||||
;;(rss +org) ; emacs as an RSS reader
|
|
||||||
;;twitter ; twitter client https://twitter.com/vnought
|
|
||||||
|
|
||||||
:config
|
|
||||||
;;literate
|
|
||||||
(default +bindings +smartparens))
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
;; -*- no-byte-compile: t; -*-
|
|
||||||
;;; $DOOMDIR/packages.el
|
|
||||||
|
|
||||||
;; To install a package with Doom you must declare them here and run 'doom sync'
|
|
||||||
;; on the command line, then restart Emacs for the changes to take effect -- or
|
|
||||||
;; use 'M-x doom/reload'.
|
|
||||||
|
|
||||||
(package! super-save)
|
|
||||||
(package! rime)
|
|
||||||
(package! wakatime-mode
|
|
||||||
:recipe
|
|
||||||
(:host github :repo "wakatime/wakatime-mode" :files
|
|
||||||
("*.el" "dist")))
|
|
||||||
|
|
||||||
(package! nushell-mode :recipe
|
|
||||||
(:host github :repo "mrkkrp/nushell-mode"))
|
|
||||||
|
|
||||||
(package! copilot
|
|
||||||
:recipe
|
|
||||||
(:host github :repo "copilot-emacs/copilot.el" :files
|
|
||||||
("*.el" "dist")))
|
|
||||||
|
|
||||||
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
|
|
||||||
;; (package! some-package)
|
|
||||||
|
|
||||||
;; To install a package directly from a remote git repo, you must specify a
|
|
||||||
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
|
|
||||||
;; https://github.com/radian-software/straight.el#the-recipe-format
|
|
||||||
;; (package! another-package
|
|
||||||
;; :recipe (:host github :repo "username/repo"))
|
|
||||||
|
|
||||||
;; If the package you are trying to install does not contain a PACKAGENAME.el
|
|
||||||
;; file, or is located in a subdirectory of the repo, you'll need to specify
|
|
||||||
;; `:files' in the `:recipe':
|
|
||||||
;; (package! this-package
|
|
||||||
;; :recipe (:host github :repo "username/repo"
|
|
||||||
;; :files ("some-file.el" "src/lisp/*.el")))
|
|
||||||
|
|
||||||
;; If you'd like to disable a package included with Doom, you can do so here
|
|
||||||
;; with the `:disable' property:
|
|
||||||
;; (package! builtin-package :disable t)
|
|
||||||
|
|
||||||
;; You can override the recipe of a built in package without having to specify
|
|
||||||
;; all the properties for `:recipe'. These will inherit the rest of its recipe
|
|
||||||
;; from Doom or MELPA/ELPA/Emacsmirror:
|
|
||||||
;; (package! builtin-package :recipe (:nonrecursive t))
|
|
||||||
;; (package! builtin-package-2 :recipe (:repo "myfork/package"))
|
|
||||||
|
|
||||||
;; Specify a `:branch' to install a package from a particular branch or tag.
|
|
||||||
;; This is required for some packages whose default branch isn't 'master' (which
|
|
||||||
;; our package manager can't deal with; see radian-software/straight.el#279)
|
|
||||||
;; (package! builtin-package :recipe (:branch "develop"))
|
|
||||||
|
|
||||||
;; Use `:pin' to specify a particular commit to install.
|
|
||||||
;; (package! builtin-package :pin "1a2b3c4d5e")
|
|
||||||
|
|
||||||
|
|
||||||
;; Doom's packages are pinned to a specific commit and updated from release to
|
|
||||||
;; release. The `unpin!' macro allows you to unpin single packages...
|
|
||||||
;; (unpin! pinned-package)
|
|
||||||
;; ...or multiple packages
|
|
||||||
;; (unpin! pinned-package another-pinned-package)
|
|
||||||
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
|
|
||||||
;; (unpin! t)
|
|
||||||
@@ -15,10 +15,11 @@ let
|
|||||||
v = "nvim";
|
v = "nvim";
|
||||||
vdiff = "nvim -d";
|
vdiff = "nvim -d";
|
||||||
};
|
};
|
||||||
|
# the path to nvim directory
|
||||||
|
# to make this symlink work, we need to git clone this repo to your home directory.
|
||||||
|
configPath = "${config.home.homeDirectory}/nix-config/home/base/tui/editors/neovim/nvim";
|
||||||
in {
|
in {
|
||||||
home.activation.installAstroNvim = lib.hm.dag.entryAfter ["writeBoundary"] ''
|
xdg.configFile."nvim".source = config.lib.file.mkOutOfStoreSymlink configPath;
|
||||||
${pkgs.rsync}/bin/rsync -avz --chmod=D2755,F744 ${./nvim}/ ${config.xdg.configHome}/nvim/
|
|
||||||
'';
|
|
||||||
|
|
||||||
home.shellAliases = shellAliases;
|
home.shellAliases = shellAliases;
|
||||||
programs.nushell.shellAliases = shellAliases;
|
programs.nushell.shellAliases = shellAliases;
|
||||||
@@ -28,7 +29,7 @@ in {
|
|||||||
enable = true;
|
enable = true;
|
||||||
package = pkgs-unstable.neovim-unwrapped;
|
package = pkgs-unstable.neovim-unwrapped;
|
||||||
|
|
||||||
defaultEditor = true;
|
# defaultEditor = true; # set EDITOR at system-wide level
|
||||||
viAlias = true;
|
viAlias = true;
|
||||||
vimAlias = true;
|
vimAlias = true;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,105 @@
|
|||||||
|
{
|
||||||
|
"AstroNvim": { "branch": "main", "commit": "c5e610f614e74c9dd9bf11760c4d0ad2c98c0abe" },
|
||||||
|
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
|
||||||
|
"LuaSnip": { "branch": "master", "commit": "458560534a73f7f8d7a11a146c801db00b081df0" },
|
||||||
|
"SchemaStore.nvim": { "branch": "main", "commit": "6c52c57432280c54596feb0c0958e1a6cb546f4d" },
|
||||||
|
"aerial.nvim": { "branch": "master", "commit": "3284a2cb858ba009c79da87d5e010ccee3c99c4d" },
|
||||||
|
"alpha-nvim": { "branch": "main", "commit": "de72250e054e5e691b9736ee30db72c65d560771" },
|
||||||
|
"astrocommunity": { "branch": "main", "commit": "16231a665146b0fe70593dd450afd6e964a3cbe1" },
|
||||||
|
"astrocore": { "branch": "main", "commit": "44a3dc0bf1591022b2a6bc89dccdfac1be17bec9" },
|
||||||
|
"astrolsp": { "branch": "main", "commit": "909fbe64f3f87d089ff3777751261544557117cc" },
|
||||||
|
"astrotheme": { "branch": "main", "commit": "f12dcf64b1f9a05839c3ac2146f550f43bae9dab" },
|
||||||
|
"astroui": { "branch": "main", "commit": "e923a84c488d879a260fc9cfb2dc27dd870fb6ac" },
|
||||||
|
"autosave.nvim": { "branch": "main", "commit": "348f72cf0241e3e736e3396c4834def2f8ef8d10" },
|
||||||
|
"avante.nvim": { "branch": "main", "commit": "bc403ddcbf98c4181ee2a7efd35cd1e18a2fdc5c" },
|
||||||
|
"catppuccin": { "branch": "main", "commit": "a0c769bc7cd04bbbf258b3d5f01e2bdce744108d" },
|
||||||
|
"clangd_extensions.nvim": { "branch": "main", "commit": "db28f29be928d18cbfb86fbfb9f83f584f658feb" },
|
||||||
|
"cmake-tools.nvim": { "branch": "master", "commit": "591ae37fc5494677e929118f0a182d2b61fe1af1" },
|
||||||
|
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
|
||||||
|
"cmp-conjure": { "branch": "master", "commit": "8c9a88efedc0e5bf3165baa6af8a407afe29daf6" },
|
||||||
|
"cmp-dap": { "branch": "master", "commit": "ea92773e84c0ad3288c3bc5e452ac91559669087" },
|
||||||
|
"cmp-nvim-lsp": { "branch": "main", "commit": "99290b3ec1322070bcfb9e846450a46f6efa50f0" },
|
||||||
|
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
|
||||||
|
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
|
||||||
|
"conjure": { "branch": "main", "commit": "83c6394f916197d73f2a19538bd5615e08842d10" },
|
||||||
|
"crates.nvim": { "branch": "main", "commit": "5d8b1bef686db0fabe5f1bb593744b617e8f1405" },
|
||||||
|
"deno-nvim": { "branch": "master", "commit": "5a2f9205df5539c4a0696e73893bf8d1b0cae406" },
|
||||||
|
"dressing.nvim": { "branch": "master", "commit": "3a45525bb182730fe462325c99395529308f431e" },
|
||||||
|
"flash.nvim": { "branch": "main", "commit": "3c942666f115e2811e959eabbdd361a025db8b63" },
|
||||||
|
"flit.nvim": { "branch": "main", "commit": "1ef72de6a02458d31b10039372c8a15ab8989e0d" },
|
||||||
|
"friendly-snippets": { "branch": "main", "commit": "efff286dd74c22f731cdec26a70b46e5b203c619" },
|
||||||
|
"fzf-lua": { "branch": "main", "commit": "3de691fafd097177d10ebffb91dec5bec2cb30ed" },
|
||||||
|
"gitsigns.nvim": { "branch": "main", "commit": "7010000889bfb6c26065e0b0f7f1e6aa9163edd9" },
|
||||||
|
"gopher.nvim": { "branch": "main", "commit": "9db5931af1293ae52500921d92c02145d86df02c" },
|
||||||
|
"goto-preview": { "branch": "main", "commit": "d1faf6ea992b5bcaaaf2c682e1aba3131a01143e" },
|
||||||
|
"guess-indent.nvim": { "branch": "main", "commit": "6cd61f7a600bb756e558627cd2e740302c58e32d" },
|
||||||
|
"heirline.nvim": { "branch": "master", "commit": "fae936abb5e0345b85c3a03ecf38525b0828b992" },
|
||||||
|
"indent-blankline.nvim": { "branch": "master", "commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba" },
|
||||||
|
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
|
||||||
|
"lazydev.nvim": { "branch": "main", "commit": "f59bd14a852ca43db38e3662395354cb2a9b13e0" },
|
||||||
|
"leap.nvim": { "branch": "main", "commit": "08ca7ec9e859856251d56c22ea107f82f563ff3c" },
|
||||||
|
"lsp_signature.nvim": { "branch": "master", "commit": "d50e40b3bf9324128e71b0b7e589765ce89466d2" },
|
||||||
|
"lspkind.nvim": { "branch": "master", "commit": "d79a1c3299ad0ef94e255d045bed9fa26025dab6" },
|
||||||
|
"luarocks.nvim": { "branch": "main", "commit": "1db9093915eb16ba2473cfb8d343ace5ee04130a" },
|
||||||
|
"markdown-preview.nvim": { "branch": "main", "commit": "462ce41af003f5cdadab856f3a42dc27e39b89c8" },
|
||||||
|
"mason-lspconfig.nvim": { "branch": "main", "commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245" },
|
||||||
|
"mason-null-ls.nvim": { "branch": "main", "commit": "2b8433f76598397fcc97318d410e0c4f7a4bea6a" },
|
||||||
|
"mason-nvim-dap.nvim": { "branch": "main", "commit": "4c2cdc69d69fe00c15ae8648f7e954d99e5de3ea" },
|
||||||
|
"mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" },
|
||||||
|
"mini.ai": { "branch": "main", "commit": "5225f16eacf4dce2cb7204ca345123ef54e209d6" },
|
||||||
|
"mini.bufremove": { "branch": "main", "commit": "285bdac9596ee7375db50c0f76ed04336dcd2685" },
|
||||||
|
"mini.surround": { "branch": "main", "commit": "f4307f935ad87cfe3e570dbaae485b35cce4e5ec" },
|
||||||
|
"neo-tree.nvim": { "branch": "main", "commit": "f481de16a0eb59c985abac8985e3f2e2f75b4875" },
|
||||||
|
"neoconf.nvim": { "branch": "main", "commit": "f630568a4d04154803886f21ca60923f12709f0f" },
|
||||||
|
"nfnl": { "branch": "main", "commit": "19cac83657514a0718b7af4a086d06bd73269b7a" },
|
||||||
|
"none-ls.nvim": { "branch": "main", "commit": "a117163db44c256d53c3be8717f3e1a2a28e6299" },
|
||||||
|
"nui.nvim": { "branch": "main", "commit": "a0fd35fcbb4cb479366f1dc5f20145fd718a3733" },
|
||||||
|
"nvim-autopairs": { "branch": "master", "commit": "68f0e5c3dab23261a945272032ee6700af86227a" },
|
||||||
|
"nvim-cmp": { "branch": "main", "commit": "1e1900b0769324a9675ef85b38f99cca29e203b3" },
|
||||||
|
"nvim-colorizer.lua": { "branch": "master", "commit": "517df88cf2afb36652830df2c655df2da416a0ae" },
|
||||||
|
"nvim-dap": { "branch": "master", "commit": "6a5bba0ddea5d419a783e170c20988046376090d" },
|
||||||
|
"nvim-dap-go": { "branch": "main", "commit": "8763ced35b19c8dc526e04a70ab07c34e11ad064" },
|
||||||
|
"nvim-dap-python": { "branch": "master", "commit": "261ce649d05bc455a29f9636dc03f8cdaa7e0e2c" },
|
||||||
|
"nvim-dap-ui": { "branch": "master", "commit": "bc81f8d3440aede116f821114547a476b082b319" },
|
||||||
|
"nvim-jdtls": { "branch": "master", "commit": "c23f200fee469a415c77265ca55b496feb646992" },
|
||||||
|
"nvim-lsp-file-operations": { "branch": "master", "commit": "9744b738183a5adca0f916527922078a965515ed" },
|
||||||
|
"nvim-lspconfig": { "branch": "master", "commit": "185b2af444b27d6541c02d662b5b68190e5cf0c4" },
|
||||||
|
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
|
||||||
|
"nvim-notify": { "branch": "master", "commit": "a3020c2cf4dfc4c4f390c4a21e84e35e46cf5d17" },
|
||||||
|
"nvim-scrollbar": { "branch": "main", "commit": "5b103ef0fd2e8b9b4be3878ed38d224522192c6c" },
|
||||||
|
"nvim-spectre": { "branch": "master", "commit": "72f56f7585903cd7bf92c665351aa585e150af0f" },
|
||||||
|
"nvim-spider": { "branch": "main", "commit": "99df646eab60df0b948dd2532ef5f5512707a9a4" },
|
||||||
|
"nvim-treesitter": { "branch": "master", "commit": "f8aaf5ce4e27cd20de917946b2ae5c968a2c2858" },
|
||||||
|
"nvim-treesitter-textobjects": { "branch": "master", "commit": "9937e5e356e5b227ec56d83d0a9d0a0f6bc9cad4" },
|
||||||
|
"nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" },
|
||||||
|
"nvim-ts-context-commentstring": { "branch": "main", "commit": "1b212c2eee76d787bbea6aa5e92a2b534e7b4f8f" },
|
||||||
|
"nvim-ufo": { "branch": "main", "commit": "61463090a4f55f5d080236ea62f09d1cd8976ff3" },
|
||||||
|
"nvim-vtsls": { "branch": "main", "commit": "60b493e641d3674c030c660cabe7a2a3f7a914be" },
|
||||||
|
"nvim-web-devicons": { "branch": "master", "commit": "4c3a5848ee0b09ecdea73adcd2a689190aeb728c" },
|
||||||
|
"nvim-window-picker": { "branch": "main", "commit": "6382540b2ae5de6c793d4aa2e3fe6dbb518505ec" },
|
||||||
|
"orgmode": { "branch": "master", "commit": "32ef9e95f43a6e951fb931b438372546a4f0c524" },
|
||||||
|
"package-info.nvim": { "branch": "master", "commit": "4f1b8287dde221153ec9f2acd46e8237d2d0881e" },
|
||||||
|
"parinfer-rust": { "branch": "master", "commit": "55bec1e3d4f127527c5c2e507fac96cc934aed6e" },
|
||||||
|
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
|
||||||
|
"presence.nvim": { "branch": "main", "commit": "87c857a56b7703f976d3a5ef15967d80508df6e6" },
|
||||||
|
"promise-async": { "branch": "main", "commit": "38a4575da9497326badd3995e768b4ccf0bb153e" },
|
||||||
|
"refactoring.nvim": { "branch": "master", "commit": "64dbe67bf7c28c864488262d267c799f80cae9ba" },
|
||||||
|
"render-markdown.nvim": { "branch": "main", "commit": "8debb17aab2fbbf3b341e46ac032d0a6f937d8c3" },
|
||||||
|
"resession.nvim": { "branch": "master", "commit": "cc819b0489938d03e4f3532a583354f0287c015b" },
|
||||||
|
"rustaceanvim": { "branch": "master", "commit": "5120207f90846704a74cbf043295698b009bd5de" },
|
||||||
|
"sentiment.nvim": { "branch": "main", "commit": "54a6db15b630eccfa98c32a76baf90f21c6f1e40" },
|
||||||
|
"smart-splits.nvim": { "branch": "master", "commit": "ddb23c1a1cf1507bda487cda7f6e4690965ef9f5" },
|
||||||
|
"telescope-fzf-native.nvim": { "branch": "main", "commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55" },
|
||||||
|
"telescope-undo.nvim": { "branch": "main", "commit": "928d0c2dc9606e01e2cc547196f48d2eaecf58e5" },
|
||||||
|
"telescope.nvim": { "branch": "0.1.x", "commit": "a17d611a0e111836a1db5295f04945df407c5135" },
|
||||||
|
"todo-comments.nvim": { "branch": "main", "commit": "ae0a2afb47cf7395dc400e5dc4e05274bf4fb9e0" },
|
||||||
|
"tree-sitter-nu": { "branch": "main", "commit": "d5c71a10b4d1b02e38967b05f8de70e847448dd1" },
|
||||||
|
"treesj": { "branch": "main", "commit": "3b4a2bc42738a63de17e7485d4cc5e49970ddbcc" },
|
||||||
|
"tsc.nvim": { "branch": "main", "commit": "8c1b4ec6a48d038a79ced8674cb15e7db6dd8ef0" },
|
||||||
|
"venv-selector.nvim": { "branch": "regexp", "commit": "c677caa1030808a9f90092e522de7cc20c1390dd" },
|
||||||
|
"vim-illuminate": { "branch": "master", "commit": "19cb21f513fc2b02f0c66be70107741e837516a1" },
|
||||||
|
"vim-repeat": { "branch": "master", "commit": "65846025c15494983dafe5e3b46c8f88ab2e9635" },
|
||||||
|
"vim-wakatime": { "branch": "master", "commit": "f39c4a201ae350aaba713b59d4a4fdd88e0811aa" },
|
||||||
|
"which-key.nvim": { "branch": "main", "commit": "fcbf4eea17cb299c02557d576f0d568878e354a4" },
|
||||||
|
"yanky.nvim": { "branch": "main", "commit": "04775cc6e10ef038c397c407bc17f00a2f52b378" }
|
||||||
|
}
|
||||||
@@ -13,8 +13,6 @@ return {
|
|||||||
-- Highly experimental plugin that completely replaces
|
-- Highly experimental plugin that completely replaces
|
||||||
-- the UI for messages, cmdline and the popupmenu.
|
-- the UI for messages, cmdline and the popupmenu.
|
||||||
-- { import = "astrocommunity.utility.noice-nvim" },
|
-- { import = "astrocommunity.utility.noice-nvim" },
|
||||||
-- Fully featured & enhanced replacement for copilot.vim
|
|
||||||
-- <Tab> work with both auto completion in cmp and copilot
|
|
||||||
{ import = "astrocommunity.media.vim-wakatime" },
|
{ import = "astrocommunity.media.vim-wakatime" },
|
||||||
{ import = "astrocommunity.motion.leap-nvim" },
|
{ import = "astrocommunity.motion.leap-nvim" },
|
||||||
{ import = "astrocommunity.motion.flit-nvim" },
|
{ import = "astrocommunity.motion.flit-nvim" },
|
||||||
@@ -54,6 +52,4 @@ return {
|
|||||||
|
|
||||||
-- Lua implementation of CamelCaseMotion, with extra consideration of punctuation.
|
-- Lua implementation of CamelCaseMotion, with extra consideration of punctuation.
|
||||||
{ import = "astrocommunity.motion.nvim-spider" },
|
{ import = "astrocommunity.motion.nvim-spider" },
|
||||||
-- AI Assistant
|
|
||||||
{ import = "astrocommunity.completion.copilot-lua-cmp" },
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
require("lazy").setup({
|
require("lazy").setup({
|
||||||
{
|
{
|
||||||
"AstroNvim/AstroNvim",
|
"AstroNvim/AstroNvim",
|
||||||
version = "^4", -- Remove version tracking to elect for nighly AstroNvim
|
version = "^4", -- Remove version tracking to elect for nightly AstroNvim
|
||||||
import = "astronvim.plugins",
|
import = "astronvim.plugins",
|
||||||
opts = { -- AstroNvim options must be set here with the `import` key
|
opts = { -- AstroNvim options must be set here with the `import` key
|
||||||
mapleader = " ", -- This ensures the leader key must be configured before Lazy is set up
|
mapleader = " ", -- This ensures the leader key must be configured before Lazy is set up
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ return {
|
|||||||
"marksman", -- markdown ls
|
"marksman", -- markdown ls
|
||||||
"nickel_ls", -- nickel language server
|
"nickel_ls", -- nickel language server
|
||||||
"nil_ls", -- nix language server
|
"nil_ls", -- nix language server
|
||||||
"bufls", -- protocol buffer language server
|
"buf_ls", -- protocol buffer language server
|
||||||
"dockerls", -- dockerfile
|
"dockerls", -- dockerfile
|
||||||
"cmake", -- cmake language server
|
"cmake", -- cmake language server
|
||||||
"sqls", -- sql language server
|
"sqls", -- sql language server
|
||||||
@@ -64,7 +64,7 @@ return {
|
|||||||
"jdtls", -- java language server, provides only basic features
|
"jdtls", -- java language server, provides only basic features
|
||||||
"rust_analyzer", -- rust
|
"rust_analyzer", -- rust
|
||||||
"pyright", -- python
|
"pyright", -- python
|
||||||
"ruff_lsp", -- extremely fast Python linter and code transformation
|
"ruff", -- extremely fast Python linter and code transformation
|
||||||
-- "julials", -- julia language server
|
-- "julials", -- julia language server
|
||||||
-- "zls", -- zig language server
|
-- "zls", -- zig language server
|
||||||
"lua_ls", -- lua
|
"lua_ls", -- lua
|
||||||
|
|||||||
@@ -0,0 +1,97 @@
|
|||||||
|
local prefix = "<Leader>A"
|
||||||
|
return {
|
||||||
|
"yetone/avante.nvim",
|
||||||
|
event = "User AstroFile", -- load on file open because Avante manages it's own bindings
|
||||||
|
cmd = {
|
||||||
|
"AvanteAsk",
|
||||||
|
"AvanteBuild",
|
||||||
|
"AvanteEdit",
|
||||||
|
"AvanteRefresh",
|
||||||
|
"AvanteSwitchProvider",
|
||||||
|
"AvanteShowRepoMap",
|
||||||
|
"AvanteModels",
|
||||||
|
"AvanteChat",
|
||||||
|
"AvanteChatNew",
|
||||||
|
"AvanteToggle",
|
||||||
|
"AvanteClear",
|
||||||
|
"AvanteFocus",
|
||||||
|
"AvanteStop",
|
||||||
|
},
|
||||||
|
version = false, -- Never set this value to "*"! Never!
|
||||||
|
opts = {
|
||||||
|
provider = "deepseek_reasoner",
|
||||||
|
cursor_applying_provider = "deepseek_reasoner", -- In this example, use Groq for applying, but you can also use any provider you want.
|
||||||
|
behaviour = {
|
||||||
|
-- auto_suggestions = true,
|
||||||
|
enable_cursor_planning_mode = true, -- enable cursor planning mode!
|
||||||
|
},
|
||||||
|
-- WARNING: Since auto-suggestions are a high-frequency operation and therefore expensive,
|
||||||
|
-- currently designating it as `copilot` provider is dangerous because: https://github.com/yetone/avante.nvim/issues/1048
|
||||||
|
-- Of course, you can reduce the request frequency by increasing `suggestion.debounce`.
|
||||||
|
auto_suggestions_provider = "aliyun_qwen3",
|
||||||
|
suggestion = {
|
||||||
|
debounce = 750, -- wait for x ms before suggestion
|
||||||
|
throttle = 1200, -- wait for at least x ms before the next suggestion
|
||||||
|
},
|
||||||
|
|
||||||
|
ollama = {
|
||||||
|
endpoint = "http://192.168.5.100:11434", -- Note that there is no /v1 at the end.
|
||||||
|
model = "modelscope.cn/unsloth/Qwen3-30B-A3B-GGUF",
|
||||||
|
-- model = "modelscope.cn/unsloth/Qwen3-235B-A22B-GGUF",
|
||||||
|
},
|
||||||
|
vendors = {
|
||||||
|
deepseek_coder = {
|
||||||
|
__inherited_from = "openai",
|
||||||
|
api_key_name = "DEEPSEEK_API_KEY",
|
||||||
|
endpoint = "https://api.deepseek.com",
|
||||||
|
model = "deepseek-coder",
|
||||||
|
},
|
||||||
|
-- deepseek chat v3
|
||||||
|
deepseek_chat = {
|
||||||
|
__inherited_from = "openai",
|
||||||
|
api_key_name = "DEEPSEEK_API_KEY",
|
||||||
|
endpoint = "https://api.deepseek.com",
|
||||||
|
model = "deepseek-chat",
|
||||||
|
},
|
||||||
|
-- deepseek r1
|
||||||
|
deepseek_reasoner = {
|
||||||
|
__inherited_from = "openai",
|
||||||
|
api_key_name = "DEEPSEEK_API_KEY",
|
||||||
|
endpoint = "https://api.deepseek.com",
|
||||||
|
model = "deepseek-reasoner",
|
||||||
|
},
|
||||||
|
aliyun_qwen3 = {
|
||||||
|
__inherited_from = "openai",
|
||||||
|
api_key_name = "DASHSCOPE_API_KEY",
|
||||||
|
endpoint = "https://dashscope.aliyuncs.com/compatible-mode/v1",
|
||||||
|
-- model = "qwen-coder-plus-latest",
|
||||||
|
model = "qwen3-235b-a22b",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
-- if you want to build from source then do `make BUILD_FROM_SOURCE=true`
|
||||||
|
build = "make",
|
||||||
|
-- build = "powershell -ExecutionPolicy Bypass -File Build.ps1 -BuildFromSource false" -- for windows
|
||||||
|
dependencies = {
|
||||||
|
"nvim-treesitter/nvim-treesitter",
|
||||||
|
{ "stevearc/dressing.nvim", optional = true },
|
||||||
|
"nvim-lua/plenary.nvim",
|
||||||
|
"MunifTanjim/nui.nvim",
|
||||||
|
{ "AstroNvim/astrocore", opts = function(_, opts) opts.mappings.n[prefix] = { desc = " Avante" } end },
|
||||||
|
--- The below dependencies are optional,
|
||||||
|
-- "echasnovski/mini.pick", -- for file_selector provider mini.pick
|
||||||
|
"nvim-telescope/telescope.nvim", -- for file_selector provider telescope
|
||||||
|
"hrsh7th/nvim-cmp", -- autocompletion for avante commands and mentions
|
||||||
|
"ibhagwan/fzf-lua", -- for file_selector provider fzf
|
||||||
|
"nvim-tree/nvim-web-devicons", -- or echasnovski/mini.icons
|
||||||
|
-- "zbirenbaum/copilot.lua", -- for providers='copilot'
|
||||||
|
{
|
||||||
|
-- Make sure to set this up properly if you have lazy=true
|
||||||
|
"MeanderingProgrammer/render-markdown.nvim",
|
||||||
|
opts = {
|
||||||
|
file_types = { "markdown", "Avante" },
|
||||||
|
},
|
||||||
|
ft = { "markdown", "Avante" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
-- Custom copilot-lua to enable filetypes: markdown
|
|
||||||
return {
|
|
||||||
-- "zbirenbaum/copilot.lua",
|
|
||||||
|
|
||||||
-- Fix https://github.com/zbirenbaum/copilot.lua/pull/336
|
|
||||||
"ryan4yin/copilot.lua",
|
|
||||||
branch = "fix_issue_330",
|
|
||||||
opts = function(_, opts)
|
|
||||||
opts.filetypes = {
|
|
||||||
yaml = true,
|
|
||||||
markdown = true,
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
@@ -41,15 +41,15 @@ return {
|
|||||||
{ "max397574/better-escape.nvim", enabled = false },
|
{ "max397574/better-escape.nvim", enabled = false },
|
||||||
|
|
||||||
-- You can also easily customize additional setup of plugins that is outside of the plugin's setup call
|
-- You can also easily customize additional setup of plugins that is outside of the plugin's setup call
|
||||||
{
|
-- {
|
||||||
"L3MON4D3/LuaSnip",
|
-- "L3MON4D3/LuaSnip",
|
||||||
config = function(plugin, opts)
|
-- config = function(plugin, opts)
|
||||||
require "astronvim.plugins.configs.luasnip"(plugin, opts) -- include the default astronvim config that calls the setup call
|
-- require "astronvim.plugins.configs.luasnip"(plugin, opts) -- include the default astronvim config that calls the setup call
|
||||||
-- add more custom luasnip configuration such as filetype extend or custom snippets
|
-- -- add more custom luasnip configuration such as filetype extend or custom snippets
|
||||||
local luasnip = require "luasnip"
|
-- local luasnip = require "luasnip"
|
||||||
luasnip.filetype_extend("javascript", { "javascriptreact" })
|
-- luasnip.filetype_extend("javascript", { "javascriptreact" })
|
||||||
end,
|
-- end,
|
||||||
},
|
-- },
|
||||||
|
|
||||||
{
|
{
|
||||||
"windwp/nvim-autopairs",
|
"windwp/nvim-autopairs",
|
||||||
|
|||||||
@@ -3,12 +3,6 @@
|
|||||||
pkgs-unstable,
|
pkgs-unstable,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
nixpkgs.config = {
|
|
||||||
programs.npm.npmrc = ''
|
|
||||||
prefix = ''${HOME}/.npm-global
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
home.packages = with pkgs; (
|
home.packages = with pkgs; (
|
||||||
# -*- Data & Configuration Languages -*-#
|
# -*- Data & Configuration Languages -*-#
|
||||||
[
|
[
|
||||||
@@ -68,10 +62,10 @@
|
|||||||
|
|
||||||
#-- python
|
#-- python
|
||||||
pyright # python language server
|
pyright # python language server
|
||||||
(python311.withPackages (
|
(python313.withPackages (
|
||||||
ps:
|
ps:
|
||||||
with ps; [
|
with ps; [
|
||||||
ruff-lsp
|
ruff
|
||||||
black # python formatter
|
black # python formatter
|
||||||
# debugpy
|
# debugpy
|
||||||
|
|
||||||
@@ -83,15 +77,6 @@
|
|||||||
pyquery
|
pyquery
|
||||||
pyyaml
|
pyyaml
|
||||||
boto3
|
boto3
|
||||||
|
|
||||||
## emacs's lsp-bridge dependenciesge
|
|
||||||
# epc
|
|
||||||
# orjson
|
|
||||||
# sexpdata
|
|
||||||
# six
|
|
||||||
# setuptools
|
|
||||||
# paramiko
|
|
||||||
# rapidfuzz
|
|
||||||
]
|
]
|
||||||
))
|
))
|
||||||
|
|
||||||
@@ -142,16 +127,16 @@
|
|||||||
emmet-ls
|
emmet-ls
|
||||||
]
|
]
|
||||||
# -*- Lisp like Languages -*-#
|
# -*- Lisp like Languages -*-#
|
||||||
++ [
|
# ++ [
|
||||||
guile
|
# guile
|
||||||
racket-minimal
|
# racket-minimal
|
||||||
fnlfmt # fennel
|
# fnlfmt # fennel
|
||||||
(
|
# (
|
||||||
if pkgs.stdenv.isDarwin
|
# if pkgs.stdenv.isLinux && pkgs.stdenv.isx86
|
||||||
then pkgs.emptyDirectory
|
# then pkgs-unstable.akkuPackages.scheme-langserver
|
||||||
else pkgs-unstable.akkuPackages.scheme-langserver
|
# else pkgs.emptyDirectory
|
||||||
)
|
# )
|
||||||
]
|
# ]
|
||||||
++ [
|
++ [
|
||||||
proselint # English prose linter
|
proselint # English prose linter
|
||||||
|
|
||||||
|
|||||||
@@ -96,8 +96,8 @@ Key management is the core of OpenPGP standard / GnuPG.
|
|||||||
|
|
||||||
GnuPG uses public-key cryptography so that users may communicate securely. In a public-key system,
|
GnuPG uses public-key cryptography so that users may communicate securely. In a public-key system,
|
||||||
each user has a pair of keys consisting of a private key and a public key. **A user's private key is
|
each user has a pair of keys consisting of a private key and a public key. **A user's private key is
|
||||||
kept secret; it need **never be revealed. The public key may be given to anyone with whom the user
|
kept secret; it need NEVER be revealed. The public key may be given to anyone with whom the user
|
||||||
wants to communicate\*\*. GnuPG uses a somewhat more sophisticated scheme in which a user has a
|
wants to communicate**. GnuPG uses a somewhat more sophisticated scheme in which a user has a
|
||||||
primary keypair and then zero or more additional subordinate keypairs. The primary and subordinate
|
primary keypair and then zero or more additional subordinate keypairs. The primary and subordinate
|
||||||
keypairs are bundled to facilitate key management and the bundle can often be considered simply as
|
keypairs are bundled to facilitate key management and the bundle can often be considered simply as
|
||||||
one keypair, or a keyring/keychain(which contains multiple sub key-pairs).
|
one keypair, or a keyring/keychain(which contains multiple sub key-pairs).
|
||||||
@@ -229,9 +229,9 @@ The **best practice** is:
|
|||||||
backup it to somewhere else, and import it to another machine to use your keypair.
|
backup it to somewhere else, and import it to another machine to use your keypair.
|
||||||
5. Backup your Primary key's revocation certificate to somewhere safe, it's the last way to rescure
|
5. Backup your Primary key's revocation certificate to somewhere safe, it's the last way to rescure
|
||||||
your safety if your primary key is compromised!
|
your safety if your primary key is compromised!
|
||||||
6. It's a big problem if your revocation certificate is compromised, but not the bigest one. because
|
6. It's a big problem if your revocation certificate is compromised, but not the biggest one.
|
||||||
it's only used to revoke your keypair, your data is still safe. But you should generate a new
|
because it's only used to revoke your keypair, your data is still safe. But you should generate a
|
||||||
keypair and revoke the old one immediately.
|
new keypair and revoke the old one immediately.
|
||||||
7. It will be a big problem if your primary key is compromised, and you don't have a revocation
|
7. It will be a big problem if your primary key is compromised, and you don't have a revocation
|
||||||
certificate to revoke it. But since OpenPGP do not have a good way to distribute revocation
|
certificate to revoke it. But since OpenPGP do not have a good way to distribute revocation
|
||||||
certificate, even you have a revocation certificate, it's still hard to distribute it to
|
certificate, even you have a revocation certificate, it's still hard to distribute it to
|
||||||
@@ -628,7 +628,7 @@ uid [ultimate] test <test@test.t>
|
|||||||
sub cv25519/0x9E78E897B6490D6B 2024-01-09 [E]
|
sub cv25519/0x9E78E897B6490D6B 2024-01-09 [E]
|
||||||
|
|
||||||
# encrypt some file before revoke the keypair
|
# encrypt some file before revoke the keypair
|
||||||
› gpg -aer test@test.t README.md > README.md.asc
|
› gpg -are test@test.t README.md > README.md.asc
|
||||||
|
|
||||||
# try to decrypt the file, it should works
|
# try to decrypt the file, it should works
|
||||||
› gpg -d README.md.asc
|
› gpg -d README.md.asc
|
||||||
@@ -695,7 +695,7 @@ gpg: reason for revocation: No reason specified
|
|||||||
# ......
|
# ......
|
||||||
|
|
||||||
# try to encrypt some file via the revoked key, it will fail.
|
# try to encrypt some file via the revoked key, it will fail.
|
||||||
› gpg -aer 9E78E897B6490D6B README.md
|
› gpg -are 9E78E897B6490D6B README.md
|
||||||
gpg: 9E78E897B6490D6B: skipped: Unusable public key
|
gpg: 9E78E897B6490D6B: skipped: Unusable public key
|
||||||
gpg: README.md: encryption failed: Unusable public key
|
gpg: README.md: encryption failed: Unusable public key
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ in {
|
|||||||
"C2A313F98166C942" # S - Ryan Yin (For pass & ssh only) <ryan4yin@linux.com>
|
"C2A313F98166C942" # S - Ryan Yin (For pass & ssh only) <ryan4yin@linux.com>
|
||||||
];
|
];
|
||||||
PASSWORD_STORE_CLIP_TIME = "60";
|
PASSWORD_STORE_CLIP_TIME = "60";
|
||||||
PASSWORD_STORE_GENERATED_LENGTH = "15";
|
PASSWORD_STORE_GENERATED_LENGTH = "12";
|
||||||
PASSWORD_STORE_ENABLE_EXTENSIONS = "true";
|
PASSWORD_STORE_ENABLE_EXTENSIONS = "true";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
+32
-24
@@ -1,18 +1,10 @@
|
|||||||
{pkgs-unstable, ...}: let
|
{
|
||||||
|
config,
|
||||||
|
pkgs-unstable,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
inherit (pkgs-unstable) nu_scripts;
|
inherit (pkgs-unstable) nu_scripts;
|
||||||
in {
|
in {
|
||||||
programs.bash = {
|
|
||||||
# load the alias file for work
|
|
||||||
bashrcExtra = ''
|
|
||||||
alias_for_work=/etc/agenix/alias-for-work.bash
|
|
||||||
if [ -f $alias_for_work ]; then
|
|
||||||
. $alias_for_work
|
|
||||||
else
|
|
||||||
echo "No alias file found for work"
|
|
||||||
fi
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.nushell = {
|
programs.nushell = {
|
||||||
# load the alias file for work
|
# load the alias file for work
|
||||||
# the file must exist, otherwise nushell will complain about it!
|
# the file must exist, otherwise nushell will complain about it!
|
||||||
@@ -21,19 +13,35 @@ in {
|
|||||||
# https://github.com/nushell/nushell/issues/8214
|
# https://github.com/nushell/nushell/issues/8214
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
source /etc/agenix/alias-for-work.nushell
|
source /etc/agenix/alias-for-work.nushell
|
||||||
|
|
||||||
|
# Directories in this constant are searched by the
|
||||||
|
# `use` and `source` commands.
|
||||||
|
const NU_LIB_DIRS = $NU_LIB_DIRS ++ ['${nu_scripts}/share/nu_scripts']
|
||||||
|
|
||||||
# completion
|
# completion
|
||||||
use ${nu_scripts}/share/nu_scripts/custom-completions/git/git-completions.nu *
|
use custom-completions/cargo/cargo-completions.nu *
|
||||||
use ${nu_scripts}/share/nu_scripts/custom-completions/glow/glow-completions.nu *
|
use custom-completions/curl/curl-completions.nu *
|
||||||
use ${nu_scripts}/share/nu_scripts/custom-completions/just/just-completions.nu *
|
use custom-completions/git/git-completions.nu *
|
||||||
use ${nu_scripts}/share/nu_scripts/custom-completions/make/make-completions.nu *
|
use custom-completions/glow/glow-completions.nu *
|
||||||
use ${nu_scripts}/share/nu_scripts/custom-completions/man/man-completions.nu *
|
use custom-completions/just/just-completions.nu *
|
||||||
use ${nu_scripts}/share/nu_scripts/custom-completions/nix/nix-completions.nu *
|
use custom-completions/make/make-completions.nu *
|
||||||
use ${nu_scripts}/share/nu_scripts/custom-completions/cargo/cargo-completions.nu *
|
use custom-completions/man/man-completions.nu *
|
||||||
use ${nu_scripts}/share/nu_scripts/custom-completions/zellij/zellij-completions.nu *
|
use custom-completions/nix/nix-completions.nu *
|
||||||
|
use custom-completions/ssh/ssh-completions.nu *
|
||||||
|
use custom-completions/tar/tar-completions.nu *
|
||||||
|
use custom-completions/tcpdump/tcpdump-completions.nu *
|
||||||
|
use custom-completions/zellij/zellij-completions.nu *
|
||||||
|
# use custom-completions/zoxide/zoxide-completions.nu *
|
||||||
|
|
||||||
# alias
|
# alias
|
||||||
# use ${nu_scripts}/share/nu_scripts/aliases/git/git-aliases.nu *
|
use aliases/git/git-aliases.nu *
|
||||||
use ${nu_scripts}/share/nu_scripts/aliases/eza/eza-aliases.nu *
|
use aliases/eza/eza-aliases.nu *
|
||||||
use ${nu_scripts}/share/nu_scripts/aliases/bat/bat-aliases.nu *
|
use aliases/bat/bat-aliases.nu *
|
||||||
|
|
||||||
|
# modules
|
||||||
|
use modules/argx *
|
||||||
|
use modules/lg *
|
||||||
|
use modules/kubernetes *
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
+26
-30
@@ -1,41 +1,37 @@
|
|||||||
{mysecrets, ...}: {
|
{
|
||||||
|
config,
|
||||||
|
mysecrets,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
home.file.".ssh/romantic.pub".source = "${mysecrets}/public/romantic.pub";
|
home.file.".ssh/romantic.pub".source = "${mysecrets}/public/romantic.pub";
|
||||||
|
|
||||||
programs.ssh = {
|
programs.ssh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
# All my ssh private key are generated by `ssh-keygen -t ed25519 -a 256 -C "xxx@xxx"`
|
# "a private key that is used during authentication will be added to ssh-agent if it is running"
|
||||||
# Config format:
|
addKeysToAgent = "yes";
|
||||||
# Host — given the pattern used to match against the host name given on the command line.
|
|
||||||
# HostName — specify nickname or abbreviation for host
|
matchBlocks = {
|
||||||
# IdentityFile — the location of your SSH key authentication file for the account.
|
"github.com" = {
|
||||||
# Format in details:
|
# "Using SSH over the HTTPS port for GitHub"
|
||||||
# https://www.ssh.com/academy/ssh/config
|
# "(port 22 is banned by some proxies / firewalls)"
|
||||||
extraConfig = ''
|
hostname = "ssh.github.com";
|
||||||
# a private key that is used during authentication will be added to ssh-agent if it is running
|
port = 443;
|
||||||
AddKeysToAgent yes
|
user = "git";
|
||||||
|
|
||||||
Host 192.168.*
|
|
||||||
# allow to securely use local SSH agent to authenticate on the remote machine.
|
|
||||||
# It has the same effect as adding cli option `ssh -A user@host`
|
|
||||||
ForwardAgent yes
|
|
||||||
# romantic holds my homelab~
|
|
||||||
IdentityFile /etc/agenix/ssh-key-romantic
|
|
||||||
# Specifies that ssh should only use the identity file explicitly configured above
|
# Specifies that ssh should only use the identity file explicitly configured above
|
||||||
# required to prevent sending default identity files first.
|
# required to prevent sending default identity files first.
|
||||||
IdentitiesOnly yes
|
identitiesOnly = true;
|
||||||
|
};
|
||||||
|
|
||||||
Host gtr5
|
"192.168.*" = {
|
||||||
HostName 192.168.5.172
|
# "allow to securely use local SSH agent to authenticate on the remote machine."
|
||||||
Port 22
|
# "It has the same effect as adding cli option `ssh -A user@host`"
|
||||||
|
forwardAgent = true;
|
||||||
Host um560
|
# "romantic holds my homelab~"
|
||||||
HostName 192.168.5.173
|
identityFile = "/etc/agenix/ssh-key-romantic";
|
||||||
Port 22
|
identitiesOnly = true;
|
||||||
|
};
|
||||||
Host s500plus
|
};
|
||||||
HostName 192.168.5.174
|
|
||||||
Port 22
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
// Generating a new Example config via:
|
||||||
|
// zellij setup --dump-config
|
||||||
|
|
||||||
|
|
||||||
// If you'd like to override the default keybindings completely, be sure to change "keybinds" to "keybinds clear-defaults=true"
|
// If you'd like to override the default keybindings completely, be sure to change "keybinds" to "keybinds clear-defaults=true"
|
||||||
keybinds clear-defaults=true {
|
keybinds clear-defaults=true {
|
||||||
normal {
|
normal {
|
||||||
@@ -36,6 +40,7 @@ keybinds clear-defaults=true {
|
|||||||
bind "w" { ToggleFloatingPanes; SwitchToMode "Normal"; }
|
bind "w" { ToggleFloatingPanes; SwitchToMode "Normal"; }
|
||||||
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }
|
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }
|
||||||
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0;}
|
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0;}
|
||||||
|
bind "i" { TogglePanePinned; SwitchToMode "Normal"; }
|
||||||
}
|
}
|
||||||
move {
|
move {
|
||||||
bind "Ctrl h" { SwitchToMode "Normal"; }
|
bind "Ctrl h" { SwitchToMode "Normal"; }
|
||||||
@@ -54,6 +59,9 @@ keybinds clear-defaults=true {
|
|||||||
bind "n" { NewTab; SwitchToMode "Normal"; }
|
bind "n" { NewTab; SwitchToMode "Normal"; }
|
||||||
bind "x" { CloseTab; SwitchToMode "Normal"; }
|
bind "x" { CloseTab; SwitchToMode "Normal"; }
|
||||||
bind "s" { ToggleActiveSyncTab; SwitchToMode "Normal"; }
|
bind "s" { ToggleActiveSyncTab; SwitchToMode "Normal"; }
|
||||||
|
bind "b" { BreakPane; SwitchToMode "Normal"; }
|
||||||
|
bind "]" { BreakPaneRight; SwitchToMode "Normal"; }
|
||||||
|
bind "[" { BreakPaneLeft; SwitchToMode "Normal"; }
|
||||||
bind "1" { GoToTab 1; SwitchToMode "Normal"; }
|
bind "1" { GoToTab 1; SwitchToMode "Normal"; }
|
||||||
bind "2" { GoToTab 2; SwitchToMode "Normal"; }
|
bind "2" { GoToTab 2; SwitchToMode "Normal"; }
|
||||||
bind "3" { GoToTab 3; SwitchToMode "Normal"; }
|
bind "3" { GoToTab 3; SwitchToMode "Normal"; }
|
||||||
@@ -110,7 +118,38 @@ keybinds clear-defaults=true {
|
|||||||
bind "Ctrl o" { SwitchToMode "Normal"; }
|
bind "Ctrl o" { SwitchToMode "Normal"; }
|
||||||
bind "Ctrl s" { SwitchToMode "Scroll"; }
|
bind "Ctrl s" { SwitchToMode "Scroll"; }
|
||||||
bind "d" { Detach; }
|
bind "d" { Detach; }
|
||||||
|
bind "w" {
|
||||||
|
LaunchOrFocusPlugin "session-manager" {
|
||||||
|
floating true
|
||||||
|
move_to_focused_tab true
|
||||||
|
};
|
||||||
|
SwitchToMode "Normal"
|
||||||
|
}
|
||||||
|
bind "c" {
|
||||||
|
LaunchOrFocusPlugin "configuration" {
|
||||||
|
floating true
|
||||||
|
move_to_focused_tab true
|
||||||
|
};
|
||||||
|
SwitchToMode "Normal"
|
||||||
|
}
|
||||||
|
bind "p" {
|
||||||
|
LaunchOrFocusPlugin "plugin-manager" {
|
||||||
|
floating true
|
||||||
|
move_to_focused_tab true
|
||||||
|
};
|
||||||
|
SwitchToMode "Normal"
|
||||||
|
}
|
||||||
|
bind "a" {
|
||||||
|
LaunchOrFocusPlugin "zellij:about" {
|
||||||
|
floating true
|
||||||
|
move_to_focused_tab true
|
||||||
|
};
|
||||||
|
SwitchToMode "Normal"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Allow to use tmux inside zellij
|
||||||
|
//
|
||||||
// tmux {
|
// tmux {
|
||||||
// bind "[" { SwitchToMode "Scroll"; }
|
// bind "[" { SwitchToMode "Scroll"; }
|
||||||
// bind "Ctrl b" { Write 2; SwitchToMode "Normal"; }
|
// bind "Ctrl b" { Write 2; SwitchToMode "Normal"; }
|
||||||
@@ -137,7 +176,10 @@ keybinds clear-defaults=true {
|
|||||||
shared_except "locked" {
|
shared_except "locked" {
|
||||||
bind "Ctrl g" { SwitchToMode "Locked"; }
|
bind "Ctrl g" { SwitchToMode "Locked"; }
|
||||||
bind "Ctrl q" { Quit; }
|
bind "Ctrl q" { Quit; }
|
||||||
|
bind "Alt f" { ToggleFloatingPanes; }
|
||||||
bind "Alt n" { NewPane; }
|
bind "Alt n" { NewPane; }
|
||||||
|
bind "Alt i" { MoveTab "Left"; }
|
||||||
|
bind "Alt o" { MoveTab "Right"; }
|
||||||
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
|
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
|
||||||
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
|
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
|
||||||
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
|
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
|
||||||
@@ -168,20 +210,40 @@ keybinds clear-defaults=true {
|
|||||||
shared_except "move" "locked" {
|
shared_except "move" "locked" {
|
||||||
bind "Ctrl h" { SwitchToMode "Move"; }
|
bind "Ctrl h" { SwitchToMode "Move"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
// shared_except "tmux" "locked" {
|
// shared_except "tmux" "locked" {
|
||||||
// bind "Ctrl b" { SwitchToMode "Tmux"; }
|
// bind "Ctrl b" { SwitchToMode "Tmux"; }
|
||||||
// }
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Plugin aliases - can be used to change the implementation of Zellij
|
||||||
|
// changing these requires a restart to take effect
|
||||||
plugins {
|
plugins {
|
||||||
tab-bar { path "tab-bar"; }
|
tab-bar location="zellij:tab-bar"
|
||||||
status-bar { path "status-bar"; }
|
status-bar location="zellij:status-bar"
|
||||||
strider { path "strider"; }
|
strider location="zellij:strider"
|
||||||
compact-bar { path "compact-bar"; }
|
compact-bar location="zellij:compact-bar"
|
||||||
|
session-manager location="zellij:session-manager"
|
||||||
|
welcome-screen location="zellij:session-manager" {
|
||||||
|
welcome_screen true
|
||||||
|
}
|
||||||
|
filepicker location="zellij:strider" {
|
||||||
|
cwd "/"
|
||||||
|
}
|
||||||
|
configuration location="zellij:configuration"
|
||||||
|
plugin-manager location="zellij:plugin-manager"
|
||||||
|
about location="zellij:about"
|
||||||
|
}
|
||||||
|
|
||||||
|
// Plugins to load in the background when a new session starts
|
||||||
|
load_plugins {
|
||||||
|
// "file:/path/to/my-plugin.wasm"
|
||||||
|
// "https://example.com/my-plugin.wasm"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
|
// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
|
||||||
// eg. when terminal window with an active zellij session is closed
|
// eg. when terminal window with an active zellij session is closed
|
||||||
|
// (Requires restart)
|
||||||
// Options:
|
// Options:
|
||||||
// - detach (Default)
|
// - detach (Default)
|
||||||
// - quit
|
// - quit
|
||||||
@@ -197,10 +259,13 @@ plugins {
|
|||||||
|
|
||||||
// Choose the path to the default shell that zellij will use for opening new panes
|
// Choose the path to the default shell that zellij will use for opening new panes
|
||||||
// Default: $SHELL
|
// Default: $SHELL
|
||||||
// Change to nushell
|
|
||||||
//
|
//
|
||||||
default_shell "nu"
|
default_shell "nu"
|
||||||
|
|
||||||
|
// Choose the path to override cwd that zellij will use for opening new panes
|
||||||
|
//
|
||||||
|
// default_cwd ""
|
||||||
|
|
||||||
// Toggle between having pane frames around the panes
|
// Toggle between having pane frames around the panes
|
||||||
// Options:
|
// Options:
|
||||||
// - true (default)
|
// - true (default)
|
||||||
@@ -215,6 +280,29 @@ default_shell "nu"
|
|||||||
//
|
//
|
||||||
// auto_layout true
|
// auto_layout true
|
||||||
|
|
||||||
|
// Whether sessions should be serialized to the cache folder (including their tabs/panes, cwds and running commands) so that they can later be resurrected
|
||||||
|
// (Requires restart)
|
||||||
|
// Options:
|
||||||
|
// - true (default)
|
||||||
|
// - false
|
||||||
|
//
|
||||||
|
// session_serialization false
|
||||||
|
|
||||||
|
// Whether pane viewports are serialized along with the session, default is false
|
||||||
|
// (Requires restart)
|
||||||
|
// Options:
|
||||||
|
// - true
|
||||||
|
// - false (default)
|
||||||
|
//
|
||||||
|
// serialize_pane_viewport true
|
||||||
|
|
||||||
|
// Scrollback lines to serialize along with the pane viewport when serializing sessions, 0
|
||||||
|
// defaults to the scrollback size. If this number is higher than the scrollback size, it will
|
||||||
|
// also default to the scrollback size. This does nothing if `serialize_pane_viewport` is not true.
|
||||||
|
// (Requires restart)
|
||||||
|
//
|
||||||
|
// scrollback_lines_to_serialize 10000
|
||||||
|
|
||||||
// Define color themes for Zellij
|
// Define color themes for Zellij
|
||||||
// For more examples, see: https://github.com/zellij-org/zellij/tree/main/example/themes
|
// For more examples, see: https://github.com/zellij-org/zellij/tree/main/example/themes
|
||||||
// Once these themes are defined, one of them should to be selected in the "theme" section of this file
|
// Once these themes are defined, one of them should to be selected in the "theme" section of this file
|
||||||
@@ -283,8 +371,10 @@ themes {
|
|||||||
//
|
//
|
||||||
theme "catppuccin-mocha"
|
theme "catppuccin-mocha"
|
||||||
|
|
||||||
|
|
||||||
// The name of the default layout to load on startup
|
// The name of the default layout to load on startup
|
||||||
// Default: "default"
|
// Default: "default"
|
||||||
|
// (Requires restart)
|
||||||
//
|
//
|
||||||
// default_layout "compact"
|
// default_layout "compact"
|
||||||
|
|
||||||
@@ -296,6 +386,7 @@ theme "catppuccin-mocha"
|
|||||||
// Toggle enabling the mouse mode.
|
// Toggle enabling the mouse mode.
|
||||||
// On certain configurations, or terminals this could
|
// On certain configurations, or terminals this could
|
||||||
// potentially interfere with copying text.
|
// potentially interfere with copying text.
|
||||||
|
// (Requires restart)
|
||||||
// Options:
|
// Options:
|
||||||
// - true (default)
|
// - true (default)
|
||||||
// - false
|
// - false
|
||||||
@@ -305,6 +396,7 @@ theme "catppuccin-mocha"
|
|||||||
// Configure the scroll back buffer size
|
// Configure the scroll back buffer size
|
||||||
// This is the number of lines zellij stores for each pane in the scroll back
|
// This is the number of lines zellij stores for each pane in the scroll back
|
||||||
// buffer. Excess number of lines are discarded in a FIFO fashion.
|
// buffer. Excess number of lines are discarded in a FIFO fashion.
|
||||||
|
// (Requires restart)
|
||||||
// Valid values: positive integers
|
// Valid values: positive integers
|
||||||
// Default value: 10000
|
// Default value: 10000
|
||||||
//
|
//
|
||||||
@@ -342,14 +434,52 @@ theme "catppuccin-mocha"
|
|||||||
// When attaching to an existing session with other users,
|
// When attaching to an existing session with other users,
|
||||||
// should the session be mirrored (true)
|
// should the session be mirrored (true)
|
||||||
// or should each user have their own cursor (false)
|
// or should each user have their own cursor (false)
|
||||||
|
// (Requires restart)
|
||||||
// Default: false
|
// Default: false
|
||||||
//
|
//
|
||||||
// mirror_session true
|
// mirror_session true
|
||||||
|
|
||||||
// The folder in which Zellij will look for layouts
|
// The folder in which Zellij will look for layouts
|
||||||
|
// (Requires restart)
|
||||||
//
|
//
|
||||||
// layout_dir "/path/to/my/layout_dir"
|
// layout_dir "/path/to/my/layout_dir"
|
||||||
|
|
||||||
// The folder in which Zellij will look for themes
|
// The folder in which Zellij will look for themes
|
||||||
|
// (Requires restart)
|
||||||
//
|
//
|
||||||
// theme_dir "/path/to/my/theme_dir"
|
// theme_dir "/path/to/my/theme_dir"
|
||||||
|
|
||||||
|
// Enable or disable the rendering of styled and colored underlines (undercurl).
|
||||||
|
// May need to be disabled for certain unsupported terminals
|
||||||
|
// (Requires restart)
|
||||||
|
// Default: true
|
||||||
|
//
|
||||||
|
// styled_underlines false
|
||||||
|
|
||||||
|
// Enable or disable writing of session metadata to disk (if disabled, other sessions might not know
|
||||||
|
// metadata info on this session)
|
||||||
|
// (Requires restart)
|
||||||
|
// Default: false
|
||||||
|
//
|
||||||
|
// disable_session_metadata true
|
||||||
|
|
||||||
|
// Enable or disable support for the enhanced Kitty Keyboard Protocol (the host terminal must also support it)
|
||||||
|
// (Requires restart)
|
||||||
|
// Default: true (if the host terminal supports it)
|
||||||
|
//
|
||||||
|
// support_kitty_keyboard_protocol false
|
||||||
|
|
||||||
|
// Whether to stack panes when resizing beyond a certain size
|
||||||
|
// Default: true
|
||||||
|
//
|
||||||
|
// stacked_resize false
|
||||||
|
|
||||||
|
// Whether to show release notes on first version run
|
||||||
|
// Default: true
|
||||||
|
//
|
||||||
|
show_release_notes false
|
||||||
|
|
||||||
|
// Whether to show startup tips on session start
|
||||||
|
// Default: true
|
||||||
|
//
|
||||||
|
show_startup_tips false
|
||||||
|
|||||||
@@ -1,20 +1,11 @@
|
|||||||
{
|
{pkgs, ...}: let
|
||||||
pkgs,
|
|
||||||
pkgs-stable,
|
|
||||||
...
|
|
||||||
}: let
|
|
||||||
shellAliases = {
|
shellAliases = {
|
||||||
"zj" = "zellij";
|
"zj" = "zellij";
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
programs.zellij = {
|
programs.zellij = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# [Linux] Revert to old v0.40.1 to fix:
|
package = pkgs.zellij;
|
||||||
# https://github.com/zellij-org/zellij/issues/3592
|
|
||||||
package =
|
|
||||||
if pkgs.stdenv.isLinux
|
|
||||||
then pkgs-stable.zellij
|
|
||||||
else pkgs.zellij;
|
|
||||||
};
|
};
|
||||||
# auto start zellij in nushell
|
# auto start zellij in nushell
|
||||||
programs.nushell.extraConfig = ''
|
programs.nushell.extraConfig = ''
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
# Place a copy of this config to ~/.aerospace.toml
|
# Place a copy of this config to ~/.aerospace.toml
|
||||||
# After that, you can edit ~/.aerospace.toml to your liking
|
# After that, you can edit ~/.aerospace.toml to your liking
|
||||||
|
|
||||||
# It's not necessary to copy all keys to your config.
|
|
||||||
# If the key is missing in your config, "default-config.toml" will serve as a fallback
|
|
||||||
|
|
||||||
# You can use it to add commands that run after login to macOS user session.
|
# You can use it to add commands that run after login to macOS user session.
|
||||||
# 'start-at-login' needs to be 'true' for 'after-login-command' to work
|
# 'start-at-login' needs to be 'true' for 'after-login-command' to work
|
||||||
# Available commands: https://nikitabobko.github.io/AeroSpace/commands
|
# Available commands: https://nikitabobko.github.io/AeroSpace/commands
|
||||||
@@ -14,14 +11,14 @@ after-login-command = []
|
|||||||
# Available commands : https://nikitabobko.github.io/AeroSpace/commands
|
# Available commands : https://nikitabobko.github.io/AeroSpace/commands
|
||||||
after-startup-command = [
|
after-startup-command = [
|
||||||
# Highlight focused windows with colored borders
|
# Highlight focused windows with colored borders
|
||||||
#
|
#
|
||||||
# JankyBorders has a built-in detection of already running process,
|
# JankyBorders has a built-in detection of already running process,
|
||||||
# so it won't be run twice on AeroSpace restart
|
# so it won't be run twice on AeroSpace restart
|
||||||
'exec-and-forget borders active_color=0xffe1e3e4 inactive_color=0xff494d64 width=5.0',
|
'exec-and-forget borders active_color=0xffe1e3e4 inactive_color=0xff494d64 width=5.0',
|
||||||
]
|
]
|
||||||
|
|
||||||
# Start AeroSpace at login
|
# Start AeroSpace at login
|
||||||
start-at-login = false
|
start-at-login = true
|
||||||
|
|
||||||
# Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization
|
# Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization
|
||||||
enable-normalization-flatten-containers = true
|
enable-normalization-flatten-containers = true
|
||||||
@@ -40,39 +37,43 @@ default-root-container-layout = 'tiles'
|
|||||||
# tall monitor (anything higher than wide) gets vertical orientation
|
# tall monitor (anything higher than wide) gets vertical orientation
|
||||||
default-root-container-orientation = 'auto'
|
default-root-container-orientation = 'auto'
|
||||||
|
|
||||||
# Possible values: (qwerty|dvorak)
|
|
||||||
# See https://nikitabobko.github.io/AeroSpace/guide#key-mapping
|
|
||||||
key-mapping.preset = 'qwerty'
|
|
||||||
|
|
||||||
# Mouse follows focus when focused monitor changes
|
# Mouse follows focus when focused monitor changes
|
||||||
# Drop it from your config, if you don't like this behavior
|
# Drop it from your config, if you don't like this behavior
|
||||||
# See https://nikitabobko.github.io/AeroSpace/guide#on-focus-changed-callbacks
|
# See https://nikitabobko.github.io/AeroSpace/guide#on-focus-changed-callbacks
|
||||||
# See https://nikitabobko.github.io/AeroSpace/commands#move-mouse
|
# See https://nikitabobko.github.io/AeroSpace/commands#move-mouse
|
||||||
|
# Fallback value (if you omit the key): on-focused-monitor-changed = []
|
||||||
on-focused-monitor-changed = ['move-mouse monitor-lazy-center']
|
on-focused-monitor-changed = ['move-mouse monitor-lazy-center']
|
||||||
|
|
||||||
|
# You can effectively turn off macOS "Hide application" (cmd-h) feature by toggling this flag
|
||||||
|
# Useful if you don't use this macOS feature, but accidentally hit cmd-h or cmd-alt-h key
|
||||||
|
# Also see: https://nikitabobko.github.io/AeroSpace/goodies#disable-hide-app
|
||||||
|
automatically-unhide-macos-hidden-apps = false
|
||||||
|
|
||||||
|
# Possible values: (qwerty|dvorak|colemak)
|
||||||
|
# See https://nikitabobko.github.io/AeroSpace/guide#key-mapping
|
||||||
|
[key-mapping]
|
||||||
|
preset = 'qwerty'
|
||||||
|
|
||||||
# Gaps between windows (inner-*) and between monitor edges (outer-*).
|
# Gaps between windows (inner-*) and between monitor edges (outer-*).
|
||||||
# Possible values:
|
# Possible values:
|
||||||
# - Constant: gaps.outer.top = 8
|
# - Constant: gaps.outer.top = 8
|
||||||
# - Per monitor: gaps.outer.top = [{ monitor.main = 16 }, { monitor."some-pattern" = 32 }, 24]
|
# - Per monitor: gaps.outer.top = [{ monitor.main = 16 }, { monitor."some-pattern" = 32 }, 24]
|
||||||
# In this example, 24 is a default value when there is no match.
|
# In this example, 24 is a default value when there is no match.
|
||||||
# Monitor pattern is the same as for 'workspace-to-monitor-force-assignment'.
|
# Monitor pattern is the same as for 'workspace-to-monitor-force-assignment'.
|
||||||
# See: https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors
|
# See:
|
||||||
|
# https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors
|
||||||
[gaps]
|
[gaps]
|
||||||
inner.horizontal = 5
|
inner.horizontal = 3
|
||||||
inner.vertical = 5
|
inner.vertical = 3
|
||||||
outer.left = 5
|
outer.left = 3
|
||||||
outer.bottom = 5
|
outer.bottom = 3
|
||||||
outer.top = 5
|
outer.top = 3
|
||||||
outer.right = 5
|
outer.right = 3
|
||||||
|
|
||||||
[exec]
|
# ['main'] binding mode declaration
|
||||||
inherit-env-vars = true
|
|
||||||
[exec.env-vars]
|
|
||||||
PATH = '/opt/homebrew/bin:/opt/homebrew/sbin:${PATH}'
|
|
||||||
|
|
||||||
# 'main' binding mode declaration
|
|
||||||
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
|
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
|
||||||
# 'main' binding mode must be always presented
|
# ['main'] binding mode must be always presented
|
||||||
|
# Fallback value (if you omit the key): mode.main.binding = {}
|
||||||
[mode.main.binding]
|
[mode.main.binding]
|
||||||
|
|
||||||
# All possible keys:
|
# All possible keys:
|
||||||
@@ -80,8 +81,10 @@ PATH = '/opt/homebrew/bin:/opt/homebrew/sbin:${PATH}'
|
|||||||
# - Numbers. 0, 1, 2, ..., 9
|
# - Numbers. 0, 1, 2, ..., 9
|
||||||
# - Keypad numbers. keypad0, keypad1, keypad2, ..., keypad9
|
# - Keypad numbers. keypad0, keypad1, keypad2, ..., keypad9
|
||||||
# - F-keys. f1, f2, ..., f20
|
# - F-keys. f1, f2, ..., f20
|
||||||
# - Special keys. minus, equal, period, comma, slash, backslash, quote, semicolon, backtick,
|
# - Special keys. minus, equal, period, comma, slash, backslash, quote, semicolon,
|
||||||
# leftSquareBracket, rightSquareBracket, space, enter, esc, backspace, tab
|
# backtick, leftSquareBracket, rightSquareBracket, space, enter, esc,
|
||||||
|
# backspace, tab, pageUp, pageDown, home, end, forwardDelete,
|
||||||
|
# sectionSign (ISO keyboards only, european keyboards only)
|
||||||
# - Keypad special. keypadClear, keypadDecimalMark, keypadDivide, keypadEnter, keypadEqual,
|
# - Keypad special. keypadClear, keypadDecimalMark, keypadDivide, keypadEnter, keypadEqual,
|
||||||
# keypadMinus, keypadMultiply, keypadPlus
|
# keypadMinus, keypadMultiply, keypadPlus
|
||||||
# - Arrows. left, down, up, right
|
# - Arrows. left, down, up, right
|
||||||
@@ -91,13 +94,14 @@ PATH = '/opt/homebrew/bin:/opt/homebrew/sbin:${PATH}'
|
|||||||
# All possible commands: https://nikitabobko.github.io/AeroSpace/commands
|
# All possible commands: https://nikitabobko.github.io/AeroSpace/commands
|
||||||
|
|
||||||
# See: https://nikitabobko.github.io/AeroSpace/commands#exec-and-forget
|
# See: https://nikitabobko.github.io/AeroSpace/commands#exec-and-forget
|
||||||
# You can uncomment the following lines to open up terminal with alt + enter shortcut (like in i3)
|
# You can uncomment the following lines to open up terminal with alt + enter shortcut
|
||||||
|
# (like in i3)
|
||||||
alt-enter = '''exec-and-forget osascript -e '
|
alt-enter = '''exec-and-forget osascript -e '
|
||||||
tell application "kitty"
|
tell application "kitty"
|
||||||
do script
|
do script
|
||||||
activate
|
activate
|
||||||
end tell'
|
end tell'
|
||||||
'''
|
'''
|
||||||
|
|
||||||
# See: https://nikitabobko.github.io/AeroSpace/commands#layout
|
# See: https://nikitabobko.github.io/AeroSpace/commands#layout
|
||||||
alt-slash = 'layout tiles horizontal vertical'
|
alt-slash = 'layout tiles horizontal vertical'
|
||||||
@@ -127,9 +131,12 @@ alt-4 = 'workspace 4Firefox'
|
|||||||
alt-5 = 'workspace 5Chrome'
|
alt-5 = 'workspace 5Chrome'
|
||||||
alt-6 = 'workspace 6Chat'
|
alt-6 = 'workspace 6Chat'
|
||||||
alt-7 = 'workspace 7Music'
|
alt-7 = 'workspace 7Music'
|
||||||
alt-8 = 'workspace 8'
|
alt-8 = 'workspace 8Mail'
|
||||||
alt-9 = 'workspace 9'
|
alt-9 = 'workspace 9File'
|
||||||
alt-0 = 'workspace 10'
|
alt-0 = 'workspace 0Other'
|
||||||
|
alt-a = 'workspace A' # In your config, you can drop workspace bindings that you don't need
|
||||||
|
alt-b = 'workspace B'
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# See: https://nikitabobko.github.io/AeroSpace/commands#move-node-to-workspace
|
# See: https://nikitabobko.github.io/AeroSpace/commands#move-node-to-workspace
|
||||||
@@ -140,9 +147,12 @@ alt-shift-4 = 'move-node-to-workspace 4Firefox'
|
|||||||
alt-shift-5 = 'move-node-to-workspace 5Chrome'
|
alt-shift-5 = 'move-node-to-workspace 5Chrome'
|
||||||
alt-shift-6 = 'move-node-to-workspace 6Chat'
|
alt-shift-6 = 'move-node-to-workspace 6Chat'
|
||||||
alt-shift-7 = 'move-node-to-workspace 7Music'
|
alt-shift-7 = 'move-node-to-workspace 7Music'
|
||||||
alt-shift-8 = 'move-node-to-workspace 8'
|
alt-shift-8 = 'move-node-to-workspace 8Mail'
|
||||||
alt-shift-9 = 'move-node-to-workspace 9'
|
alt-shift-9 = 'move-node-to-workspace 9File'
|
||||||
alt-shift-0 = 'move-node-to-workspace 10'
|
alt-shift-0 = 'move-node-to-workspace 0Other'
|
||||||
|
alt-shift-a = 'move-node-to-workspace A'
|
||||||
|
alt-shift-b = 'move-node-to-workspace B'
|
||||||
|
|
||||||
|
|
||||||
# See: https://nikitabobko.github.io/AeroSpace/commands#workspace-back-and-forth
|
# See: https://nikitabobko.github.io/AeroSpace/commands#workspace-back-and-forth
|
||||||
alt-tab = 'workspace-back-and-forth'
|
alt-tab = 'workspace-back-and-forth'
|
||||||
@@ -152,12 +162,29 @@ alt-shift-tab = 'move-workspace-to-monitor --wrap-around next'
|
|||||||
# See: https://nikitabobko.github.io/AeroSpace/commands#mode
|
# See: https://nikitabobko.github.io/AeroSpace/commands#mode
|
||||||
alt-shift-semicolon = 'mode service'
|
alt-shift-semicolon = 'mode service'
|
||||||
|
|
||||||
cmd-h = [] # Disable "hide application"
|
# 'service' binding mode declaration.
|
||||||
cmd-alt-h = [] # Disable "hide others"
|
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
|
||||||
|
[mode.service.binding]
|
||||||
|
esc = ['reload-config', 'mode main']
|
||||||
|
r = ['flatten-workspace-tree', 'mode main'] # reset layout
|
||||||
|
f = [
|
||||||
|
'layout floating tiling',
|
||||||
|
'mode main',
|
||||||
|
] # Toggle between floating and tiling layout
|
||||||
|
backspace = ['close-all-windows-but-current', 'mode main']
|
||||||
|
|
||||||
alt-shift-c = 'reload-config'
|
# sticky is not yet supported https://github.com/nikitabobko/AeroSpace/issues/2
|
||||||
|
#s = ['layout sticky tiling', 'mode main']
|
||||||
|
|
||||||
|
alt-shift-h = ['join-with left', 'mode main']
|
||||||
|
alt-shift-j = ['join-with down', 'mode main']
|
||||||
|
alt-shift-k = ['join-with up', 'mode main']
|
||||||
|
alt-shift-l = ['join-with right', 'mode main']
|
||||||
|
|
||||||
|
down = 'volume down'
|
||||||
|
up = 'volume up'
|
||||||
|
shift-down = ['volume set 0', 'mode main']
|
||||||
|
|
||||||
alt-r = 'mode resize'
|
|
||||||
|
|
||||||
# Declare 'resize' binding mode
|
# Declare 'resize' binding mode
|
||||||
[mode.resize.binding]
|
[mode.resize.binding]
|
||||||
@@ -168,23 +195,10 @@ l = 'resize width +50'
|
|||||||
enter = 'mode main'
|
enter = 'mode main'
|
||||||
esc = 'mode main'
|
esc = 'mode main'
|
||||||
|
|
||||||
# 'service' binding mode declaration.
|
[exec]
|
||||||
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
|
inherit-env-vars = true
|
||||||
[mode.service.binding]
|
[exec.env-vars]
|
||||||
esc = ['reload-config', 'mode main']
|
PATH = '/opt/homebrew/bin:/opt/homebrew/sbin:${PATH}'
|
||||||
r = ['flatten-workspace-tree', 'mode main'] # reset layout
|
|
||||||
#s = ['layout sticky tiling', 'mode main'] # sticky is not yet supported https://github.com/nikitabobko/AeroSpace/issues/2
|
|
||||||
f = [
|
|
||||||
'layout floating tiling',
|
|
||||||
'mode main',
|
|
||||||
] # Toggle between floating and tiling layout
|
|
||||||
backspace = ['close-all-windows-but-current', 'mode main']
|
|
||||||
|
|
||||||
alt-shift-h = ['join-with left', 'mode main']
|
|
||||||
alt-shift-j = ['join-with down', 'mode main']
|
|
||||||
alt-shift-k = ['join-with up', 'mode main']
|
|
||||||
alt-shift-l = ['join-with right', 'mode main']
|
|
||||||
|
|
||||||
|
|
||||||
# =================================================================
|
# =================================================================
|
||||||
#
|
#
|
||||||
@@ -207,6 +221,16 @@ run = 'move-node-to-workspace 2Alacritty'
|
|||||||
if.app-id = 'com.tencent.WeWorkMac'
|
if.app-id = 'com.tencent.WeWorkMac'
|
||||||
run = 'move-node-to-workspace 3Work'
|
run = 'move-node-to-workspace 3Work'
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
# if.app-id = 'com.tencent.WeWorkMac'
|
||||||
|
if.app-id = 'com.tinyspeck.slackmacgap'
|
||||||
|
run = 'move-node-to-workspace 3Work'
|
||||||
|
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'us.zoom.xos'
|
||||||
|
run = 'move-node-to-workspace 3Work'
|
||||||
|
|
||||||
[[on-window-detected]]
|
[[on-window-detected]]
|
||||||
if.app-id = 'org.mozilla.firefox'
|
if.app-id = 'org.mozilla.firefox'
|
||||||
run = 'move-node-to-workspace 4Firefox'
|
run = 'move-node-to-workspace 4Firefox'
|
||||||
@@ -235,23 +259,71 @@ run = 'move-node-to-workspace 7Music'
|
|||||||
if.app-id = 'com.netease.163music'
|
if.app-id = 'com.netease.163music'
|
||||||
run = 'move-node-to-workspace 7Music'
|
run = 'move-node-to-workspace 7Music'
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.apple.mail'
|
||||||
|
run = 'move-node-to-workspace 8Mail'
|
||||||
|
|
||||||
|
# calendar
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.apple.iCal'
|
||||||
|
run = 'move-node-to-workspace 8Mail'
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.apple.finder'
|
||||||
|
run = ['layout floating', 'move-node-to-workspace 9File']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.apple.iBooksX'
|
||||||
|
run = ['layout floating', 'move-node-to-workspace 9File']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'net.cozic.joplin-desktop'
|
||||||
|
run = ['layout floating', 'move-node-to-workspace 9File']
|
||||||
|
|
||||||
|
# Book/Picture Preview
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.apple.Preview'
|
||||||
|
run = ['layout floating', 'move-node-to-workspace 9File']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'org.wireshark.Wireshark'
|
||||||
|
run = ['layout floating', 'move-node-to-workspace 0Other']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'ai.elementlabs.lmstudio'
|
||||||
|
run = ['layout floating', 'move-node-to-workspace 0Other']
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.microsoft.VSCode'
|
||||||
|
run = ['layout floating', 'move-node-to-workspace 0Other']
|
||||||
|
|
||||||
|
# Auth UI - do not move it
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.apple.SecurityAgent'
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
# System Settings - do not move it
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.apple.systempreferences'
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
# Make all windows float by default
|
# Make all windows float by default
|
||||||
[[on-window-detected]]
|
[[on-window-detected]]
|
||||||
check-further-callbacks = true
|
check-further-callbacks = true
|
||||||
run = 'layout floating'
|
run = ['layout floating']
|
||||||
|
|
||||||
# =================================================================
|
# =================================================================
|
||||||
# Multiple monitor configuration
|
# Multiple monitor configuration
|
||||||
# =================================================================
|
# =================================================================
|
||||||
|
|
||||||
[workspace-to-monitor-force-assignment]
|
[workspace-to-monitor-force-assignment]
|
||||||
1Kitty = 'secondary' # Non-main monitor in case when there are only two monitors'
|
1Kitty = ['main'] # Non-main monitor in case when there are only two monitors'
|
||||||
2Alacritty = 'main' # "Main" monitor ("main" as in System Settings → Displays → Use as)
|
2Alacritty = ['main'] # "Main" monitor ("main" as in System Settings → Displays → Use as)
|
||||||
3Work = 'main'
|
3Work = ['built-in']
|
||||||
4Firefox = 'main'
|
4Firefox = ['main']
|
||||||
5Chrome = 'secondary'
|
5Chrome = ['main']
|
||||||
6Chat = 'main'
|
6Chat = ['built-in']
|
||||||
7Music = 'main'
|
7Music = ['built-in']
|
||||||
8 = 'main'
|
8Mail = ['main']
|
||||||
9 = 'main'
|
9File = ['main']
|
||||||
0 = 'main'
|
0Other = ['main']
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
{
|
{config, ...}: {
|
||||||
home.file.".aerospace.toml".source = ./aerospace.toml;
|
home.file.".aerospace.toml".source =
|
||||||
|
config.lib.file.mkOutOfStoreSymlink
|
||||||
|
"${config.home.homeDirectory}/nix-config/home/darwin/aerospace/aerospace.toml";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,4 +12,7 @@
|
|||||||
../base/gui
|
../base/gui
|
||||||
../base/home.nix
|
../base/home.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
|
# enable management of XDG base directories on macOS.
|
||||||
|
xdg.enable = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,13 @@
|
|||||||
{pkgs, ...}: {
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
clash-meta
|
clash-meta
|
||||||
];
|
];
|
||||||
home.file.".proxychains/proxychains.conf".source = ./proxychains.conf;
|
|
||||||
|
home.file.".proxychains/proxychains.conf".source =
|
||||||
|
config.lib.file.mkOutOfStoreSymlink
|
||||||
|
"${config.home.homeDirectory}/nix-config/home/darwin/proxy/proxychains.conf";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
export PATH="$PATH:/opt/homebrew/bin:/usr/local/bin"
|
export PATH="$PATH:/opt/homebrew/bin:/usr/local/bin"
|
||||||
'';
|
'';
|
||||||
# copied from the content generated by `conda init bash`
|
# copied from the content generated by `conda init bash`
|
||||||
initExtra = ''
|
initContent = ''
|
||||||
arch=$(uname -m)
|
arch=$(uname -m)
|
||||||
|
|
||||||
if [ "aarch64" = "$arch" ] || [ "arm64" = "$arch" ]; then
|
if [ "aarch64" = "$arch" ] || [ "arm64" = "$arch" ]; then
|
||||||
@@ -28,10 +28,10 @@ in {
|
|||||||
# in /opt/homebrew for Apple Silicon and /usr/local for Rosetta 2 to coexist and use bottles.
|
# in /opt/homebrew for Apple Silicon and /usr/local for Rosetta 2 to coexist and use bottles.
|
||||||
programs.bash = {
|
programs.bash = {
|
||||||
enable = true;
|
enable = true;
|
||||||
bashrcExtra = lib.mkAfter (envExtra + initExtra);
|
bashrcExtra = lib.mkAfter (envExtra + initContent);
|
||||||
};
|
};
|
||||||
programs.zsh = {
|
programs.zsh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
inherit envExtra initExtra;
|
inherit envExtra initContent;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +0,0 @@
|
|||||||
{myvars, ...}: {
|
|
||||||
programs.ssh.extraConfig = myvars.networking.ssh.extraConfig;
|
|
||||||
}
|
|
||||||
@@ -5,7 +5,6 @@
|
|||||||
libnotify
|
libnotify
|
||||||
wireguard-tools # manage wireguard vpn manually, via wg-quick
|
wireguard-tools # manage wireguard vpn manually, via wg-quick
|
||||||
|
|
||||||
ventoy # create bootable usb
|
|
||||||
virt-viewer # vnc connect to VM, used by kubevirt
|
virt-viewer # vnc connect to VM, used by kubevirt
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -3,11 +3,13 @@
|
|||||||
pkgs-unstable,
|
pkgs-unstable,
|
||||||
# pkgs-stable,
|
# pkgs-stable,
|
||||||
nur-ryan4yin,
|
nur-ryan4yin,
|
||||||
|
blender-bin,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
# creative
|
# creative
|
||||||
blender # 3d modeling
|
# https://github.com/edolstra/nix-warez/blob/master/blender/flake.nix
|
||||||
|
blender-bin.packages.${pkgs.system}.blender_4_2 # 3d modeling
|
||||||
# gimp # image editing, I prefer using figma in browser instead of this one
|
# gimp # image editing, I prefer using figma in browser instead of this one
|
||||||
inkscape # vector graphics
|
inkscape # vector graphics
|
||||||
krita # digital painting
|
krita # digital painting
|
||||||
@@ -17,17 +19,17 @@
|
|||||||
|
|
||||||
# 2d game design
|
# 2d game design
|
||||||
ldtk # A modern, versatile 2D level editor
|
ldtk # A modern, versatile 2D level editor
|
||||||
aseprite # Animated sprite editor & pixel art tool
|
# aseprite # Animated sprite editor & pixel art tool
|
||||||
|
|
||||||
# this app consumes a lot of storage, so do not install it currently
|
# this app consumes a lot of storage, so do not install it currently
|
||||||
# kicad # 3d printing, eletrical engineering
|
# kicad # 3d printing, eletrical engineering
|
||||||
|
|
||||||
# fpga
|
# fpga
|
||||||
pkgs-unstable.python312Packages.apycula # gowin fpga
|
pkgs-unstable.python313Packages.apycula # gowin fpga
|
||||||
pkgs-unstable.yosys # fpga synthesis
|
pkgs-unstable.yosys # fpga synthesis
|
||||||
pkgs-unstable.nextpnr # fpga place and route
|
pkgs-unstable.nextpnr # fpga place and route
|
||||||
pkgs-unstable.openfpgaloader # fpga programming
|
pkgs-unstable.openfpgaloader # fpga programming
|
||||||
nur-ryan4yin.packages.${pkgs.system}.gowin-eda-edu-ide # app: `gowin-env` => `gw_ide` / `gw_pack` / ...
|
# nur-ryan4yin.packages.${pkgs.system}.gowin-eda-edu-ide # app: `gowin-env` => `gw_ide` / `gw_pack` / ...
|
||||||
];
|
];
|
||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
@@ -39,7 +41,7 @@
|
|||||||
wlrobs
|
wlrobs
|
||||||
# obs-ndi
|
# obs-ndi
|
||||||
obs-vaapi
|
obs-vaapi
|
||||||
obs-nvfbc
|
# obs-nvfbc
|
||||||
obs-teleport
|
obs-teleport
|
||||||
# obs-hyperion
|
# obs-hyperion
|
||||||
droidcam-obs
|
droidcam-obs
|
||||||
|
|||||||
@@ -16,18 +16,21 @@
|
|||||||
# has problem with wayland, so disable it
|
# has problem with wayland, so disable it
|
||||||
tray = false;
|
tray = false;
|
||||||
temperature = {
|
temperature = {
|
||||||
day = 5700;
|
day = 6000;
|
||||||
night = 4000;
|
night = 4500;
|
||||||
};
|
};
|
||||||
# https://gitlab.com/chinstrap/gammastep/-/blob/master/gammastep.conf.sample?ref_type=heads
|
# https://gitlab.com/chinstrap/gammastep/-/blob/master/gammastep.conf.sample?ref_type=heads
|
||||||
settings = {
|
settings = {
|
||||||
general = {
|
general = {
|
||||||
fade = "1"; # gradually apply the new screen temperature/brightness over a couple of seconds.
|
fade = "1"; # gradually apply the new screen temperature/brightness over a couple of seconds.
|
||||||
|
|
||||||
# it is a fake brightness adjustment obtained by manipulating the gamma ramps,
|
# it is a fake brightness adjustment obtained by manipulating the gamma ramps,
|
||||||
# which means that it does not reduce the backlight of the screen.
|
# which means that it does not reduce the backlight of the screen.
|
||||||
# Preferably only use it if your normal backlight adjustment is too coarse-grained.
|
# Preferably only use it if your normal backlight adjustment is too coarse-grained.
|
||||||
brightness-day = "1.0";
|
#
|
||||||
brightness-night = "0.8";
|
# brightness-day = "1.3";
|
||||||
|
# brightness-night = "1";
|
||||||
|
|
||||||
location-provider = "manual";
|
location-provider = "manual";
|
||||||
|
|
||||||
# by default, Redshift will use the current elevation of the sun
|
# by default, Redshift will use the current elevation of the sun
|
||||||
|
|||||||
@@ -16,7 +16,8 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
i18n.inputMethod = {
|
i18n.inputMethod = {
|
||||||
enabled = "fcitx5";
|
enable = true;
|
||||||
|
type = "fcitx5";
|
||||||
fcitx5.addons = with pkgs; [
|
fcitx5.addons = with pkgs; [
|
||||||
# for flypy chinese input method
|
# for flypy chinese input method
|
||||||
fcitx5-rime
|
fcitx5-rime
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
[Groups/0]
|
[Groups/0]
|
||||||
# Group Name
|
# Group Name
|
||||||
Name=Other
|
Name=Default
|
||||||
# Layout
|
# Layout
|
||||||
Default Layout=us
|
Default Layout=us
|
||||||
# Default Input Method
|
# Default Input Method
|
||||||
@@ -8,10 +8,16 @@ DefaultIM=rime
|
|||||||
|
|
||||||
[Groups/0/Items/0]
|
[Groups/0/Items/0]
|
||||||
# Name
|
# Name
|
||||||
|
Name=keyboard-us
|
||||||
|
# Layout
|
||||||
|
Layout=
|
||||||
|
|
||||||
|
[Groups/0/Items/1]
|
||||||
|
# Name
|
||||||
Name=rime
|
Name=rime
|
||||||
# Layout
|
# Layout
|
||||||
Layout=
|
Layout=
|
||||||
|
|
||||||
[GroupOrder]
|
[GroupOrder]
|
||||||
0=Other
|
0=Default
|
||||||
|
|
||||||
|
|||||||
@@ -16,11 +16,13 @@
|
|||||||
nvtopPackages.full
|
nvtopPackages.full
|
||||||
|
|
||||||
# video/audio tools
|
# video/audio tools
|
||||||
cava # for visualizing audio
|
# cava # for visualizing audio
|
||||||
libva-utils
|
libva-utils
|
||||||
vdpauinfo
|
vdpauinfo
|
||||||
vulkan-tools
|
vulkan-tools
|
||||||
glxinfo
|
glxinfo
|
||||||
|
|
||||||
|
(zoom-us.override {hyprlandXdgDesktopPortalSupport = true;})
|
||||||
];
|
];
|
||||||
|
|
||||||
# https://github.com/catppuccin/cava
|
# https://github.com/catppuccin/cava
|
||||||
|
|||||||
@@ -17,10 +17,6 @@
|
|||||||
remmina
|
remmina
|
||||||
freerdp # required by remmina
|
freerdp # required by remmina
|
||||||
|
|
||||||
# misc
|
|
||||||
flameshot
|
|
||||||
ventoy # multi-boot usb creator
|
|
||||||
|
|
||||||
# my custom hardened packages
|
# my custom hardened packages
|
||||||
pkgs.nixpaks.qq
|
pkgs.nixpaks.qq
|
||||||
pkgs.nixpaks.qq-desktop-item
|
pkgs.nixpaks.qq-desktop-item
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
enable = true;
|
enable = true;
|
||||||
# let `xdg-open` to open the url with the correct application.
|
# let `xdg-open` to open the url with the correct application.
|
||||||
defaultApplications = let
|
defaultApplications = let
|
||||||
browser = ["firefox.desktop"];
|
browser = ["firefox.desktop" "google-chrome.desktop"];
|
||||||
editor = ["nvim.desktop" "Helix.desktop" "code.desktop" "code-insiders.desktop"];
|
editor = ["nvim.desktop" "Helix.desktop" "code.desktop" "code-insiders.desktop"];
|
||||||
in {
|
in {
|
||||||
"application/json" = browser;
|
"application/json" = browser;
|
||||||
@@ -61,6 +61,8 @@
|
|||||||
# https://github.com/microsoft/vscode/issues/146408
|
# https://github.com/microsoft/vscode/issues/146408
|
||||||
"x-scheme-handler/vscode" = ["code-url-handler.desktop"]; # open `vscode://` url with `code-url-handler.desktop`
|
"x-scheme-handler/vscode" = ["code-url-handler.desktop"]; # open `vscode://` url with `code-url-handler.desktop`
|
||||||
"x-scheme-handler/vscode-insiders" = ["code-insiders-url-handler.desktop"]; # open `vscode-insiders://` url with `code-insiders-url-handler.desktop`
|
"x-scheme-handler/vscode-insiders" = ["code-insiders-url-handler.desktop"]; # open `vscode-insiders://` url with `code-insiders-url-handler.desktop`
|
||||||
|
"x-scheme-handler/zoommtg" = ["Zoom.desktop"];
|
||||||
|
|
||||||
# all other unknown schemes will be opened by this default application.
|
# all other unknown schemes will be opened by this default application.
|
||||||
# "x-scheme-handler/unknown" = editor;
|
# "x-scheme-handler/unknown" = editor;
|
||||||
|
|
||||||
@@ -73,6 +75,8 @@
|
|||||||
"image/jpeg" = ["imv-dir.desktop"];
|
"image/jpeg" = ["imv-dir.desktop"];
|
||||||
"image/png" = ["imv-dir.desktop"];
|
"image/png" = ["imv-dir.desktop"];
|
||||||
"image/webp" = ["imv-dir.desktop"];
|
"image/webp" = ["imv-dir.desktop"];
|
||||||
|
|
||||||
|
"inode/directory" = ["yazi.desktop"];
|
||||||
};
|
};
|
||||||
|
|
||||||
associations.removed = {
|
associations.removed = {
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
{mylib, ...}: {
|
||||||
|
imports = mylib.scanPaths ./.;
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
zed-editor
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
#-- Startup ----------------------------------------------------
|
||||||
|
## Fix anyrun
|
||||||
|
## https://github.com/anyrun-org/anyrun/issues/153
|
||||||
|
exec-once = ln -s "$XDG_RUNTIME_DIR/hypr" /tmp/hypr
|
||||||
|
|
||||||
|
## Launch my daily-used apps at startup
|
||||||
|
# Terminals
|
||||||
|
exec-once = foot
|
||||||
|
exec-once = alacritty
|
||||||
|
# Browsers
|
||||||
|
exec-once = firefox
|
||||||
|
exec-once = google-chrome-stable
|
||||||
|
# Chat
|
||||||
|
exec-once = telegram-desktop
|
||||||
|
|
||||||
|
|
||||||
|
# Switch to Terminals & Browsers
|
||||||
|
exec-once = sleep 3; hyprctl dispatch workspace 1
|
||||||
|
exec-once = sleep 3; hyprctl dispatch workspace 4
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# -- Fcitx5 input method
|
||||||
|
windowrule=pseudo,class:^(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 managed 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
|
||||||
@@ -0,0 +1,139 @@
|
|||||||
|
# https://wiki.hyprland.org/Configuring/Binds/
|
||||||
|
#
|
||||||
|
# Format:
|
||||||
|
# bind = MODS, key, dispatcher, params
|
||||||
|
|
||||||
|
#-- Keybindings ----------------------------------------------------
|
||||||
|
$mod = ALT # use ALT instead of SUPER, to match the mod key with aerospace on darwin.
|
||||||
|
$files = thunar
|
||||||
|
$browser = firefox
|
||||||
|
|
||||||
|
|
||||||
|
# SYSTEM
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
# - Drag modifier
|
||||||
|
# BIND MOD KEY DISPATCHER
|
||||||
|
bindm = $mod, mouse:272, movewindow
|
||||||
|
bindm = $mod, mouse:273, resizewindow
|
||||||
|
|
||||||
|
# - System
|
||||||
|
# BIND MOD KEY DISPATCHER VALUE
|
||||||
|
bind = $mod, q, killactive # kill window
|
||||||
|
|
||||||
|
# - Terminal
|
||||||
|
# BIND MOD KEY DISPATCHER VALUE
|
||||||
|
bind = $mod, Return, exec, foot
|
||||||
|
bind = $mod SHIFT, Return, exec, alacritty
|
||||||
|
bind = $mod, d, exec, anyrun
|
||||||
|
|
||||||
|
# - Hardware control
|
||||||
|
# BIND MOD KEY DISPATCHER VALUE
|
||||||
|
# https://wiki.archlinux.org/title/WirePlumber
|
||||||
|
bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
|
||||||
|
bindel = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
|
||||||
|
bindl = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
|
||||||
|
bindl = , XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
|
||||||
|
bind = , XF86MonBrightnessUp, exec, brightnessctl set 5%+
|
||||||
|
bind = , XF86MonBrightnessDown, exec, brightnessctl set 5%-
|
||||||
|
bind = , XF86AudioPlay, exec, playerctl play-pause
|
||||||
|
bind = , XF86AudioNext, exec, playerctl next
|
||||||
|
bind = , XF86AudioPrev, exec, playerctl previous
|
||||||
|
bind = , XF86Search, exec, anyrun
|
||||||
|
bind = , XF86PowerOff, exec, shutdown -h now
|
||||||
|
|
||||||
|
# WORKSPACES
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
# - Switch to workspace
|
||||||
|
# BIND MOD KEY DISPATCHER VALUE
|
||||||
|
bind = $mod, 1, workspace, 1
|
||||||
|
bind = $mod, 2, workspace, 2
|
||||||
|
bind = $mod, 3, workspace, 3
|
||||||
|
bind = $mod, 4, workspace, 4
|
||||||
|
bind = $mod, 5, workspace, 5
|
||||||
|
bind = $mod, 6, workspace, 6
|
||||||
|
bind = $mod, 7, workspace, 7
|
||||||
|
bind = $mod, 8, workspace, 8
|
||||||
|
bind = $mod, 9, workspace, 9
|
||||||
|
bind = $mod, 0, workspace, 10
|
||||||
|
|
||||||
|
# - Move focussed window to workspace
|
||||||
|
# BIND MOD KEY DISPATCHER VALUE
|
||||||
|
bind = $mod SHIFT, 1, movetoworkspace, 1
|
||||||
|
bind = $mod SHIFT, 2, movetoworkspace, 2
|
||||||
|
bind = $mod SHIFT, 3, movetoworkspace, 3
|
||||||
|
bind = $mod SHIFT, 4, movetoworkspace, 4
|
||||||
|
bind = $mod SHIFT, 5, movetoworkspace, 5
|
||||||
|
bind = $mod SHIFT, 6, movetoworkspace, 6
|
||||||
|
bind = $mod SHIFT, 7, movetoworkspace, 7
|
||||||
|
bind = $mod SHIFT, 8, movetoworkspace, 8
|
||||||
|
bind = $mod SHIFT, 9, movetoworkspace, 9
|
||||||
|
bind = $mod SHIFT, 0, movetoworkspace, 10
|
||||||
|
|
||||||
|
bind = $mod, mouse_down, workspace, e+1
|
||||||
|
bind = $mod, mouse_up, workspace, e-1
|
||||||
|
|
||||||
|
|
||||||
|
# Window
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
# Move Window
|
||||||
|
bind = $mod SHIFT, left, movewindow, l
|
||||||
|
bind = $mod SHIFT, right, movewindow, r
|
||||||
|
bind = $mod SHIFT, up, movewindow, u
|
||||||
|
bind = $mod SHIFT, down, movewindow, d
|
||||||
|
|
||||||
|
# Focus Window
|
||||||
|
bind = $mod, left, movefocus, l
|
||||||
|
bind = $mod, right, movefocus, r
|
||||||
|
bind = $mod, up, movefocus, u
|
||||||
|
bind = $mod, down, movefocus, d
|
||||||
|
|
||||||
|
# Resize Window
|
||||||
|
bind = $mod CTRL, left, resizeactive, -20 0
|
||||||
|
bind = $mod CTRL, right, resizeactive, 20 0
|
||||||
|
bind = $mod CTRL, up, resizeactive, 0 -20
|
||||||
|
bind = $mod CTRL, down, resizeactive, 0 20
|
||||||
|
|
||||||
|
# MODES
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
# BIND MOD KEY DISPATCHER VALUE
|
||||||
|
bind = $mod SHIFT, d, submap, mode_displays
|
||||||
|
bind = $mod SHIFT, a, submap, mode_move
|
||||||
|
bind = $mod , r, submap, mode_resize
|
||||||
|
bind = $mod SHIFT, s, submap, mode_screenshot
|
||||||
|
bind = $mod SHIFT, e, submap, mode_shutdown
|
||||||
|
|
||||||
|
# LAYOUT
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
# ## Action // Toggle floating ##
|
||||||
|
bind = $mod, space, togglefloating
|
||||||
|
|
||||||
|
# ## Action // Toggle fullscreen ##
|
||||||
|
bind = $mod, f, fullscreen
|
||||||
|
|
||||||
|
# ## Action // Switch to window stacking ##
|
||||||
|
# bind = $mod, s, layout stacking
|
||||||
|
|
||||||
|
# ## Action // Switch to window tabbing ##
|
||||||
|
# bind = $mod, w, layout tabbed
|
||||||
|
|
||||||
|
# ## Action // Toggle window splitting ##
|
||||||
|
# bind = $mod, e, layout toggle split
|
||||||
|
|
||||||
|
|
||||||
|
# Misc
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
# -- Screenshots --
|
||||||
|
bind = , Print, exec, hyprshot -m output -o ~/Pictures/Screenshots -- imv
|
||||||
|
bind = $mod, Print, exec, hyprshot -m window -o ~/Pictures/Screenshots -- imv
|
||||||
|
bind = CTRL, Print, exec, hyprshot -m region -o ~/Pictures/Screenshots
|
||||||
|
|
||||||
|
# -- Others --
|
||||||
|
bind = CTRL ALT, l, exec, hyprlock
|
||||||
|
bind = $mod SHIFT, x, exec, wlogout
|
||||||
|
bind = $mod, n, exec, nm-connection-editor # need install network-manager-applet
|
||||||
@@ -0,0 +1,137 @@
|
|||||||
|
# WINDOWS AND BORDERS
|
||||||
|
# ================================================
|
||||||
|
general {
|
||||||
|
layout = dwindle
|
||||||
|
|
||||||
|
# Cursor
|
||||||
|
no_focus_fallback = true
|
||||||
|
|
||||||
|
# Gaps
|
||||||
|
gaps_in = 5
|
||||||
|
gaps_out = 5
|
||||||
|
|
||||||
|
# Borders
|
||||||
|
border_size = 2
|
||||||
|
col.active_border = 0xff4477ff
|
||||||
|
col.inactive_border = 0xff2f343f
|
||||||
|
|
||||||
|
# Resize
|
||||||
|
resize_on_border = false
|
||||||
|
hover_icon_on_border = false
|
||||||
|
|
||||||
|
# Allow tearing (you must add a window rule to the window to allow tearing)
|
||||||
|
allow_tearing = false
|
||||||
|
}
|
||||||
|
|
||||||
|
cursor {
|
||||||
|
inactive_timeout = 900 # Hide the cursor after n ms (also works on screenlock)
|
||||||
|
no_warps = false # Never move the cursor automatically
|
||||||
|
}
|
||||||
|
|
||||||
|
ecosystem {
|
||||||
|
no_donation_nag = true
|
||||||
|
}
|
||||||
|
|
||||||
|
misc {
|
||||||
|
# Allow windows to steal focus - (only xorg apps currently)
|
||||||
|
focus_on_activate = false
|
||||||
|
|
||||||
|
# Enable if you use personalized wallpapers
|
||||||
|
disable_hyprland_logo = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# VISUAL EFFECTS
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
# See: https://wiki.hyprland.org/Configuring/Variables
|
||||||
|
decoration {
|
||||||
|
|
||||||
|
# Round borders
|
||||||
|
rounding = 8
|
||||||
|
|
||||||
|
# Shadow
|
||||||
|
shadow {
|
||||||
|
enabled = true
|
||||||
|
range = 4
|
||||||
|
render_power = 3
|
||||||
|
color = rgba(1a1a1aee)
|
||||||
|
}
|
||||||
|
|
||||||
|
active_opacity=1.0
|
||||||
|
inactive_opacity=0.9
|
||||||
|
fullscreen_opacity=1.0
|
||||||
|
|
||||||
|
blur {
|
||||||
|
enabled=true
|
||||||
|
new_optimizations = true
|
||||||
|
size=3 # minimum 1
|
||||||
|
passes=1 # minimum 1, more passes = more resource intensive.
|
||||||
|
ignore_opacity=false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# See: https://wiki.hyprland.org/Configuring/Animations
|
||||||
|
animations {
|
||||||
|
enabled = yes
|
||||||
|
|
||||||
|
# BEZIERS NAME X0 Y0 X1 Y1
|
||||||
|
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
|
||||||
|
|
||||||
|
# ANIMATION NAME ON SPEED CURVE STYLE
|
||||||
|
animation = windows, 1, 2, myBezier
|
||||||
|
animation = windowsOut, 1, 2, default, popin 80%
|
||||||
|
animation = border, 1, 5, default
|
||||||
|
animation = fadeIn, 1, 2, default
|
||||||
|
animation = fadeOut, 1, 2, default
|
||||||
|
animation = workspaces, 1, 6, default, fade
|
||||||
|
animation = specialWorkspace, 1, 3, myBezier, slide
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# LAYOUT DETAILS
|
||||||
|
# ================================================
|
||||||
|
|
||||||
|
# See: https://wiki.hyprland.org/Configuring/Dwindle-Layout/
|
||||||
|
dwindle {
|
||||||
|
pseudotile = yes
|
||||||
|
preserve_split = yes
|
||||||
|
}
|
||||||
|
|
||||||
|
# See: https://wiki.hyprland.org/Configuring/Master-Layout
|
||||||
|
master {
|
||||||
|
new_on_top = true
|
||||||
|
}
|
||||||
|
|
||||||
|
# See: https://wiki.hyprland.org/Configuring/Variables
|
||||||
|
gestures {
|
||||||
|
workspace_swipe = off
|
||||||
|
}
|
||||||
|
|
||||||
|
#-- Input ----------------------------------------------------
|
||||||
|
# Configure mouse and touchpad here.
|
||||||
|
input {
|
||||||
|
kb_layout=us
|
||||||
|
kb_variant=
|
||||||
|
kb_model=
|
||||||
|
kb_options=
|
||||||
|
kb_rules=
|
||||||
|
|
||||||
|
# mouse focus will not switch to the hovered window unless the mouse crosses a window boundary
|
||||||
|
follow_mouse=1
|
||||||
|
mouse_refocus=false
|
||||||
|
|
||||||
|
natural_scroll=0
|
||||||
|
touchpad {
|
||||||
|
natural_scroll = 1
|
||||||
|
}
|
||||||
|
force_no_accel=0
|
||||||
|
# repeat_rate=
|
||||||
|
# repeat_delay=
|
||||||
|
numlock_by_default=1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Monitors
|
||||||
|
# ===================================================
|
||||||
|
monitor = , preferred, auto, 1
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
# You can discover a class with 'hyprctl clients'
|
||||||
|
# Check the syntax on: https://wiki.hyprland.org/Configuring/Window-Rules/
|
||||||
|
|
||||||
|
|
||||||
|
# WINDOW RULES
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
# Workspace RULE WINDOW
|
||||||
|
# Terminals
|
||||||
|
windowrulev2 = workspace 1, class:^(foot)$
|
||||||
|
windowrulev2 = workspace 2, class:^(Alacritty)$
|
||||||
|
# Work Chat / Meeting
|
||||||
|
windowrulev2 = workspace 3, class:^(zoom)$
|
||||||
|
# Browsers
|
||||||
|
windowrulev2 = workspace 4, class:^(firefox)$
|
||||||
|
windowrulev2 = workspace 5, class:^(google-chrome)$
|
||||||
|
# Chat
|
||||||
|
windowrulev2 = workspace 6, class:^(QQ)$
|
||||||
|
windowrulev2 = workspace 6, class:^(org.telegram.desktop)$
|
||||||
|
# Music
|
||||||
|
# windowrulev2 = workspace 7, class:^(music)$
|
||||||
|
# Mail / Calendar
|
||||||
|
windowrulev2 = workspace 8, class:^(thunderbird)$,title:^(.*Reminder)
|
||||||
|
# File Manager & Image/PDF Viewer
|
||||||
|
windowrulev2 = workspace 9, class:^(thunder)$
|
||||||
|
# Other
|
||||||
|
windowrulev2 = workspace 10, class:^(code)$ # VS Code
|
||||||
|
windowrulev2 = workspace 10, class:^(org.wireshark.Wireshark)$
|
||||||
|
|
||||||
|
|
||||||
|
# Float RULE WINDOW
|
||||||
|
windowrulev2 = float, class:^(pulsemixer)$
|
||||||
|
windowrulev2 = float, class:^(org.pulseaudio.pavucontrol)$
|
||||||
|
windowrulev2 = float, class:^(nm-connection-editor)$
|
||||||
|
windowrulev2 = float, class:^(feh|imv|Gpicview)$
|
||||||
|
windowrulev2 = float, title:^(File Transfer*)$
|
||||||
|
windowrulev2 = float, title:^(Firefox — Sharing Indicator)$
|
||||||
|
windowrulev2 = float, class:^(firefox)$,title:^(library)
|
||||||
|
windowrulev2 = float, title:^(Save File)$
|
||||||
|
windowrulev2 = float, class:^(blueman-manager)$
|
||||||
|
windowrulev2 = float, class:^(thunderbird)$,title:^(.*Reminder)
|
||||||
|
|
||||||
|
# HOT FIXES
|
||||||
|
# ============================================================================
|
||||||
|
|
||||||
|
# Steam
|
||||||
|
# Fix: Steam menus dissapearing on mouseover
|
||||||
|
windowrulev2 = stayfocused, title:^()$, class:^(steam)$
|
||||||
|
windowrulev2 = minsize 1 1, title:^()$, class:^(steam)$
|
||||||
|
# Fix: Steam starts in a broken position as float window
|
||||||
|
windowrulev2 = tile, class:^(steam)$
|
||||||
|
windowrulev2 = fullscreen, class:^(steam)$
|
||||||
|
# Games
|
||||||
|
# windowrulev2 = immediate, class:^(steam_app_xxx)$ # game 1
|
||||||
|
|
||||||
|
# wlogout
|
||||||
|
windowrulev2 = float, class:^(wlogout)$
|
||||||
|
windowrulev2 = move 0 0, class:^(wlogout)$
|
||||||
|
windowrulev2 = size 100% 100%, class:^(wlogout)$
|
||||||
|
windowrulev2 = animation slide, class:^(wlogout)$
|
||||||
@@ -0,0 +1,37 @@
|
|||||||
|
|
||||||
|
general {
|
||||||
|
lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple instances
|
||||||
|
before_sleep_cmd = loginctl lock-session # lock before suspend
|
||||||
|
after_sleep_cmd = hyprctl dispatch dpms on # resume dpms after suspend
|
||||||
|
ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests
|
||||||
|
}
|
||||||
|
|
||||||
|
# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight.
|
||||||
|
# listener {
|
||||||
|
# timeout = 180 # 3 minutes
|
||||||
|
# on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight.
|
||||||
|
# on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight.
|
||||||
|
# }
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 180 # 3min.
|
||||||
|
on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
|
||||||
|
on-resume = brightnessctl -r # monitor backlight restore.
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 300 # 5 minutes
|
||||||
|
on-timeout = pidof hyprlock || hyprlock # lock screen
|
||||||
|
on-resume = hyprctl dispatch dpms on # monitor wake up
|
||||||
|
}
|
||||||
|
|
||||||
|
listener {
|
||||||
|
timeout = 360 # 6 minutes
|
||||||
|
on-timeout = hyprctl dispatch dpms off # screen off
|
||||||
|
on-resume = hyprctl dispatch dpms on && brightnessctl -r # monitor wake up & screen on
|
||||||
|
}
|
||||||
|
|
||||||
|
# listener {
|
||||||
|
# timeout = 600 # 10min
|
||||||
|
# on-timeout = systemctl suspend # suspend pc
|
||||||
|
# }
|
||||||
@@ -1,195 +0,0 @@
|
|||||||
#-- Input ----------------------------------------------------
|
|
||||||
# Configure mouse and touchpad here.
|
|
||||||
input {
|
|
||||||
kb_layout=us
|
|
||||||
kb_variant=
|
|
||||||
kb_model=
|
|
||||||
kb_options=
|
|
||||||
kb_rules=
|
|
||||||
|
|
||||||
# mouse focus will not switch to the hovered window unless the mouse crosses a window boundary
|
|
||||||
follow_mouse=1
|
|
||||||
mouse_refocus=false
|
|
||||||
|
|
||||||
natural_scroll=0
|
|
||||||
touchpad {
|
|
||||||
natural_scroll = 1
|
|
||||||
}
|
|
||||||
force_no_accel=0
|
|
||||||
# repeat_rate=
|
|
||||||
# repeat_delay=
|
|
||||||
numlock_by_default=1
|
|
||||||
}
|
|
||||||
|
|
||||||
#-- General ----------------------------------------------------
|
|
||||||
# General settings like MOD key, Gaps, Colors, etc.
|
|
||||||
general {
|
|
||||||
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
|
|
||||||
|
|
||||||
active_opacity=1.0
|
|
||||||
inactive_opacity=0.9
|
|
||||||
fullscreen_opacity=1.0
|
|
||||||
|
|
||||||
blur {
|
|
||||||
enabled=true
|
|
||||||
size=3 # minimum 1
|
|
||||||
passes=1 # minimum 1, more passes = more resource intensive.
|
|
||||||
ignore_opacity=false
|
|
||||||
}
|
|
||||||
|
|
||||||
# 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=NAME,ONOFF,SPEED,CURVE,STYLE
|
|
||||||
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 = foot
|
|
||||||
$app_launcher = ~/.config/hypr/scripts/menu
|
|
||||||
$volume = ~/.config/hypr/scripts/volume
|
|
||||||
$backlight = ~/.config/hypr/scripts/brightness
|
|
||||||
$lockscreen = ~/.config/hypr/scripts/lockscreen
|
|
||||||
$wlogout = ~/.config/hypr/scripts/wlogout
|
|
||||||
$colorpicker = ~/.config/hypr/scripts/colorpicker
|
|
||||||
$files = thunar
|
|
||||||
$browser = firefox
|
|
||||||
|
|
||||||
# -- Terminal --
|
|
||||||
bind=SUPER,Return,exec,$term
|
|
||||||
|
|
||||||
# -- App Launcher --
|
|
||||||
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,hyprshot -m output -o ~/Pictures/Screenshots -- imv
|
|
||||||
bind=SUPER,Print,exec,hyprshot -m window -o ~/Pictures/Screenshots -- imv
|
|
||||||
# flameshot do not recognize hyprland as a wayland compositor, so we set it to sway here
|
|
||||||
bind=CTRL,Print,exec,XDG_CURRENT_DESKTOP=sway flameshot gui --raw -p ~/Pictures/Screenshots | wl-copy
|
|
||||||
# bind=CTRL,Print,exec,hyprshot -m region -o ~/Pictures/Screenshots -- imv
|
|
||||||
|
|
||||||
# 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 managed 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
|
|
||||||
|
|
||||||
@@ -49,8 +49,3 @@ default-timeout=5000
|
|||||||
border-color=#f38ba8
|
border-color=#f38ba8
|
||||||
text-color=#f38ba8
|
text-color=#f38ba8
|
||||||
default-timeout=0
|
default-timeout=0
|
||||||
|
|
||||||
[category=mpd]
|
|
||||||
border-color=#f9e2af
|
|
||||||
default-timeout=2000
|
|
||||||
group-by=category
|
|
||||||
|
|||||||
@@ -1,17 +0,0 @@
|
|||||||
# Recommended location for database
|
|
||||||
db_file "~/.config/mpd/database"
|
|
||||||
|
|
||||||
# If running mpd using systemd, delete this line to log directly to systemd.
|
|
||||||
log_file "syslog"
|
|
||||||
|
|
||||||
# The music directory is by default the XDG directory, uncomment to amend and choose a different directory
|
|
||||||
#music_directory "~/Music"
|
|
||||||
|
|
||||||
# Uncomment to refresh the database whenever files in the music_directory are changed
|
|
||||||
#auto_update "yes"
|
|
||||||
|
|
||||||
# Uncomment to enable the functionalities
|
|
||||||
#playlist_directory "~/.config/mpd/playlists"
|
|
||||||
#pid_file "~/.config/mpd/pid"
|
|
||||||
#state_file "~/.local/state/mpd/state"
|
|
||||||
#sticker_file "~/.config/mpd/sticker.sql"
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
## Script To Manage Brightness (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
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#!/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
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/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 %%
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
if [[ ! $(pidof anyrun) ]]; then
|
|
||||||
anyrun
|
|
||||||
else
|
|
||||||
pkill anyrun
|
|
||||||
fi
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
## launch mako with alt config
|
|
||||||
|
|
||||||
CONFIG="$HOME/.config/hypr/mako/config"
|
|
||||||
|
|
||||||
if [[ ! $(pidof mako) ]]; then
|
|
||||||
mako --config ${CONFIG}
|
|
||||||
fi
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
## Fix anyrun
|
|
||||||
## https://github.com/anyrun-org/anyrun/issues/153
|
|
||||||
ln -s $XDG_RUNTIME_DIR/hypr /tmp/hypr
|
|
||||||
|
|
||||||
## 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 via a wallpaper.service
|
|
||||||
# it will by start by home-manager automatically, do not need to restart it here.
|
|
||||||
# systemctl --user restart wallpaper.service
|
|
||||||
|
|
||||||
# Launch notification daemon (mako)
|
|
||||||
~/.config/hypr/scripts/notifications &
|
|
||||||
|
|
||||||
# Launch statusbar (waybar)
|
|
||||||
~/.config/hypr/scripts/statusbar &
|
|
||||||
|
|
||||||
# Start mpd
|
|
||||||
exec mpd &
|
|
||||||
@@ -1,10 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
## launch waybar with alt config
|
|
||||||
|
|
||||||
CONFIG="$HOME/.config/hypr/waybar/config.jsonc"
|
|
||||||
STYLE="$HOME/.config/hypr/waybar/style.css"
|
|
||||||
|
|
||||||
if [[ ! $(pidof waybar) ]]; then
|
|
||||||
waybar --bar main-bar --log-level error --config ${CONFIG} --style ${STYLE}
|
|
||||||
fi
|
|
||||||
@@ -1,76 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
## Script To Manage Speaker Volume(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
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
#!/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
|
|
||||||
@@ -5,7 +5,6 @@
|
|||||||
"modules-left": ["custom/launcher", "temperature", "backlight", "hyprland/workspaces"],
|
"modules-left": ["custom/launcher", "temperature", "backlight", "hyprland/workspaces"],
|
||||||
"modules-center": ["custom/playerctl"],
|
"modules-center": ["custom/playerctl"],
|
||||||
"modules-right": [
|
"modules-right": [
|
||||||
"mpd",
|
|
||||||
"pulseaudio",
|
"pulseaudio",
|
||||||
"battery",
|
"battery",
|
||||||
"memory",
|
"memory",
|
||||||
@@ -21,14 +20,14 @@
|
|||||||
"on-click": "activate",
|
"on-click": "activate",
|
||||||
"format-icons": {
|
"format-icons": {
|
||||||
"1": "",
|
"1": "",
|
||||||
"2": "",
|
"2": "",
|
||||||
"3": "",
|
"3": "",
|
||||||
"4": "",
|
"4": "",
|
||||||
"5": "",
|
"5": "",
|
||||||
"6": "",
|
"6": "",
|
||||||
"7": "",
|
"7": "",
|
||||||
"8": "",
|
"8": "",
|
||||||
"9": "",
|
"9": "",
|
||||||
"10": "〇",
|
"10": "〇",
|
||||||
"focused": "",
|
"focused": "",
|
||||||
"default": "",
|
"default": "",
|
||||||
@@ -44,21 +43,28 @@
|
|||||||
"format-alt": " {:%a %b %d, %G}",
|
"format-alt": " {:%a %b %d, %G}",
|
||||||
},
|
},
|
||||||
"cpu": {
|
"cpu": {
|
||||||
"format": "\udb80\udf5b {usage}%",
|
"format": "CPU {usage}%",
|
||||||
"interval": 1,
|
"interval": 1,
|
||||||
"on-click-middle": "foot btop",
|
"on-click-middle": "foot btop",
|
||||||
"on-click-right": "foot btop",
|
"on-click-right": "foot btop",
|
||||||
},
|
},
|
||||||
|
"memory": {
|
||||||
|
"format": "MEM {percentage}%",
|
||||||
|
"interval": 1,
|
||||||
|
"states": {
|
||||||
|
"warning": 85,
|
||||||
|
},
|
||||||
|
},
|
||||||
"custom/launcher": {
|
"custom/launcher": {
|
||||||
"format": "\uf313 ",
|
"format": "\uf313 ",
|
||||||
"on-click": "$HOME/.config/hypr/scripts/menu",
|
"on-click": "anyrun",
|
||||||
"on-click-middle": "exec default_wall",
|
"on-click-middle": "exec default_wall",
|
||||||
"on-click-right": "exec wallpaper_random",
|
"on-click-right": "exec wallpaper_random",
|
||||||
"tooltip": false,
|
"tooltip": false,
|
||||||
},
|
},
|
||||||
"custom/powermenu": {
|
"custom/powermenu": {
|
||||||
"format": "\uf011",
|
"format": "\uf011",
|
||||||
"on-click": "$HOME/.config/hypr/scripts/wlogout",
|
"on-click": "wlogout",
|
||||||
"tooltip": false,
|
"tooltip": false,
|
||||||
},
|
},
|
||||||
"idle_inhibitor": {
|
"idle_inhibitor": {
|
||||||
@@ -69,35 +75,6 @@
|
|||||||
},
|
},
|
||||||
"tooltip": false,
|
"tooltip": false,
|
||||||
},
|
},
|
||||||
"memory": {
|
|
||||||
"format": "\udb83\udee0 {percentage}%",
|
|
||||||
"interval": 1,
|
|
||||||
"states": {
|
|
||||||
"warning": 85,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"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,
|
|
||||||
},
|
|
||||||
"custom/playerctl": {
|
"custom/playerctl": {
|
||||||
"format": "{icon} <span>{}</span>",
|
"format": "{icon} <span>{}</span>",
|
||||||
"return-type": "json",
|
"return-type": "json",
|
||||||
@@ -113,14 +90,15 @@
|
|||||||
},
|
},
|
||||||
"network": {
|
"network": {
|
||||||
"interval": 5,
|
"interval": 5,
|
||||||
//"interface": "wlan*", // (Optional) To force the use of this interface, set it for netspeed to work
|
"format": "{ifname}",
|
||||||
"format-wifi": " {essid}",
|
"format-wifi": " {essid} ({signalStrength}%) Up: {bandwidthUpBits} Down: {bandwidthDownBits}",
|
||||||
"format-ethernet": " {ipaddr}/{cidr}",
|
"format-ethernet": " {ifname} Up: {bandwidthUpBits} Down: {bandwidthDownBits}",
|
||||||
"format-linked": " {ifname} (No IP)",
|
"format-disconnected": "Disconnected ⚠",
|
||||||
"format-disconnected": "睊 Disconnected",
|
"tooltip-format": " {ifname} via {gwaddri}",
|
||||||
"format-disabled": "睊 Disabled",
|
"tooltip-format-wifi": " {ifname} @ {essid}\nIP: {ipaddr}\nStrength: {signalStrength}%\nFreq: {frequency}MHz\nUp: {bandwidthUpBits} Down: {bandwidthDownBits}",
|
||||||
"format-alt": " {bandwidthUpBytes} | {bandwidthDownBytes}",
|
"tooltip-format-ethernet": " {ifname}\nIP: {ipaddr}\n up: {bandwidthUpBits} down: {bandwidthDownBits}",
|
||||||
"tooltip-format": " {ifname} via {gwaddr}",
|
"tooltip-format-disconnected": "Disconnected",
|
||||||
|
"max-length": 50,
|
||||||
"on-click-middle": "nm-connection-editor",
|
"on-click-middle": "nm-connection-editor",
|
||||||
"on-click-right": "foot nmtui",
|
"on-click-right": "foot nmtui",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -76,7 +76,6 @@ tooltip label {
|
|||||||
#memory,
|
#memory,
|
||||||
#temperature,
|
#temperature,
|
||||||
#cpu,
|
#cpu,
|
||||||
#mpd,
|
|
||||||
#custom-wall,
|
#custom-wall,
|
||||||
#temperature,
|
#temperature,
|
||||||
#backlight,
|
#backlight,
|
||||||
@@ -150,13 +149,4 @@ tooltip label {
|
|||||||
padding-right: 8px;
|
padding-right: 8px;
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
}
|
}
|
||||||
#mpd.paused {
|
|
||||||
color: #414868;
|
|
||||||
font-style: italic;
|
|
||||||
}
|
|
||||||
#mpd.stopped {
|
|
||||||
background: transparent;
|
|
||||||
}
|
|
||||||
#mpd {
|
|
||||||
color: #c0caf5;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ with lib; let
|
|||||||
cfg = config.modules.desktop.hyprland;
|
cfg = config.modules.desktop.hyprland;
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
anyrun.homeManagerModules.default
|
# anyrun.homeManagerModules.default # the module is already in hm now.
|
||||||
./options
|
./options
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,41 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
|
config,
|
||||||
lib,
|
lib,
|
||||||
nur-ryan4yin,
|
nur-ryan4yin,
|
||||||
...
|
...
|
||||||
}: let
|
}: let
|
||||||
package = pkgs.hyprland;
|
package = pkgs.hyprland;
|
||||||
in {
|
in {
|
||||||
|
xdg.configFile = let
|
||||||
|
mkSymlink = config.lib.file.mkOutOfStoreSymlink;
|
||||||
|
hyprPath = "${config.home.homeDirectory}/nix-config/home/linux/gui/hyprland/conf";
|
||||||
|
in {
|
||||||
|
"mako".source = mkSymlink "${hyprPath}/mako";
|
||||||
|
"waybar".source = mkSymlink "${hyprPath}/waybar";
|
||||||
|
"wlogout".source = mkSymlink "${hyprPath}/wlogout";
|
||||||
|
"hypr/hypridle.conf".source = mkSymlink "${hyprPath}/hypridle.conf";
|
||||||
|
"hypr/configs".source = mkSymlink "${hyprPath}/configs";
|
||||||
|
};
|
||||||
|
|
||||||
|
# status bar
|
||||||
|
programs.waybar = {
|
||||||
|
enable = true;
|
||||||
|
systemd.enable = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# screen locker
|
||||||
|
programs.hyprlock.enable = true;
|
||||||
|
|
||||||
|
# Logout Menu
|
||||||
|
programs.wlogout.enable = true;
|
||||||
|
|
||||||
|
# Hyprland idle daemon
|
||||||
|
services.hypridle.enable = true;
|
||||||
|
|
||||||
|
# notification daemon, the same as dunst
|
||||||
|
services.mako.enable = true;
|
||||||
|
|
||||||
# NOTE:
|
# NOTE:
|
||||||
# We have to enable hyprland/i3's systemd user service in home-manager,
|
# We have to enable hyprland/i3's systemd user service in home-manager,
|
||||||
# so that gammastep/wallpaper-switcher's user service can be start correctly!
|
# so that gammastep/wallpaper-switcher's user service can be start correctly!
|
||||||
@@ -14,7 +44,16 @@ in {
|
|||||||
inherit package;
|
inherit package;
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
source = "${nur-ryan4yin.packages.${pkgs.system}.catppuccin-hyprland}/themes/mocha.conf";
|
source = let
|
||||||
|
configPath = "${config.home.homeDirectory}/.config/hypr/configs";
|
||||||
|
in [
|
||||||
|
"${nur-ryan4yin.packages.${pkgs.system}.catppuccin-hyprland}/themes/mocha.conf"
|
||||||
|
"${configPath}/exec.conf"
|
||||||
|
"${configPath}/fcitx5.conf"
|
||||||
|
"${configPath}/keybindings.conf"
|
||||||
|
"${configPath}/settings.conf"
|
||||||
|
"${configPath}/windowrules.conf"
|
||||||
|
];
|
||||||
env = [
|
env = [
|
||||||
"NIXOS_OZONE_WL,1" # for any ozone-based browser & electron apps to run on wayland
|
"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_ENABLE_WAYLAND,1" # for firefox to run on wayland
|
||||||
@@ -27,7 +66,6 @@ in {
|
|||||||
"GDK_BACKEND,wayland"
|
"GDK_BACKEND,wayland"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
extraConfig = builtins.readFile ../conf/hyprland.conf;
|
|
||||||
# gammastep/wallpaper-switcher need this to be enabled.
|
# gammastep/wallpaper-switcher need this to be enabled.
|
||||||
systemd = {
|
systemd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -41,30 +79,4 @@ in {
|
|||||||
source = "${package}/bin/Hyprland";
|
source = "${package}/bin/Hyprland";
|
||||||
executable = true;
|
executable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
# hyprland configs, based on https://github.com/notwidow/hyprland
|
|
||||||
xdg.configFile = {
|
|
||||||
"hypr/mako" = {
|
|
||||||
source = ../conf/mako;
|
|
||||||
recursive = true;
|
|
||||||
};
|
|
||||||
"hypr/scripts" = {
|
|
||||||
source = ../conf/scripts;
|
|
||||||
recursive = true;
|
|
||||||
};
|
|
||||||
"hypr/waybar" = {
|
|
||||||
source = ../conf/waybar;
|
|
||||||
recursive = true;
|
|
||||||
};
|
|
||||||
"hypr/wlogout" = {
|
|
||||||
source = ../conf/wlogout;
|
|
||||||
recursive = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# music player - mpd
|
|
||||||
"mpd" = {
|
|
||||||
source = ../conf/mpd;
|
|
||||||
recursive = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,31 +1,20 @@
|
|||||||
{
|
{
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
|
|
||||||
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
waybar # the status bar
|
|
||||||
swaybg # the wallpaper
|
swaybg # the wallpaper
|
||||||
swayidle # the idle timeout
|
|
||||||
swaylock # locking the screen
|
|
||||||
wlogout # logout menu
|
|
||||||
wl-clipboard # copying and pasting
|
wl-clipboard # copying and pasting
|
||||||
hyprpicker # color picker
|
hyprpicker # color picker
|
||||||
|
brightnessctl
|
||||||
|
|
||||||
pkgs-unstable.hyprshot # screen shot
|
hyprshot # screen shot
|
||||||
grim # taking screenshots
|
|
||||||
slurp # selecting a region to screenshot
|
|
||||||
wf-recorder # screen recording
|
wf-recorder # screen recording
|
||||||
|
|
||||||
mako # the notification daemon, the same as dunst
|
|
||||||
|
|
||||||
yad # a fork of zenity, for creating dialogs
|
|
||||||
|
|
||||||
# audio
|
# audio
|
||||||
alsa-utils # provides amixer/alsamixer/...
|
alsa-utils # provides amixer/alsamixer/...
|
||||||
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
|
networkmanagerapplet # provide GUI app: nm-connection-editor
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,44 +3,13 @@
|
|||||||
nur-ryan4yin,
|
nur-ryan4yin,
|
||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
# refer to https://codeberg.org/dnkl/foot/src/branch/master/foot.ini
|
home.packages = with pkgs; [
|
||||||
xdg.configFile."foot/foot.ini".text =
|
# firefox-wayland
|
||||||
''
|
nixpaks.firefox
|
||||||
[main]
|
nixpaks.firefox-desktop-item
|
||||||
dpi-aware=yes
|
|
||||||
font=JetBrainsMono Nerd Font:size=13
|
|
||||||
shell=${pkgs.bash}/bin/bash --login -c 'nu --login --interactive'
|
|
||||||
term=foot
|
|
||||||
initial-window-size-pixels=3840x2160
|
|
||||||
initial-window-mode=windowed
|
|
||||||
pad=0x0 # optionally append 'center'
|
|
||||||
resize-delay-ms=10
|
|
||||||
|
|
||||||
[mouse]
|
|
||||||
hide-when-typing=yes
|
|
||||||
''
|
|
||||||
+ (builtins.readFile "${nur-ryan4yin.packages.${pkgs.system}.catppuccin-foot}/catppuccin-mocha.conf");
|
|
||||||
|
|
||||||
home.packages = [
|
|
||||||
# pkgs.firefox-wayland
|
|
||||||
pkgs.nixpaks.firefox
|
|
||||||
pkgs.nixpaks.firefox-desktop-item
|
|
||||||
];
|
];
|
||||||
|
|
||||||
programs = {
|
programs = {
|
||||||
# a wayland only terminal emulator
|
|
||||||
foot = {
|
|
||||||
enable = true;
|
|
||||||
# foot can also be run in a server mode. In this mode, one process hosts multiple windows.
|
|
||||||
# All Wayland communication, VT parsing and rendering is done in the server process.
|
|
||||||
# New windows are opened by running footclient, which remains running until the terminal window is closed.
|
|
||||||
#
|
|
||||||
# Advantages to run foot in server mode including reduced memory footprint and startup time.
|
|
||||||
# The downside is a performance penalty. If one window is very busy with, for example, producing output,
|
|
||||||
# then other windows will suffer. Also, should the server process crash, all windows will be gone.
|
|
||||||
server.enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# source code: https://github.com/nix-community/home-manager/blob/master/modules/programs/chromium.nix
|
# source code: https://github.com/nix-community/home-manager/blob/master/modules/programs/chromium.nix
|
||||||
google-chrome = {
|
google-chrome = {
|
||||||
enable = true;
|
enable = true;
|
||||||
@@ -62,35 +31,25 @@
|
|||||||
|
|
||||||
vscode = {
|
vscode = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# let vscode sync and update its configuration & extensions across devices, using github account.
|
|
||||||
userSettings = {};
|
|
||||||
package =
|
package =
|
||||||
(pkgs.vscode.override
|
pkgs.vscode.override
|
||||||
{
|
{
|
||||||
isInsiders = true;
|
isInsiders = false;
|
||||||
# https://wiki.archlinux.org/title/Wayland#Electron
|
# https://wiki.archlinux.org/title/Wayland#Electron
|
||||||
commandLineArgs = [
|
commandLineArgs = [
|
||||||
"--ozone-platform-hint=auto"
|
"--ozone-platform-hint=auto"
|
||||||
"--ozone-platform=wayland"
|
"--ozone-platform=wayland"
|
||||||
# make it use GTK_IM_MODULE if it runs with Gtk4, so fcitx5 can work with it.
|
# 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)
|
# (only supported by chromium/chrome at this time, not electron)
|
||||||
"--gtk-version=4"
|
"--gtk-version=4"
|
||||||
# make it use text-input-v1, which works for kwin 5.27 and weston
|
# make it use text-input-v1, which works for kwin 5.27 and weston
|
||||||
"--enable-wayland-ime"
|
"--enable-wayland-ime"
|
||||||
|
|
||||||
# TODO: fix https://github.com/microsoft/vscode/issues/187436
|
# TODO: fix https://github.com/microsoft/vscode/issues/187436
|
||||||
# still not works...
|
# still not works...
|
||||||
"--password-store=gnome" # use gnome-keyring as password store
|
"--password-store=gnome" # use gnome-keyring as password store
|
||||||
];
|
];
|
||||||
})
|
};
|
||||||
.overrideAttrs (oldAttrs: rec {
|
|
||||||
# Use VSCode Insiders to fix crash: https://github.com/NixOS/nixpkgs/issues/246509
|
|
||||||
src = builtins.fetchTarball {
|
|
||||||
url = "https://update.code.visualstudio.com/latest/linux-x64/insider";
|
|
||||||
sha256 = "0k2sh7rb6mrx9d6bkk2744ry4g17d13xpnhcisk4akl4x7dn6a83";
|
|
||||||
};
|
|
||||||
version = "latest";
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
# Use xdg-desktop-portal-gtk for every portal interface...
|
# Use xdg-desktop-portal-gtk for every portal interface...
|
||||||
default = [
|
default = [
|
||||||
"gtk"
|
"gtk"
|
||||||
|
"hyprland"
|
||||||
];
|
];
|
||||||
# except for the secret portal, which is handled by gnome-keyring
|
# except for the secret portal, which is handled by gnome-keyring
|
||||||
"org.freedesktop.impl.portal.Secret" = [
|
"org.freedesktop.impl.portal.Secret" = [
|
||||||
@@ -21,10 +22,12 @@
|
|||||||
# xdg-open is used by almost all programs to open a unknown file/uri
|
# xdg-open is used by almost all programs to open a unknown file/uri
|
||||||
# alacritty as an example, it use xdg-open as default, but you can also custom this behavior
|
# alacritty as an example, it use xdg-open as default, but you can also custom this behavior
|
||||||
# and vscode has open like `External Uri Openers`
|
# and vscode has open like `External Uri Openers`
|
||||||
xdgOpenUsePortal = false;
|
xdgOpenUsePortal = true;
|
||||||
|
# ls /etc/profiles/per-user/ryan/share/xdg-desktop-portal/portals
|
||||||
extraPortals = with pkgs; [
|
extraPortals = with pkgs; [
|
||||||
xdg-desktop-portal-gtk # for gtk
|
xdg-desktop-portal-gtk # for provides file picker / OpenURI
|
||||||
# xdg-desktop-portal-kde # for kde
|
# xdg-desktop-portal-wlr
|
||||||
|
xdg-desktop-portal-hyprland # for Hyprland
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
+1
-1
@@ -11,7 +11,7 @@
|
|||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"ref": "nixos-24.05",
|
"ref": "nixos-25.05",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
# a flake for testing
|
# a flake for testing
|
||||||
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-24.05";
|
inputs.nixpkgs.url = "github:nixos/nixpkgs/nixos-25.05";
|
||||||
outputs = {nixpkgs, ...}: let
|
outputs = {nixpkgs, ...}: let
|
||||||
system = "x86_64-linux";
|
system = "x86_64-linux";
|
||||||
pkgs = import nixpkgs {inherit system;};
|
pkgs = import nixpkgs {inherit system;};
|
||||||
|
|||||||
@@ -38,5 +38,5 @@ in {
|
|||||||
# 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 = "24.05"; # Did you read the comment?
|
system.stateVersion = "25.05"; # Did you read the comment?
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
{
|
{config, ...}: let
|
||||||
|
hostName = "shoukei"; # Define your hostname.
|
||||||
|
in {
|
||||||
modules.desktop.hyprland = {
|
modules.desktop.hyprland = {
|
||||||
nvidia = false;
|
nvidia = false;
|
||||||
settings = {
|
settings = {
|
||||||
@@ -11,16 +13,5 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
programs.ssh = {
|
programs.ssh.matchBlocks."github.com".identityFile = "${config.home.homeDirectory}/.ssh/${hostName}";
|
||||||
enable = true;
|
|
||||||
extraConfig = ''
|
|
||||||
Host github.com
|
|
||||||
Hostname github.com
|
|
||||||
# github is controlled by shoukei~
|
|
||||||
IdentityFile ~/.ssh/shoukei
|
|
||||||
# Specifies that ssh should only use the identity file explicitly configured above
|
|
||||||
# required to prevent sending default identity files first.
|
|
||||||
IdentitiesOnly yes
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
_:
|
_:
|
||||||
#############################################################
|
#############################################################
|
||||||
#
|
#
|
||||||
# Fern - MacBook Pro 2022 13-inch M2 16G, mainly for business.
|
# Fern - MacBook Pro 2022 13-inch M2 16G.
|
||||||
#
|
#
|
||||||
#############################################################
|
#############################################################
|
||||||
let
|
let
|
||||||
|
|||||||
@@ -1,18 +1,5 @@
|
|||||||
{
|
{config, ...}: let
|
||||||
programs.ssh = {
|
hostName = "fern";
|
||||||
enable = true;
|
in {
|
||||||
extraConfig = ''
|
programs.ssh.matchBlocks."github.com".identityFile = "${config.home.homeDirectory}/.ssh/${hostName}";
|
||||||
Host github.com
|
|
||||||
Hostname github.com
|
|
||||||
# github is controlled by fern~
|
|
||||||
IdentityFile ~/.ssh/fern
|
|
||||||
# Specifies that ssh should only use the identity file explicitly configured above
|
|
||||||
# required to prevent sending default identity files first.
|
|
||||||
IdentitiesOnly yes
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
|
|
||||||
modules.editors.emacs = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
_:
|
||||||
|
#############################################################
|
||||||
|
#
|
||||||
|
# Fern - MacBook Pro 2024 14-inch M4 Pro 48G, mainly for business.
|
||||||
|
#
|
||||||
|
#############################################################
|
||||||
|
let
|
||||||
|
hostname = "frieren";
|
||||||
|
in {
|
||||||
|
networking.hostName = hostname;
|
||||||
|
networking.computerName = hostname;
|
||||||
|
system.defaults.smb.NetBIOSName = hostname;
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{config, ...}: let
|
||||||
|
hostName = "frieren";
|
||||||
|
in {
|
||||||
|
programs.ssh.matchBlocks."github.com".identityFile = "${config.home.homeDirectory}/.ssh/${hostName}";
|
||||||
|
}
|
||||||
@@ -1,17 +1,2 @@
|
|||||||
_: {
|
_: {
|
||||||
programs.ssh = {
|
|
||||||
enable = true;
|
|
||||||
extraConfig = ''
|
|
||||||
Host github.com
|
|
||||||
Hostname github.com
|
|
||||||
# github is controlled by harmonica~
|
|
||||||
IdentityFile ~/.ssh/harmonica
|
|
||||||
# Specifies that ssh should only use the identity file explicitly configured above
|
|
||||||
# required to prevent sending default identity files first.
|
|
||||||
IdentitiesOnly yes
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
modules.editors.emacs = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,11 @@
|
|||||||
#############################################################
|
#############################################################
|
||||||
let
|
let
|
||||||
hostName = "ai"; # Define your hostname.
|
hostName = "ai"; # Define your hostname.
|
||||||
|
|
||||||
|
inherit (myvars.networking) defaultGateway defaultGateway6 nameservers;
|
||||||
|
inherit (myvars.networking.hostsAddr.${hostName}) iface ipv4 ipv6;
|
||||||
|
ipv4WithMask = "${ipv4}/24";
|
||||||
|
ipv6WithMask = "${ipv6}/64";
|
||||||
in {
|
in {
|
||||||
imports = [
|
imports = [
|
||||||
./netdev-mount.nix
|
./netdev-mount.nix
|
||||||
@@ -19,13 +24,38 @@ in {
|
|||||||
|
|
||||||
networking = {
|
networking = {
|
||||||
inherit hostName;
|
inherit hostName;
|
||||||
inherit (myvars.networking) defaultGateway nameservers;
|
|
||||||
inherit (myvars.networking.hostsInterface.${hostName}) interfaces;
|
|
||||||
|
|
||||||
# desktop need its cli for status bar
|
# desktop need its cli for status bar & wifi network.
|
||||||
networkmanager.enable = true;
|
networkmanager.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
networking.useNetworkd = true;
|
||||||
|
systemd.network.enable = true;
|
||||||
|
|
||||||
|
# Add ipv4 address to the bridge.
|
||||||
|
systemd.network.networks."10-${iface}" = {
|
||||||
|
matchConfig.Name = [iface];
|
||||||
|
networkConfig = {
|
||||||
|
Address = [ipv4WithMask ipv6WithMask];
|
||||||
|
DNS = nameservers;
|
||||||
|
DHCP = "ipv6"; # enable DHCPv6 only, so we can get a GUA.
|
||||||
|
IPv6AcceptRA = true; # for Stateless IPv6 Autoconfiguraton (SLAAC)
|
||||||
|
LinkLocalAddressing = "ipv6";
|
||||||
|
};
|
||||||
|
routes = [
|
||||||
|
{
|
||||||
|
Destination = "0.0.0.0/0";
|
||||||
|
Gateway = defaultGateway;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
Destination = "::/0";
|
||||||
|
Gateway = defaultGateway6;
|
||||||
|
GatewayOnLink = true; # it's a gateway on local link.
|
||||||
|
}
|
||||||
|
];
|
||||||
|
linkConfig.RequiredForOnline = "routable";
|
||||||
|
};
|
||||||
|
|
||||||
# conflict with feature: containerd-snapshotter
|
# conflict with feature: containerd-snapshotter
|
||||||
# virtualisation.docker.storageDriver = "btrfs";
|
# virtualisation.docker.storageDriver = "btrfs";
|
||||||
|
|
||||||
@@ -35,5 +65,5 @@ in {
|
|||||||
# 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 = "24.05"; # Did you read the comment?
|
system.stateVersion = "25.05"; # Did you read the comment?
|
||||||
}
|
}
|
||||||
|
|||||||
+5
-22
@@ -1,29 +1,12 @@
|
|||||||
{
|
{config, ...}: {
|
||||||
modules.desktop = {
|
modules.desktop = {
|
||||||
hyprland = {
|
hyprland = {
|
||||||
nvidia = true;
|
nvidia = true;
|
||||||
settings = {
|
settings.source = [
|
||||||
# Configure your Display resolution, offset, scale and Monitors here, use `hyprctl monitors` to get the info.
|
"${config.home.homeDirectory}/nix-config/hosts/idols-ai/hypr-hardware.conf"
|
||||||
# highres: get the best possible resolution
|
];
|
||||||
# auto: position automatically
|
|
||||||
# 1.5: scale to 1.5 times
|
|
||||||
# bitdepth,10: enable 10 bit support
|
|
||||||
monitor = "DP-2,highres,auto,1.5,bitdepth,10";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
modules.editors.emacs = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
programs.ssh = {
|
programs.ssh.matchBlocks."github.com".identityFile = "${config.home.homeDirectory}/.ssh/idols-ai";
|
||||||
enable = true;
|
|
||||||
extraConfig = ''
|
|
||||||
Host github.com
|
|
||||||
IdentityFile ~/.ssh/idols-ai
|
|
||||||
# Specifies that ssh should only use the identity file explicitly configured above
|
|
||||||
# required to prevent sending default identity files first.
|
|
||||||
IdentitiesOnly yes
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
# https://wiki.hyprland.org/Configuring/Monitors/
|
||||||
|
#
|
||||||
|
# Configure your Display resolution, offset, scale and Monitors here, use `hyprctl monitors` to get the info.
|
||||||
|
# highres: get the best possible resolution
|
||||||
|
# auto: position automatically
|
||||||
|
# 1.5: scale to 1.5 times
|
||||||
|
# bitdepth,10: enable 10 bit support
|
||||||
|
#
|
||||||
|
# P32A2V - 3840x2160@144
|
||||||
|
monitor=DP-2, highres@highrr, 0x0, 1.5, bitdepth,10, cm, hdr, sdrbrightness, 1.3, sdrsaturation, 1
|
||||||
|
# 27D1U - 3840x2160@60
|
||||||
|
monitor=HDMI-A-1, highres@highrr, auto-right, 1.5, bitdepth,10, cm, hdr, sdrbrightness, 1.3, sdrsaturation, 1
|
||||||
|
|
||||||
|
|
||||||
|
# Bind Workspace to Monitors
|
||||||
|
# Terminals
|
||||||
|
workspace = 1, monitor:HDMI-A-1
|
||||||
|
workspace = 2, monitor:HDMI-A-1
|
||||||
|
# Work Chat / Meeting
|
||||||
|
workspace = 3, monitor:HDMI-A-1
|
||||||
|
# Browsers
|
||||||
|
workspace = 4, monitor:DP-2
|
||||||
|
workspace = 5, monitor:DP-2
|
||||||
|
# Chat
|
||||||
|
workspace = 6, monitor:HDMI-A-1
|
||||||
|
# Music
|
||||||
|
workspace = 7, monitor:HDMI-A-1
|
||||||
|
# Mail / Calendar
|
||||||
|
workspace = 8, monitor:DP-2
|
||||||
|
# File Manager & Image/PDF Viewer
|
||||||
|
workspace = 9, monitor:DP-2
|
||||||
|
# Other
|
||||||
|
workspace = 10, monitor:HDMI-A-1
|
||||||
@@ -111,6 +111,9 @@
|
|||||||
".config/Code/User"
|
".config/Code/User"
|
||||||
".config/Code - Insiders/User"
|
".config/Code - Insiders/User"
|
||||||
|
|
||||||
|
# zed editor
|
||||||
|
".config/zed"
|
||||||
|
|
||||||
# browsers
|
# browsers
|
||||||
".mozilla"
|
".mozilla"
|
||||||
".config/google-chrome"
|
".config/google-chrome"
|
||||||
@@ -134,6 +137,10 @@
|
|||||||
# others
|
# others
|
||||||
".config/blender"
|
".config/blender"
|
||||||
".config/LDtk"
|
".config/LDtk"
|
||||||
|
|
||||||
|
# IM
|
||||||
|
".config/QQ"
|
||||||
|
".xwechat"
|
||||||
];
|
];
|
||||||
files = [
|
files = [
|
||||||
".wakatime.cfg"
|
".wakatime.cfg"
|
||||||
|
|||||||
@@ -54,5 +54,5 @@ in {
|
|||||||
# 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 = "24.05"; # Did you read the comment?
|
system.stateVersion = "24.11"; # Did you read the comment?
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{pkgs, ...}: {
|
{pkgs, ...}: {
|
||||||
# https://github.com/NixOS/nixpkgs/blob/nixos-24.05/nixos/modules/services/misc/gitea.nix
|
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/services/misc/gitea.nix
|
||||||
services.gitea = {
|
services.gitea = {
|
||||||
enable = true;
|
enable = true;
|
||||||
user = "gitea";
|
user = "gitea";
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
dataDir = ["/data/apps/minio/data"];
|
dataDir = ["/data/apps/minio/data"];
|
||||||
configDir = "/data/apps/minio/config";
|
configDir = "/data/apps/minio/config";
|
||||||
in {
|
in {
|
||||||
# https://github.com/NixOS/nixpkgs/blob/nixos-24.05/nixos/modules/services/web-servers/minio.nix
|
# https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/services/web-servers/minio.nix
|
||||||
services.minio = {
|
services.minio = {
|
||||||
enable = true;
|
enable = true;
|
||||||
browser = true; # Enable or disable access to web UI.
|
browser = true; # Enable or disable access to web UI.
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user