mirror of
https://github.com/ryan4yin/nix-config.git
synced 2026-05-28 18:39:31 +02:00
Compare commits
337 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 | |||
| ab8fd424d8 | |||
| fd776a0c0a | |||
| 0a957dab79 | |||
| 7c35aca631 | |||
| a2bc3c4292 | |||
| 86d6f88484 | |||
| 4cbc4a2724 | |||
| 39fc4a118f | |||
| ab3c88b071 | |||
| 5efb1f69df | |||
| 4417c0dde4 | |||
| fdfbe202cd | |||
| dd8259ed85 | |||
| 7429aab2aa | |||
| 73ebd9ecb4 | |||
| e5cb040f29 | |||
| 90c55009e0 | |||
| 290e813677 | |||
| 6bbd73c245 | |||
| bdf4d46be8 | |||
| b8d03dedb6 | |||
| dffb641f04 | |||
| f8a8ae8d13 | |||
| c56676eec3 | |||
| 140d0c7c3d | |||
| 72b25cee70 | |||
| 199aca18d1 | |||
| 28d66fef04 | |||
| 984fac8469 | |||
| b940146aec | |||
| 7ff4338475 | |||
| 30947c3ded | |||
| e4c256145b | |||
| 7c18b85f30 | |||
| f2825513c0 | |||
| 1e33fd1e17 | |||
| 0d7b4ac928 | |||
| 34072df760 | |||
| 0fb0601a24 | |||
| 051c37ad29 | |||
| c6f81aa2b8 | |||
| aa35fce12a | |||
| 47e1ca61c3 | |||
| 76a18e6ed6 | |||
| ae229e568f | |||
| 0ed219db34 | |||
| 698bd14c47 | |||
| b9cb86c8e3 | |||
| acc4f4eda7 | |||
| fed81fad1c | |||
| 4236df4281 | |||
| ae289ab869 | |||
| 9197bc7f0d | |||
| f85982c8ea | |||
| b82395d603 | |||
| 37be74746f | |||
| 00a9c844d3 | |||
| 5a8ef54c3b | |||
| 19a917f1d9 | |||
| 9b9ad93a88 | |||
| e03a86b461 | |||
| 4e8e7ecef2 | |||
| 5f42a1442e | |||
| 3c4de12ebf | |||
| 94e04bfbcc | |||
| aa9c1a4829 | |||
| 7438aa04ea | |||
| b364181dd6 | |||
| 2abea4e387 | |||
| 5895d7c97d | |||
| 498d76d803 | |||
| 6aef21ec8f | |||
| d20d46606d | |||
| 46ed22565d | |||
| e1cbaf6a1a | |||
| 6bded49335 | |||
| cb79cd4d5a | |||
| 4f93202864 | |||
| 00b9c7e805 | |||
| 0f5568f4ff | |||
| f097312145 | |||
| 68fa7360ff | |||
| 2b47447f0b | |||
| 6942e54b28 | |||
| df9ca7aefa | |||
| 773688a9e5 | |||
| 5e66e8cf2a | |||
| fde21e5039 | |||
| bc0781e97a | |||
| 7ba567b0bd | |||
| a0372eb24c | |||
| cf34ea047c | |||
| a1789eebff | |||
| 07b74cd2e5 | |||
| 2ff2c56fae | |||
| cca62222ef | |||
| a422cfadc0 | |||
| 8ff5b91a0a | |||
| 8b6d3e6034 | |||
| 08895478a4 | |||
| 9f7a56bc37 | |||
| 49f002ca5b | |||
| 30a288bdb3 | |||
| 11af465bd1 | |||
| a02097f7d7 | |||
| 00b6f97ddd | |||
| 482e88613d | |||
| 831fb2dd82 | |||
| e61ed83bf1 | |||
| 3c6d78537b | |||
| 7e402ed9c8 | |||
| b3a7da8301 | |||
| e28c7565d7 | |||
| 0693713e94 | |||
| 1bf67acde9 | |||
| f1a5d419fb | |||
| e8be41f8e1 | |||
| d853036fb1 | |||
| df1f9b0070 | |||
| 4def213b08 | |||
| 35eb6ed5c9 | |||
| 07178984b1 | |||
| eb83e88267 | |||
| 6c8e8111c6 | |||
| 62e96cde7e | |||
| 4bb53d0190 | |||
| 41af2c1444 | |||
| 43db6bcf63 | |||
| e17bc1ec23 | |||
| c9954c009a | |||
| e68a43edce | |||
| 08a6885873 | |||
| 930d8322d1 | |||
| 2363ab59c4 | |||
| 1394e26a59 | |||
| 940367c790 | |||
| cae48ede1b | |||
| 9535c09a33 | |||
| 194c3d9895 | |||
| a8f613ead1 | |||
| 5d69019f60 | |||
| 648021b0ca | |||
| c30730bedd | |||
| e9b502fa5f | |||
| 3e2340aee7 | |||
| 94c8eef2cb | |||
| 2581c9d562 | |||
| 3aaa4c0372 | |||
| c446a693ea | |||
| 9b0c5d7d50 | |||
| 86ee8132b7 | |||
| 2f3d644234 | |||
| 87dfa7669f | |||
| 64dd1fc2f3 | |||
| fc81143c10 | |||
| 5178a3e638 | |||
| b3127a18c9 | |||
| 15e0b150e9 | |||
| 41dc24e350 | |||
| 8c795c7d0d | |||
| b671c05db9 | |||
| 80e0bcf031 | |||
| 64ab375d1f | |||
| 325f82b9cc | |||
| 59a46844a7 | |||
| 5e21effb15 | |||
| 1e7b9697e1 | |||
| 422ec75ec0 | |||
| c059d90b17 | |||
| 880e0ac65e | |||
| ed4a2f00fe | |||
| 7a1788520b | |||
| e86d7a1020 | |||
| 6670c5bd7d | |||
| 0620f199b2 | |||
| e2457e80aa | |||
| 8ffaf4e3ae | |||
| f9d07d92de | |||
| 2b91c6f99d | |||
| fed3bc981b | |||
| d02331c1e0 | |||
| 5ec72c848f | |||
| 5a6ccd8794 | |||
| 3dc7ec1fe8 | |||
| 414a222d19 | |||
| 783d61999c | |||
| 86ec08aecb | |||
| b7b913b444 | |||
| aa0e1d84e0 | |||
| 94e2e17c60 | |||
| 41f4dc6237 |
@@ -3,3 +3,7 @@ result/
|
|||||||
.direnv/
|
.direnv/
|
||||||
.DS_Store
|
.DS_Store
|
||||||
.pre-commit-config.yaml
|
.pre-commit-config.yaml
|
||||||
|
logs/
|
||||||
|
core*
|
||||||
|
!core/
|
||||||
|
!core.nix
|
||||||
|
|||||||
+20
@@ -11,4 +11,24 @@ extend-ignore-re = [
|
|||||||
"iHgEIBYKACAWIQSizQe9ljFEyyclWmtVhZllwnQrSwUCZZ1T9wIdAAAKCRBVhZll", # crypto keys
|
"iHgEIBYKACAWIQSizQe9ljFEyyclWmtVhZllwnQrSwUCZZ1T9wIdAAAKCRBVhZll", # crypto keys
|
||||||
"noice", # noice.nvim
|
"noice", # noice.nvim
|
||||||
"crypted-nixos",
|
"crypted-nixos",
|
||||||
|
"daed",
|
||||||
|
|
||||||
|
# catppuccin theme colors
|
||||||
|
"11111b",
|
||||||
|
"1e1e2e",
|
||||||
|
"313244",
|
||||||
|
"414356",
|
||||||
|
"45475a",
|
||||||
|
"585b70",
|
||||||
|
"89b4fa",
|
||||||
|
"94e2d5",
|
||||||
|
"a6adc8",
|
||||||
|
"a6e3a1",
|
||||||
|
"bac2de",
|
||||||
|
"cdd6f4",
|
||||||
|
"f38ba8",
|
||||||
|
"f5c2e7",
|
||||||
|
"f5e0dc",
|
||||||
|
"f9e2af",
|
||||||
|
"fab387",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -1,57 +1,98 @@
|
|||||||
# 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 use this justfile, you need to enter a shell with just & nushell installed:
|
||||||
|
#
|
||||||
|
# nix shell nixpkgs#just nixpkgs#nushell
|
||||||
set shell := ["nu", "-c"]
|
set shell := ["nu", "-c"]
|
||||||
|
|
||||||
|
utils_nu := absolute_path("utils.nu")
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
#
|
#
|
||||||
# Common commands(suitable for all machines)
|
# Common commands(suitable for all machines)
|
||||||
#
|
#
|
||||||
############################################################################
|
############################################################################
|
||||||
|
|
||||||
# Remote deployment via colmena
|
# List all the just commands
|
||||||
col tag:
|
default:
|
||||||
colmena apply --on '@{{tag}}' --verbose --show-trace
|
@just --list
|
||||||
|
|
||||||
local name mode="default":
|
|
||||||
use utils.nu *; \
|
|
||||||
nixos-switch {{name}} {{mode}}
|
|
||||||
|
|
||||||
# Run eval tests
|
# Run eval tests
|
||||||
|
[group('nix')]
|
||||||
test:
|
test:
|
||||||
nix eval .#evalTests --show-trace --print-build-logs --verbose
|
nix eval .#evalTests --show-trace --print-build-logs --verbose
|
||||||
|
|
||||||
# update all the flake inputs
|
# Update all the flake inputs
|
||||||
|
[group('nix')]
|
||||||
up:
|
up:
|
||||||
nix flake update
|
nix flake update
|
||||||
|
|
||||||
# Update specific input
|
# Update specific input
|
||||||
# Usage: just upp nixpkgs
|
# Usage: just upp nixpkgs
|
||||||
|
[group('nix')]
|
||||||
upp input:
|
upp input:
|
||||||
nix flake update {{input}}
|
nix flake update {{input}}
|
||||||
|
|
||||||
# List all generations of the system profile
|
# List all generations of the system profile
|
||||||
|
[group('nix')]
|
||||||
history:
|
history:
|
||||||
nix profile history --profile /nix/var/nix/profiles/system
|
nix profile history --profile /nix/var/nix/profiles/system
|
||||||
|
|
||||||
# Open a nix shell with the flake
|
# Open a nix shell with the flake
|
||||||
|
[group('nix')]
|
||||||
repl:
|
repl:
|
||||||
nix repl -f flake:nixpkgs
|
nix repl -f flake:nixpkgs
|
||||||
|
|
||||||
# remove all generations older than 7 days
|
# remove all generations older than 7 days
|
||||||
|
# on darwin, you may need to switch to root user to run this command
|
||||||
|
[group('nix')]
|
||||||
clean:
|
clean:
|
||||||
sudo nix profile wipe-history --profile /nix/var/nix/profiles/system --older-than 7d
|
sudo nix profile wipe-history --profile /nix/var/nix/profiles/system --older-than 7d
|
||||||
|
|
||||||
# Garbage collect all unused nix store entries
|
# Garbage collect all unused nix store entries
|
||||||
|
[group('nix')]
|
||||||
gc:
|
gc:
|
||||||
# garbage collect all unused nix store entries
|
# garbage collect all unused nix store entries(system-wide)
|
||||||
sudo nix store gc --debug
|
sudo nix-collect-garbage --delete-older-than 7d
|
||||||
sudo nix-collect-garbage --delete-old
|
# garbage collect all unused nix store entries(for the user - home-manager)
|
||||||
|
# https://github.com/NixOS/nix/issues/8508
|
||||||
|
nix-collect-garbage --delete-older-than 7d
|
||||||
|
|
||||||
# Remove all reflog entries and prune unreachable objects
|
# Enter a shell session which has all the necessary tools for this flake
|
||||||
gitgc:
|
[linux]
|
||||||
git reflog expire --expire-unreachable=now --all
|
[group('nix')]
|
||||||
git gc --prune=now
|
shell:
|
||||||
|
nix shell nixpkgs#git nixpkgs#neovim nixpkgs#colmena
|
||||||
|
|
||||||
|
# Enter a shell session which has all the necessary tools for this flake
|
||||||
|
[macos]
|
||||||
|
[group('nix')]
|
||||||
|
shell:
|
||||||
|
nix shell nixpkgs#git nixpkgs#neovim
|
||||||
|
|
||||||
|
[group('nix')]
|
||||||
|
fmt:
|
||||||
|
# format the nix files in this repo
|
||||||
|
nix fmt
|
||||||
|
|
||||||
|
# Show all the auto gc roots in the nix store
|
||||||
|
[group('nix')]
|
||||||
|
gcroot:
|
||||||
|
ls -al /nix/var/nix/gcroots/auto/
|
||||||
|
|
||||||
|
# Verify all the store entries
|
||||||
|
# Nix Store can contains corrupted entries if the nix store object has been modified unexpectedly.
|
||||||
|
# This command will verify all the store entries,
|
||||||
|
# and we need to fix the corrupted entries manually via `sudo nix store delete <store-path-1> <store-path-2> ...`
|
||||||
|
[group('nix')]
|
||||||
|
verify-store:
|
||||||
|
nix store verify --all
|
||||||
|
|
||||||
|
# Repair Nix Store Objects
|
||||||
|
[group('nix')]
|
||||||
|
repair-store *paths:
|
||||||
|
nix store repair {{paths}}
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
#
|
#
|
||||||
@@ -60,24 +101,17 @@ gitgc:
|
|||||||
############################################################################
|
############################################################################
|
||||||
|
|
||||||
[linux]
|
[linux]
|
||||||
i3 mode="default":
|
[group('desktop')]
|
||||||
use utils.nu *; \
|
|
||||||
nixos-switch ai-i3 {{mode}}
|
|
||||||
|
|
||||||
[linux]
|
|
||||||
hypr mode="default":
|
hypr mode="default":
|
||||||
use utils.nu *; \
|
#!/usr/bin/env nu
|
||||||
|
use {{utils_nu}} *;
|
||||||
nixos-switch ai-hyprland {{mode}}
|
nixos-switch ai-hyprland {{mode}}
|
||||||
|
|
||||||
|
|
||||||
[linux]
|
|
||||||
s-i3 mode="default":
|
|
||||||
use utils.nu *; \
|
|
||||||
nixos-switch shoukei-i3 {{mode}}
|
|
||||||
|
|
||||||
[linux]
|
[linux]
|
||||||
|
[group('desktop')]
|
||||||
s-hypr mode="default":
|
s-hypr mode="default":
|
||||||
use utils.nu *; \
|
#!/usr/bin/env nu
|
||||||
|
use {{utils_nu}} *;
|
||||||
nixos-switch shoukei-hyprland {{mode}}
|
nixos-switch shoukei-hyprland {{mode}}
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
@@ -87,34 +121,51 @@ s-hypr mode="default":
|
|||||||
############################################################################
|
############################################################################
|
||||||
|
|
||||||
[macos]
|
[macos]
|
||||||
|
[group('desktop')]
|
||||||
darwin-set-proxy:
|
darwin-set-proxy:
|
||||||
sudo python3 scripts/darwin_set_proxy.py
|
sudo python3 scripts/darwin_set_proxy.py
|
||||||
sleep 1sec
|
sleep 1sec
|
||||||
|
|
||||||
[macos]
|
[macos]
|
||||||
|
[group('desktop')]
|
||||||
darwin-rollback:
|
darwin-rollback:
|
||||||
use utils.nu *; \
|
#!/usr/bin/env nu
|
||||||
|
use {{utils_nu}} *;
|
||||||
darwin-rollback
|
darwin-rollback
|
||||||
|
|
||||||
# Deploy to harmonica(macOS host)
|
# Deploy to harmonica(macOS host)
|
||||||
[macos]
|
[macos]
|
||||||
|
[group('desktop')]
|
||||||
ha mode="default":
|
ha mode="default":
|
||||||
use utils.nu *; \
|
#!/usr/bin/env nu
|
||||||
darwin-build "harmonica" {{mode}}; \
|
use {{utils_nu}} *;
|
||||||
|
darwin-build "harmonica" {{mode}};
|
||||||
darwin-switch "harmonica" {{mode}}
|
darwin-switch "harmonica" {{mode}}
|
||||||
|
|
||||||
# Depoly to fern(macOS host)
|
# Depoly to fern(macOS host)
|
||||||
[macos]
|
[macos]
|
||||||
fe mode="default": darwin-set-proxy
|
[group('desktop')]
|
||||||
use utils.nu *; \
|
fe mode="default":
|
||||||
darwin-build "fern" {{mode}}; \
|
#!/usr/bin/env nu
|
||||||
|
use {{utils_nu}} *;
|
||||||
|
darwin-build "fern" {{mode}};
|
||||||
darwin-switch "fern" {{mode}}
|
darwin-switch "fern" {{mode}}
|
||||||
|
|
||||||
# Reload yabai and skhd(macOS)
|
# Depoly to frieren(macOS host)
|
||||||
[macos]
|
[macos]
|
||||||
yabai-reload:
|
[group('desktop')]
|
||||||
launchctl kickstart -k "gui/502/org.nixos.yabai";
|
fr mode="default":
|
||||||
launchctl kickstart -k "gui/502/org.nixos.skhd";
|
#!/usr/bin/env nu
|
||||||
|
use {{utils_nu}} *;
|
||||||
|
darwin-build "frieren" {{mode}};
|
||||||
|
darwin-switch "frieren" {{mode}}
|
||||||
|
|
||||||
|
# Reset launchpad to force it to reindex Applications
|
||||||
|
[macos]
|
||||||
|
[group('desktop')]
|
||||||
|
reset-launchpad:
|
||||||
|
defaults write com.apple.dock ResetLaunchPad -bool true
|
||||||
|
killall Dock
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
#
|
#
|
||||||
@@ -122,34 +173,67 @@ yabai-reload:
|
|||||||
#
|
#
|
||||||
############################################################################
|
############################################################################
|
||||||
|
|
||||||
|
# Remote deployment via colmena
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
|
col tag:
|
||||||
|
colmena apply --on '@{{tag}}' --verbose --show-trace
|
||||||
|
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
|
local name mode="default":
|
||||||
|
#!/usr/bin/env nu
|
||||||
|
use {{utils_nu}} *;
|
||||||
|
nixos-switch {{name}} {{mode}}
|
||||||
|
|
||||||
# Build and upload a vm image
|
# Build and upload a vm image
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
upload-vm name mode="default":
|
upload-vm name mode="default":
|
||||||
use utils.nu *; \
|
#!/usr/bin/env nu
|
||||||
|
use {{utils_nu}} *;
|
||||||
upload-vm {{name}} {{mode}}
|
upload-vm {{name}} {{mode}}
|
||||||
|
|
||||||
# Deploy all the KubeVirt nodes(Physical machines running KubeVirt)
|
# Deploy all the KubeVirt nodes(Physical machines running KubeVirt)
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
lab:
|
lab:
|
||||||
colmena apply --on '@virt-*' --verbose --show-trace
|
colmena apply --on '@virt-*' --verbose --show-trace
|
||||||
|
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
shoryu:
|
shoryu:
|
||||||
colmena apply --on '@kubevirt-shoryu' --verbose --show-trace
|
colmena apply --on '@kubevirt-shoryu' --verbose --show-trace
|
||||||
|
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
shoryu-local mode="default":
|
shoryu-local mode="default":
|
||||||
use utils.nu *; \
|
#!/usr/bin/env nu
|
||||||
|
use {{utils_nu}} *;
|
||||||
nixos-switch kubevirt-shoryu {{mode}}
|
nixos-switch kubevirt-shoryu {{mode}}
|
||||||
|
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
shushou:
|
shushou:
|
||||||
colmena apply --on '@kubevirt-shushou' --verbose --show-trace
|
colmena apply --on '@kubevirt-shushou' --verbose --show-trace
|
||||||
|
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
shushou-local mode="default":
|
shushou-local mode="default":
|
||||||
use utils.nu *; \
|
#!/usr/bin/env nu
|
||||||
|
use {{utils_nu}} *;
|
||||||
nixos-switch kubevirt-shushou {{mode}}
|
nixos-switch kubevirt-shushou {{mode}}
|
||||||
|
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
youko:
|
youko:
|
||||||
colmena apply --on '@kubevirt-youko' --verbose --show-trace
|
colmena apply --on '@kubevirt-youko' --verbose --show-trace
|
||||||
|
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
youko-local mode="default":
|
youko-local mode="default":
|
||||||
use utils.nu *; \
|
#!/usr/bin/env nu
|
||||||
|
use {{utils_nu}} *;
|
||||||
nixos-switch kubevirt-youko {{mode}}
|
nixos-switch kubevirt-youko {{mode}}
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
@@ -159,31 +243,49 @@ youko-local mode="default":
|
|||||||
############################################################################
|
############################################################################
|
||||||
|
|
||||||
# Build and upload a vm image
|
# Build and upload a vm image
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
upload-idols mode="default":
|
upload-idols mode="default":
|
||||||
use utils.nu *; \
|
#!/usr/bin/env nu
|
||||||
|
use {{utils_nu}} *;
|
||||||
upload-vm aquamarine {{mode}}
|
upload-vm aquamarine {{mode}}
|
||||||
upload-vm ruby {{mode}}
|
upload-vm ruby {{mode}}
|
||||||
upload-vm kana {{mode}}
|
upload-vm kana {{mode}}
|
||||||
|
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
aqua:
|
aqua:
|
||||||
colmena apply --on '@aqua' --verbose --show-trace
|
colmena apply --on '@aqua' --verbose --show-trace
|
||||||
|
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
aqua-local mode="default":
|
aqua-local mode="default":
|
||||||
use utils.nu *; \
|
#!/usr/bin/env nu
|
||||||
|
use {{utils_nu}} *;
|
||||||
nixos-switch aquamarine {{mode}}
|
nixos-switch aquamarine {{mode}}
|
||||||
|
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
ruby:
|
ruby:
|
||||||
colmena apply --on '@ruby' --verbose --show-trace
|
colmena apply --on '@ruby' --verbose --show-trace
|
||||||
|
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
ruby-local mode="default":
|
ruby-local mode="default":
|
||||||
use utils.nu *; \
|
#!/usr/bin/env nu
|
||||||
|
use {{utils_nu}} *;
|
||||||
nixos-switch ruby {{mode}}
|
nixos-switch ruby {{mode}}
|
||||||
|
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
kana:
|
kana:
|
||||||
colmena apply --on '@kana' --verbose --show-trace
|
colmena apply --on '@kana' --verbose --show-trace
|
||||||
|
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
kana-local mode="default":
|
kana-local mode="default":
|
||||||
use utils.nu *; \
|
#!/usr/bin/env nu
|
||||||
|
use {{utils_nu}} *;
|
||||||
nixos-switch kana {{mode}}
|
nixos-switch kana {{mode}}
|
||||||
|
|
||||||
############################################################################
|
############################################################################
|
||||||
@@ -193,136 +295,83 @@ kana-local mode="default":
|
|||||||
############################################################################
|
############################################################################
|
||||||
|
|
||||||
# Build and upload a vm image
|
# Build and upload a vm image
|
||||||
upload-k3s mode="default":
|
[linux]
|
||||||
use utils.nu *; \
|
[group('homelab')]
|
||||||
upload-vm k3s-prod-1-master-1 {{mode}}; \
|
upload-k3s-prod mode="default":
|
||||||
upload-vm k3s-prod-1-master-2 {{mode}}; \
|
#!/usr/bin/env nu
|
||||||
upload-vm k3s-prod-1-master-3 {{mode}}; \
|
use {{utils_nu}} *;
|
||||||
upload-vm k3s-prod-1-worker-1 {{mode}}; \
|
upload-vm k3s-prod-1-master-1 {{mode}};
|
||||||
upload-vm k3s-prod-1-worker-2 {{mode}}; \
|
upload-vm k3s-prod-1-master-2 {{mode}};
|
||||||
|
upload-vm k3s-prod-1-master-3 {{mode}};
|
||||||
|
upload-vm k3s-prod-1-worker-1 {{mode}};
|
||||||
|
upload-vm k3s-prod-1-worker-2 {{mode}};
|
||||||
upload-vm k3s-prod-1-worker-3 {{mode}};
|
upload-vm k3s-prod-1-worker-3 {{mode}};
|
||||||
|
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
upload-k3s-test mode="default":
|
upload-k3s-test mode="default":
|
||||||
use utils.nu *; \
|
#!/usr/bin/env nu
|
||||||
upload-vm k3s-test-1-master-1 {{mode}}; \
|
use {{utils_nu}} *;
|
||||||
upload-vm k3s-test-1-master-2 {{mode}}; \
|
upload-vm k3s-test-1-master-1 {{mode}};
|
||||||
|
upload-vm k3s-test-1-master-2 {{mode}};
|
||||||
upload-vm k3s-test-1-master-3 {{mode}};
|
upload-vm k3s-test-1-master-3 {{mode}};
|
||||||
|
|
||||||
k3s:
|
[linux]
|
||||||
colmena apply --on '@k3s-*' --verbose --show-trace
|
[group('homelab')]
|
||||||
|
k3s-prod:
|
||||||
master:
|
colmena apply --on '@k3s-prod-*' --verbose --show-trace
|
||||||
colmena apply --on '@k3s-prod-1-master-*' --verbose --show-trace
|
|
||||||
|
|
||||||
worker:
|
|
||||||
colmena apply --on '@k3s-prod-1-worker-*' --verbose --show-trace
|
|
||||||
|
|
||||||
|
[linux]
|
||||||
|
[group('homelab')]
|
||||||
k3s-test:
|
k3s-test:
|
||||||
colmena apply --on '@k3s-test-*' --verbose --show-trace
|
colmena apply --on '@k3s-test-*' --verbose --show-trace
|
||||||
|
|
||||||
############################################################################
|
# =================================================
|
||||||
#
|
#
|
||||||
# RISC-V related commands
|
# Other useful commands
|
||||||
#
|
#
|
||||||
############################################################################
|
# =================================================
|
||||||
|
|
||||||
riscv:
|
|
||||||
colmena apply --on '@riscv' --verbose --show-trace
|
|
||||||
|
|
||||||
nozomi:
|
|
||||||
colmena apply --on '@nozomi' --verbose --show-trace
|
|
||||||
|
|
||||||
yukina:
|
|
||||||
colmena apply --on '@yukina' --verbose --show-trace
|
|
||||||
|
|
||||||
############################################################################
|
|
||||||
#
|
|
||||||
# Aarch64 related commands
|
|
||||||
#
|
|
||||||
############################################################################
|
|
||||||
|
|
||||||
rakushun:
|
|
||||||
colmena apply --on '@rakushun' --build-on-target --verbose --show-trace
|
|
||||||
|
|
||||||
rakushun-local mode="default":
|
|
||||||
use utils.nu *; \
|
|
||||||
nixos-switch rakushun {{mode}}
|
|
||||||
|
|
||||||
suzu-set-proxy:
|
|
||||||
ip route del default via 192.168.5.1
|
|
||||||
ip route add default via 192.168.5.178
|
|
||||||
|
|
||||||
suzu-unset-proxy:
|
|
||||||
ip route del default via 192.168.5.178
|
|
||||||
ip route add default via 192.168.5.1
|
|
||||||
|
|
||||||
suzu-local mode="default":
|
|
||||||
use utils.nu *; \
|
|
||||||
nixos-switch suzu {{mode}}
|
|
||||||
|
|
||||||
############################################################################
|
|
||||||
#
|
|
||||||
# Misc, other useful commands
|
|
||||||
#
|
|
||||||
############################################################################
|
|
||||||
|
|
||||||
fmt:
|
|
||||||
# format the nix files in this repo
|
|
||||||
nix fmt
|
|
||||||
|
|
||||||
|
[group('common')]
|
||||||
path:
|
path:
|
||||||
$env.PATH | split row ":"
|
$env.PATH | split row ":"
|
||||||
|
|
||||||
nvim-test:
|
[group('common')]
|
||||||
rm -rf $"($env.HOME)/.config/nvim"
|
trace-access app *args:
|
||||||
rsync -avz --copy-links --chmod=D2755,F744 home/base/tui/editors/neovim/nvim/ $"($env.HOME)/.config/nvim/"
|
strace -f -t -e trace=file {{app}} {{args}} | complete | $in.stderr | lines | find -v -r "(/nix/store|/newroot|/proc)" | parse --regex '"(/.+)"' | sort | uniq
|
||||||
|
|
||||||
nvim-clean:
|
[linux]
|
||||||
rm -rf $"($env.HOME)/.config/nvim"
|
[group('common')]
|
||||||
|
penvof pid:
|
||||||
|
sudo cat $"/proc/($pid)/environ" | tr '\0' '\n'
|
||||||
|
|
||||||
# =================================================
|
# Remove all reflog entries and prune unreachable objects
|
||||||
# Emacs related commands
|
[group('git')]
|
||||||
# =================================================
|
ggc:
|
||||||
|
git reflog expire --expire-unreachable=now --all
|
||||||
emacs-plist-path := "~/Library/LaunchAgents/org.nix-community.home.emacs.plist"
|
git gc --prune=now
|
||||||
|
|
||||||
reload-emacs-cmd := if os() == "macos" {
|
|
||||||
"launchctl unload " + emacs-plist-path
|
|
||||||
+ "\n"
|
|
||||||
+ "launchctl load " + emacs-plist-path
|
|
||||||
+ "\n"
|
|
||||||
+ "tail -f ~/Library/Logs/emacs-daemon.stderr.log"
|
|
||||||
} else {
|
|
||||||
"systemctl --user restart emacs.service"
|
|
||||||
+ "\n"
|
|
||||||
+ "systemctl --user status emacs.service"
|
|
||||||
}
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
emacs-clean:
|
|
||||||
rm -rf $"($env.HOME)/.config/doom/"
|
|
||||||
|
|
||||||
emacs-purge:
|
|
||||||
doom purge
|
|
||||||
doom clean
|
|
||||||
doom sync
|
|
||||||
|
|
||||||
emacs-reload:
|
|
||||||
doom sync
|
|
||||||
{{reload-emacs-cmd}}
|
|
||||||
|
|
||||||
|
|
||||||
# =================================================
|
|
||||||
#
|
|
||||||
# Kubernetes related commands
|
|
||||||
#
|
|
||||||
# =================================================
|
|
||||||
|
|
||||||
|
# Amend the last commit without changing the commit message
|
||||||
|
[group('git')]
|
||||||
|
game:
|
||||||
|
git commit --amend -a --no-edit
|
||||||
|
|
||||||
|
# Delete all failed pods
|
||||||
|
[group('k8s')]
|
||||||
del-failed:
|
del-failed:
|
||||||
kubectl delete pod --all-namespaces --field-selector="status.phase==Failed"
|
kubectl delete pod --all-namespaces --field-selector="status.phase==Failed"
|
||||||
|
|
||||||
|
[linux]
|
||||||
|
[group('services')]
|
||||||
|
list-inactive:
|
||||||
|
systemctl list-units -all --state=inactive
|
||||||
|
|
||||||
|
[linux]
|
||||||
|
[group('services')]
|
||||||
|
list-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,13 +17,13 @@
|
|||||||
> 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**.
|
||||||
|
|
||||||
This repository is home to the nix code that builds my systems:
|
This repository is home to the nix code that builds my systems:
|
||||||
|
|
||||||
1. NixOS Desktops: NixOS with home-manager, i3, hyprland, agenix, etc.
|
1. NixOS Desktops: NixOS with home-manager, hyprland, agenix, etc.
|
||||||
2. macOS Desktops: nix-darwin with home-manager, share the same home-manager configuration with
|
2. macOS Desktops: nix-darwin with home-manager, share the same home-manager configuration with
|
||||||
NixOS Desktops.
|
NixOS Desktops.
|
||||||
3. NixOS Servers: virtual machines running on Proxmox/KubeVirt, with various services, such as
|
3. NixOS Servers: virtual machines running on Proxmox/KubeVirt, with various services, such as
|
||||||
@@ -31,17 +31,20 @@ This repository is home to the nix code that builds my systems:
|
|||||||
|
|
||||||
See [./hosts](./hosts) for details of each host.
|
See [./hosts](./hosts) for details of each host.
|
||||||
|
|
||||||
|
See [./Virtual-Machine.md](./Virtual-Machine.md) for details of how to create & manage KubeVirt's
|
||||||
|
Virtual Machine from this flake.
|
||||||
|
|
||||||
## Why NixOS & Flakes?
|
## Why NixOS & Flakes?
|
||||||
|
|
||||||
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)!**
|
||||||
|
|
||||||
@@ -51,84 +54,71 @@ You don't have to go through the pain I've experienced again! Check out my
|
|||||||
|
|
||||||
## Components
|
## Components
|
||||||
|
|
||||||
| | NixOS(Wayland) | NixOS(Xorg) |
|
| | NixOS(Wayland) |
|
||||||
| --------------------------- | :------------------------------------------------------------------------------------------------------------------ | :------------------------------------------------------------------------------------------------------------------ |
|
| --------------------------- | ------------------------------------------------------------------------------------------------------------------- |
|
||||||
| **Window Manager** | [Hyprland][Hyprland] | [i3][i3] |
|
| **Window Manager** | [Hyprland][Hyprland] |
|
||||||
| **Terminal Emulator** | [Zellij][Zellij] + [Kitty][Kitty] | [Zellij][Zellij] + [Kitty][Kitty] |
|
| **Terminal Emulator** | [Zellij][Zellij] + [Kitty][Kitty] |
|
||||||
| **Bar** | [Waybar][Waybar] | [polybar][polybar] |
|
| **Bar** | [Waybar][Waybar] |
|
||||||
| **Application Launcher** | [anyrun][anyrun] | [rofi][rofi] |
|
| **Application Launcher** | [anyrun][anyrun] |
|
||||||
| **Notification Daemon** | [Mako][Mako] | [Dunst][Dunst] |
|
| **Notification Daemon** | [Mako][Mako] |
|
||||||
| **Display Manager** | [GDM][GDM] | [GDM][GDM] |
|
| **Display Manager** | [GDM][GDM] |
|
||||||
| **Color Scheme** | [Catppuccin][Catppuccin] | [Catppuccin][Catppuccin] |
|
| **Color Scheme** | [Catppuccin][Catppuccin] |
|
||||||
| **network management tool** | [NetworkManager][NetworkManager] | [NetworkManager][NetworkManager] |
|
| **network management tool** | [NetworkManager][NetworkManager] |
|
||||||
| **Input method framework** | [Fcitx5][Fcitx5] | [Fcitx5][Fcitx5] |
|
| **Input method framework** | [Fcitx5][Fcitx5] |
|
||||||
| **System resource monitor** | [Btop][Btop] | [Btop][Btop] |
|
| **System resource monitor** | [Btop][Btop] |
|
||||||
| **File Manager** | [Yazi][Yazi] + [thunar][thunar] | [Yazi][Yazi] + [thunar][thunar] |
|
| **File Manager** | [Yazi][Yazi] + [thunar][thunar] |
|
||||||
| **Shell** | [Nushell][Nushell] + [Starship][Starship] | [Nushell][Nushell] + [Starship][Starship] |
|
| **Shell** | [Nushell][Nushell] + [Starship][Starship] |
|
||||||
| **Music Player** | [mpd][mpd], [ncmpcpp][ncmpcpp], [mpc][mpc], [Netease-cloud-music-gtk][netease-cloud-music-gtk] | [Netease-cloud-music-gtk][netease-cloud-music-gtk] |
|
| **Media Player** | [mpv][mpv] |
|
||||||
| **Media Player** | [mpv][mpv] | [mpv][mpv] |
|
| **Text Editor** | [Neovim][Neovim] |
|
||||||
| **Text Editor** | [Neovim][Neovim] + [DoomEmacs][DoomEmacs] | [Neovim][Neovim] + [DoomEmacs][DoomEmacs] |
|
| **Fonts** | [Nerd fonts][Nerd fonts] |
|
||||||
| **Fonts** | [Nerd fonts][Nerd fonts] | [Nerd fonts][Nerd fonts] |
|
| **Image Viewer** | [imv][imv] |
|
||||||
| **Image Viewer** | [imv][imv] | [imv][imv] |
|
| **Screenshot Software** | [hyprshot][hyprshot] |
|
||||||
| **Screenshot Software** | [flameshot][flameshot] + [grim][grim] | [flameshot][flameshot] |
|
| **Screen Recording** | [OBS][OBS] |
|
||||||
| **Screen Recording** | [OBS][OBS] | [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 | tmpfs on `/`, [Btrfs][Btrfs] subvolumes on a [LUKS][LUKS] encrypted partition for persistent, unlock via passphrase |
|
| **Secure Boot** | [lanzaboote][lanzaboote] |
|
||||||
| **Secure Boot** | [lanzaboote][lanzaboote] | [lanzaboote][lanzaboote] |
|
|
||||||
|
|
||||||
Wallpapers: https://github.com/ryan4yin/wallpapers
|
Wallpapers: https://github.com/ryan4yin/wallpapers
|
||||||
|
|
||||||
## Hyprland + AstroNvim + DoomEmacs
|
## Hyprland + AstroNvim
|
||||||
|
|
||||||

|

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

|

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

|
|
||||||
|
|
||||||
## I3 + 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.
|
||||||
|
|
||||||
## How to Deploy this Flake?
|
## How to Deploy this Flake?
|
||||||
|
|
||||||
> :red_circle: **IMPORTANT**: **You should NOT deploy this flake directly on your machine
|
<!-- prettier-ignore -->
|
||||||
> :exclamation: It will not succeed.** This flake contains my hardware configuration(such as
|
> :red_circle: **IMPORTANT**: **You should NOT deploy this flake directly on your machine :exclamation:
|
||||||
|
> 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`.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# deploy one of the configuration based on the hostname
|
# deploy one of the configuration based on the hostname
|
||||||
# sudo nixos-rebuild switch --flake .#ai_i3
|
|
||||||
sudo nixos-rebuild switch --flake .#ai-hyprland
|
sudo nixos-rebuild switch --flake .#ai-hyprland
|
||||||
|
|
||||||
# deploy via `just`(a command runner with similar syntax to make) & Justfile
|
# deploy via `just`(a command runner with similar syntax to make) & Justfile
|
||||||
# just i3 # deploy my pc with i3 window manager
|
|
||||||
just hypr # deploy my pc with hyprland compositor
|
just hypr # deploy my pc with hyprland compositor
|
||||||
|
|
||||||
# or we can deploy with details
|
# or we can deploy with details
|
||||||
# just i3 debug
|
|
||||||
just hypr debug
|
just hypr debug
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -139,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)
|
||||||
@@ -181,18 +171,14 @@ 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)
|
||||||
- I3 Window Manager
|
|
||||||
- [endeavouros-i3wm-setup](https://github.com/endeavouros-team/endeavouros-i3wm-setup): I started
|
|
||||||
using i3 here, and my i3 configuration is also based on it, but made a lot of changes.
|
|
||||||
- [denisse-dev/dotfiles](https://github.com/denisse-dev/dotfiles)
|
|
||||||
- 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.
|
||||||
- Misc
|
- Misc
|
||||||
- [1amSimp1e/dots](https://github.com/1amSimp1e/dots)
|
- [1amSimp1e/dots](https://github.com/1amSimp1e/dots)
|
||||||
|
|
||||||
[Hyprland]: https://github.com/hyprwm/Hyprland
|
[Hyprland]: https://github.com/hyprwm/Hyprland
|
||||||
[i3]: https://github.com/i3/i3
|
|
||||||
[Kitty]: https://github.com/kovidgoyal/kitty
|
[Kitty]: https://github.com/kovidgoyal/kitty
|
||||||
[Nushell]: https://github.com/nushell/nushell
|
[Nushell]: https://github.com/nushell/nushell
|
||||||
[Starship]: https://github.com/starship/starship
|
[Starship]: https://github.com/starship/starship
|
||||||
@@ -207,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
|
||||||
|
|||||||
+6
-2
@@ -1,13 +1,17 @@
|
|||||||
## How to create & managage KubeVirt's Virtual Machine from this flake?
|
## How to create & managage KubeVirt's Virtual Machine from this flake?
|
||||||
|
|
||||||
Use `aquamarine` as an example, we can create a virtual machine with the following command:
|
Use `aquamarine` as an example, first build and upload the virtual machine's qcow2 image to the file
|
||||||
|
server:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
just upload-vm aquamarine
|
just upload-vm aquamarine
|
||||||
```
|
```
|
||||||
|
|
||||||
Then create the virtual machine by creating a yaml file at
|
Then create the virtual machine by creating a yaml file at
|
||||||
[ryan4yin/k8s-gitops](https://github.com/ryan4yin/k8s-gitops/tree/main/vms)
|
[ryan4yin/k8s-gitops](https://github.com/ryan4yin/k8s-gitops/tree/main/vms), set the
|
||||||
|
`spec.dataVolumeTemplates[0].source.http.url` to the uploaded file's URL, and fluxcd will
|
||||||
|
automatically apply the changes, then a virtual machine named `aquamarine` will be created in the
|
||||||
|
KubeVirt cluster.
|
||||||
|
|
||||||
Once the virtual machine `aquamarine` is created, we can deploy updates to it with the following
|
Once the virtual machine `aquamarine` is created, we can deploy updates to it with the following
|
||||||
commands:
|
commands:
|
||||||
|
|||||||
Generated
+334
-840
File diff suppressed because it is too large
Load Diff
@@ -17,12 +17,12 @@
|
|||||||
# substituers will be appended to the default substituters when fetching packages
|
# substituers will be appended to the default substituters when fetching packages
|
||||||
extra-substituters = [
|
extra-substituters = [
|
||||||
"https://anyrun.cachix.org"
|
"https://anyrun.cachix.org"
|
||||||
"https://nix-gaming.cachix.org"
|
# "https://nix-gaming.cachix.org"
|
||||||
# "https://nixpkgs-wayland.cachix.org"
|
# "https://nixpkgs-wayland.cachix.org"
|
||||||
];
|
];
|
||||||
extra-trusted-public-keys = [
|
extra-trusted-public-keys = [
|
||||||
"anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s="
|
"anyrun.cachix.org-1:pqBobmOjI7nKlsUMV25u9QHa9btJK65/C8vnO3p346s="
|
||||||
"nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4="
|
# "nix-gaming.cachix.org-1:nbjlureqMbRAxR1gJ/f3hxemL9svXaZF/Ees8vCUUs4="
|
||||||
# "nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA="
|
# "nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA="
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
@@ -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";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -101,27 +105,24 @@
|
|||||||
|
|
||||||
nuenv.url = "github:DeterminateSystems/nuenv";
|
nuenv.url = "github:DeterminateSystems/nuenv";
|
||||||
|
|
||||||
daeuniverse.url = "github:daeuniverse/flake.nix";
|
|
||||||
# daeuniverse.url = "github:daeuniverse/flake.nix/exp";
|
|
||||||
|
|
||||||
haumea = {
|
haumea = {
|
||||||
url = "github:nix-community/haumea/v0.2.2";
|
url = "github:nix-community/haumea/v0.2.2";
|
||||||
inputs.nixpkgs.follows = "nixpkgs";
|
inputs.nixpkgs.follows = "nixpkgs";
|
||||||
};
|
};
|
||||||
|
|
||||||
microvm = {
|
nixpak = {
|
||||||
url = "github:astro/microvm.nix";
|
url = "github:nixpak/nixpak";
|
||||||
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;
|
||||||
@@ -142,16 +143,9 @@
|
|||||||
flake = false;
|
flake = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
nur-ryan4yin = {
|
nur-ryan4yin.url = "github:ryan4yin/nur-packages";
|
||||||
url = "github:ryan4yin/nur-packages";
|
|
||||||
# inputs.nixpkgs.follows = "nixpkgs";
|
|
||||||
};
|
|
||||||
|
|
||||||
# riscv64 SBCs
|
# for waydroid
|
||||||
nixos-licheepi4a.url = "github:ryan4yin/nixos-licheepi4a";
|
# nur-ataraxiasjel.url = "github:AtaraxiaSjel/nur";
|
||||||
# nixos-jh7110.url = "github:ryan4yin/nixos-jh7110";
|
|
||||||
|
|
||||||
# aarch64 SBCs
|
|
||||||
nixos-rk3588.url = "github:ryan4yin/nixos-rk3588";
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,87 @@
|
|||||||
|
# Linux Hardening
|
||||||
|
|
||||||
|
> Work in progress.
|
||||||
|
|
||||||
|
## Goal
|
||||||
|
|
||||||
|
- **System Level**: Protect critical files from being accessed by untrusted applications.
|
||||||
|
1. Such as browser cookies, SSH keys, etc.
|
||||||
|
- **Per-App Level**: Prevent untrusted applications(such as closed-source apps) from:
|
||||||
|
1. Accessing files they shouldn't.
|
||||||
|
- Such as a malicious application accessing your browser's cookies, SSH Keys, etc.
|
||||||
|
1. Accessing the network when they don't need to.
|
||||||
|
1. Accessing hardware devices they don't need.
|
||||||
|
|
||||||
|
## Current Status
|
||||||
|
|
||||||
|
1. **System Level**:
|
||||||
|
- [ ] AppArmor
|
||||||
|
- [ ] Kernel & System Hardening
|
||||||
|
1. **Per-App Level**:
|
||||||
|
- Nixpak (Bubblewrap)
|
||||||
|
- [x] QQ
|
||||||
|
- [x] Firefox
|
||||||
|
- [ ] Firejail (risk? not enabled yet)
|
||||||
|
|
||||||
|
## Kernel Hardening
|
||||||
|
|
||||||
|
- NixOS Kernel Config:
|
||||||
|
https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/os-specific/linux/kernel/hardened/config.nix
|
||||||
|
|
||||||
|
## System Hardening
|
||||||
|
|
||||||
|
- NixOS Profile:
|
||||||
|
https://github.com/NixOS/nixpkgs/blob/nixos-unstable/nixos/modules/profiles/hardened.nix
|
||||||
|
- Apparmor: [roddhjav/apparmor.d)](https://github.com/roddhjav/apparmor.d)
|
||||||
|
- https://gitlab.com/apparmor/apparmor/-/wikis/Documentation
|
||||||
|
- AppArmor.d is a set of over 1500 AppArmor profiles whose aim is to confine most Linux based
|
||||||
|
applications and processes.
|
||||||
|
- Nix Package:
|
||||||
|
[roddhjav-apparmor-rules](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ro/roddhjav-apparmor-rules/package.nix#L33)
|
||||||
|
- https://github.com/NixOS/nixpkgs/issues/331645
|
||||||
|
- https://github.com/LordGrimmauld/aa-alias-manager
|
||||||
|
- SELinux: too complex, not recommended for personal use.
|
||||||
|
|
||||||
|
## Application Sandboxing
|
||||||
|
|
||||||
|
- [Firejail](https://github.com/netblue30/firejail/tree/master/etc): A SUID security sandbox with
|
||||||
|
hundreds of security profiles for many common applications in the default installation.
|
||||||
|
- https://wiki.nixos.org/wiki/Firejail
|
||||||
|
- Firejail needs SUID to work, which is considered a security risk -
|
||||||
|
[Does firejail improve the security of my system?](https://github.com/netblue30/firejail/discussions/4601)
|
||||||
|
- [Bubblewrap](https://github.com/containers/bubblewrap):
|
||||||
|
[nixpak](https://github.com/nixpak/nixpak), more secure than firejail, but no batteries included.
|
||||||
|
- NixOS's FHSEnv is implemented using bubblewrap by default.
|
||||||
|
- [Systemd/Hardening](https://wiki.nixos.org/wiki/Systemd/Hardening): Systemd also provides some
|
||||||
|
sandboxing features.
|
||||||
|
|
||||||
|
## NOTE
|
||||||
|
|
||||||
|
**Running untrusted code is never safe, kernel hardening & sandboxing cannot change this**.
|
||||||
|
|
||||||
|
If you want to run untrusted code, please use a VM & an isolated network environment, which will
|
||||||
|
provide a much higher level of security.
|
||||||
|
|
||||||
|
## References
|
||||||
|
|
||||||
|
- [Harden your NixOS workstation - dataswamp](https://dataswamp.org/~solene/2022-01-13-nixos-hardened.html)
|
||||||
|
- [Linux Insecurities - Madaidans](https://madaidans-insecurities.github.io/linux.html)
|
||||||
|
- [Sandboxing all programs by default - NixOS Discourse](https://discourse.nixos.org/t/sandboxing-all-programs-by-default/7792)
|
||||||
|
- [在 Firejail 中运行 Steam](https://imbearchild.cyou/archives/2021/11/steam-in-firejail/)
|
||||||
|
- [Firejail - Arch Linux Wiki](https://wiki.archlinux.org/title/Firejail)
|
||||||
|
- [Paranoid NixOS Setup - xeiaso](https://xeiaso.net/blog/paranoid-nixos-2021-07-18/)
|
||||||
|
- [nix-mineral](https://github.com/cynicsketch/nix-mineral): NixOS module for convenient system
|
||||||
|
hardening.
|
||||||
|
- nixpak configs:
|
||||||
|
- https://github.com/pokon548/OysterOS/tree/b97604d89953373d6316286b96f6a964af2c398d/desktop/application
|
||||||
|
- https://github.com/segment-tree/my-nixos/tree/ceb6041f73bd9edcb78a8818b27a28f7c629193b/hm/me/apps/nixpak
|
||||||
|
- https://github.com/Keksgesicht/nixos-config/tree/91cc77d8d6b598da7c4dbed143e0009c2dea6940/packages/nixpak
|
||||||
|
- https://github.com/bluskript/nix-config/blob/7ecb6a7254c1ac4969072f4c4febdc19f8b83b30/pkgs/nixpak/default.nix
|
||||||
|
- firejail configs:
|
||||||
|
- https://github.com/stelcodes/nixos-config/blob/f8967c82a5e5f3d128eb1aaf7498b5f918f719ec/packages/overlay.nix#L261
|
||||||
|
- apparmor configs:
|
||||||
|
- https://github.com/sukhmancs/nixos-configs/blob/7fcf737c506ad843113cd5b94796b49d4d4dfad2/modules/shared/security/apparmor/default.nix#L8
|
||||||
|
- https://github.com/zramctl/dotfiles/blob/4fe177f6984154960942bb47d5a375098ec6ed6a/modules/nixos/security/apparmor.nix#L4
|
||||||
|
- Others:
|
||||||
|
- Directly via `buildFHSUserEnvBubblewrap`:
|
||||||
|
https://github.com/xddxdd/nur-packages/blob/master/pkgs/uncategorized/wechat-uos/default.nix
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
services.dbus.apparmor = "enabled";
|
||||||
|
security.apparmor = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
# kill process that are not confined but have apparmor profiles enabled
|
||||||
|
killUnconfinedConfinables = true;
|
||||||
|
packages = with pkgs; [
|
||||||
|
apparmor-utils
|
||||||
|
apparmor-profiles
|
||||||
|
];
|
||||||
|
|
||||||
|
# apparmor policies
|
||||||
|
policies = {
|
||||||
|
"default_deny" = {
|
||||||
|
enforce = false;
|
||||||
|
enable = false;
|
||||||
|
profile = ''
|
||||||
|
profile default_deny /** { }
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
"sudo" = {
|
||||||
|
enforce = false;
|
||||||
|
enable = false;
|
||||||
|
profile = ''
|
||||||
|
${pkgs.sudo}/bin/sudo {
|
||||||
|
file /** rwlkUx,
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
|
"nix" = {
|
||||||
|
enforce = false;
|
||||||
|
enable = false;
|
||||||
|
profile = ''
|
||||||
|
${config.nix.package}/bin/nix {
|
||||||
|
unconfined,
|
||||||
|
}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
apparmor-bin-utils
|
||||||
|
apparmor-profiles
|
||||||
|
apparmor-parser
|
||||||
|
libapparmor
|
||||||
|
apparmor-kernel-patches
|
||||||
|
apparmor-pam
|
||||||
|
apparmor-utils
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,71 @@
|
|||||||
|
{pkgs, ...}: let
|
||||||
|
firejailWrapper = import ./firejailWrapper.nix pkgs;
|
||||||
|
in {
|
||||||
|
programs.firejail.enable = true;
|
||||||
|
|
||||||
|
# Add firejailed Apps into nixsuper, and reference them in home-manager or other nixos modules
|
||||||
|
nixpkgs.overlays = [
|
||||||
|
(_: super: {
|
||||||
|
firejailed = {
|
||||||
|
steam = firejailWrapper {
|
||||||
|
name = "steam-firejailed";
|
||||||
|
executable = "${super.steam}/bin/steam";
|
||||||
|
profile = "${super.firejail}/etc/firejail/steam.profile";
|
||||||
|
};
|
||||||
|
steam-run = firejailWrapper {
|
||||||
|
name = "steam-run-firejailed";
|
||||||
|
executable = "${super.steam}/bin/steam-run";
|
||||||
|
profile = "${super.firejail}/etc/firejail/steam.profile";
|
||||||
|
};
|
||||||
|
|
||||||
|
# firefox = firejailWrapper {
|
||||||
|
# name = "firefox-firejailed";
|
||||||
|
# executable = "${super.lib.getBin super.firefox-wayland}/bin/firefox";
|
||||||
|
# profile = "${super.firejail}/etc/firejail/firefox.profile";
|
||||||
|
# };
|
||||||
|
# chromium = firejailWrapper {
|
||||||
|
# name = "chromium-firejailed";
|
||||||
|
# executable = "${super.lib.getBin super.ungoogled-chromium}/bin/chromium";
|
||||||
|
# profile = "${super.firejail}/etc/firejail/chromium.profile";
|
||||||
|
# };
|
||||||
|
|
||||||
|
mpv = firejailWrapper {
|
||||||
|
executable = "${super.lib.getBin super.mpv}/bin/mpv";
|
||||||
|
profile = "${super.firejail}/etc/firejail/mpv.profile";
|
||||||
|
};
|
||||||
|
imv = firejailWrapper {
|
||||||
|
executable = "${super.lib.getBin super.imv}/bin/imv";
|
||||||
|
profile = "${super.firejail}/etc/firejail/imv.profile";
|
||||||
|
};
|
||||||
|
zathura = firejailWrapper {
|
||||||
|
executable = "${super.lib.getBin super.zathura}/bin/zathura";
|
||||||
|
profile = "${super.firejail}/etc/firejail/zathura.profile";
|
||||||
|
};
|
||||||
|
slack = firejailWrapper {
|
||||||
|
executable = "${super.lib.getBin super.slack}/bin/slack";
|
||||||
|
profile = "${super.firejail}/etc/firejail/slack.profile";
|
||||||
|
};
|
||||||
|
telegram-desktop = firejailWrapper {
|
||||||
|
executable = "${super.lib.getBin super.tdesktop}/bin/telegram-desktop";
|
||||||
|
profile = "${super.firejail}/etc/firejail/telegram-desktop.profile";
|
||||||
|
};
|
||||||
|
brave = firejailWrapper {
|
||||||
|
executable = "${super.lib.getBin super.brave}/bin/brave";
|
||||||
|
profile = "${super.firejail}/etc/firejail/brave.profile";
|
||||||
|
};
|
||||||
|
qutebrowser = firejailWrapper {
|
||||||
|
executable = "${super.lib.getBin super.qutebrowser}/bin/qutebrowser";
|
||||||
|
profile = "${super.firejail}/etc/firejail/qutebrowser.profile";
|
||||||
|
};
|
||||||
|
thunar = firejailWrapper {
|
||||||
|
executable = "${super.lib.getBin super.xfce.thunar}/bin/thunar";
|
||||||
|
profile = "${super.firejail}/etc/firejail/thunar.profile";
|
||||||
|
};
|
||||||
|
vscodium = firejailWrapper {
|
||||||
|
executable = "${super.lib.getBin super.vscodium}/bin/vscodium";
|
||||||
|
profile = "${super.firejail}/etc/firejail/vscodium.profile";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
# https://www.reddit.com/r/NixOS/comments/1b56jdx/simple_nix_function_for_wrapping_executables_with/
|
||||||
|
pkgs: {
|
||||||
|
name ? "firejail-wrapper",
|
||||||
|
executable,
|
||||||
|
desktop ? null,
|
||||||
|
profile ? null,
|
||||||
|
extraArgs ? [],
|
||||||
|
}:
|
||||||
|
pkgs.runCommand name
|
||||||
|
{
|
||||||
|
preferLocalBuild = true;
|
||||||
|
allowSubstitutes = false;
|
||||||
|
meta.priority = -1; # take precedence over non-firejailed versions
|
||||||
|
}
|
||||||
|
(
|
||||||
|
let
|
||||||
|
firejailArgs = pkgs.lib.concatStringsSep " " (
|
||||||
|
extraArgs ++ (pkgs.lib.optional (profile != null) "--profile=${toString profile}")
|
||||||
|
);
|
||||||
|
in
|
||||||
|
''
|
||||||
|
command_path="$out/bin/$(basename ${executable})-jailed"
|
||||||
|
mkdir -p $out/bin
|
||||||
|
mkdir -p $out/share/applications
|
||||||
|
cat <<'_EOF' >"$command_path"
|
||||||
|
#! ${pkgs.runtimeShell} -e
|
||||||
|
exec /run/wrappers/bin/firejail ${firejailArgs} -- ${toString executable} "\$@"
|
||||||
|
_EOF
|
||||||
|
chmod 0755 "$command_path"
|
||||||
|
''
|
||||||
|
+ pkgs.lib.optionalString (desktop != null) ''
|
||||||
|
substitute ${desktop} $out/share/applications/$(basename ${desktop}) \
|
||||||
|
--replace ${executable} "$command_path"
|
||||||
|
''
|
||||||
|
)
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
nixpak,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
callArgs = {
|
||||||
|
mkNixPak = nixpak.lib.nixpak {
|
||||||
|
inherit (pkgs) lib;
|
||||||
|
inherit pkgs;
|
||||||
|
};
|
||||||
|
safeBind = sloth: realdir: mapdir: [
|
||||||
|
(sloth.mkdir (sloth.concat' sloth.appDataDir realdir))
|
||||||
|
(sloth.concat' sloth.homeDir mapdir)
|
||||||
|
];
|
||||||
|
};
|
||||||
|
wrapper = _pkgs: path: (_pkgs.callPackage path callArgs).config.script;
|
||||||
|
in {
|
||||||
|
# Add nixpaked Apps into nixpkgs, and reference them in home-manager or other nixos modules
|
||||||
|
nixpkgs.overlays = [
|
||||||
|
(_: super: {
|
||||||
|
nixpaks = {
|
||||||
|
qq = wrapper super ./qq.nix;
|
||||||
|
qq-desktop-item = super.callPackage ./qq-desktop-item.nix {};
|
||||||
|
|
||||||
|
wechat-uos = wrapper super ./wechat-uos.nix;
|
||||||
|
wechat-uos-desktop-item = super.callPackage ./wechat-uos-desktop-item.nix {};
|
||||||
|
|
||||||
|
firefox = wrapper super ./firefox.nix;
|
||||||
|
firefox-desktop-item = super.callPackage ./firefox-desktop-item.nix {};
|
||||||
|
};
|
||||||
|
})
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
{makeDesktopItem}:
|
||||||
|
makeDesktopItem {
|
||||||
|
name = "firefox";
|
||||||
|
desktopName = "firefox";
|
||||||
|
exec = "firefox %U";
|
||||||
|
terminal = false;
|
||||||
|
icon = "firefox";
|
||||||
|
type = "Application";
|
||||||
|
categories = ["Network"];
|
||||||
|
comment = "firefox boxed";
|
||||||
|
}
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
# Refer:
|
||||||
|
# - Flatpak manifest's docs:
|
||||||
|
# - https://docs.flatpak.org/en/latest/manifests.html
|
||||||
|
# - https://docs.flatpak.org/en/latest/sandbox-permissions.html
|
||||||
|
# - Firefox's flatpak manifest: https://hg.mozilla.org/mozilla-central/file/tip/taskcluster/docker/firefox-flatpak/runme.sh#l151
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
mkNixPak,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
mkNixPak {
|
||||||
|
config = {
|
||||||
|
config,
|
||||||
|
sloth,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
app = {
|
||||||
|
package = pkgs.firefox-wayland;
|
||||||
|
binPath = "bin/firefox";
|
||||||
|
};
|
||||||
|
flatpak.appId = "org.mozilla.firefox";
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./modules/gui-base.nix
|
||||||
|
./modules/network.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
# list all dbus services:
|
||||||
|
# ls -al /run/current-system/sw/share/dbus-1/services/
|
||||||
|
# ls -al /etc/profiles/per-user/ryan/share/dbus-1/services/
|
||||||
|
dbus.policies = {
|
||||||
|
"org.mozilla.firefox.*" = "own"; # firefox
|
||||||
|
"org.mozilla.firefox_beta.*" = "own"; # firefox beta
|
||||||
|
"org.mpris.MediaPlayer2.firefox.*" = "own";
|
||||||
|
"org.freedesktop.NetworkManager" = "talk";
|
||||||
|
};
|
||||||
|
|
||||||
|
bubblewrap = {
|
||||||
|
# To trace all the home files QQ accesses, you can use the following nushell command:
|
||||||
|
# just trace-access firefox
|
||||||
|
# See the Justfile in the root of this repository for more information.
|
||||||
|
bind.rw = [
|
||||||
|
# given the read write permission to the following directories.
|
||||||
|
# NOTE: sloth.mkdir is used to create the directory if it does not exist!
|
||||||
|
(sloth.mkdir (sloth.concat' sloth.homeDir "/.mozilla"))
|
||||||
|
|
||||||
|
# ================ for externsions ===============================
|
||||||
|
# required by https://github.com/browserpass/browserpass-extension
|
||||||
|
(sloth.concat' sloth.homeDir "/.local/share/password-store") # pass
|
||||||
|
sloth.xdgDownloadDir
|
||||||
|
sloth.xdgDocumentsDir
|
||||||
|
];
|
||||||
|
bind.ro = [
|
||||||
|
# To actually make Firefox run
|
||||||
|
"/sys/bus/pci"
|
||||||
|
["${config.app.package}/lib/firefox" "/app/etc/firefox"]
|
||||||
|
|
||||||
|
# Unsure
|
||||||
|
(sloth.concat' sloth.xdgConfigHome "/dconf")
|
||||||
|
];
|
||||||
|
|
||||||
|
sockets = {
|
||||||
|
x11 = false;
|
||||||
|
wayland = true;
|
||||||
|
pipewire = true;
|
||||||
|
};
|
||||||
|
bind.dev = [
|
||||||
|
"/dev/shm" # Shared Memory
|
||||||
|
];
|
||||||
|
tmpfs = [
|
||||||
|
"/tmp"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
# https://github.com/nixpak/pkgs/blob/master/pkgs/modules/gui-base.nix
|
||||||
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
sloth,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
envSuffix = envKey: suffix: sloth.concat' (sloth.env envKey) suffix;
|
||||||
|
# cursor & icon's theme should be the same as the host's one.
|
||||||
|
cursorTheme = pkgs.bibata-cursors;
|
||||||
|
iconTheme = pkgs.papirus-icon-theme;
|
||||||
|
in {
|
||||||
|
config = {
|
||||||
|
dbus.policies = {
|
||||||
|
"${config.flatpak.appId}" = "own";
|
||||||
|
"org.freedesktop.DBus" = "talk";
|
||||||
|
"org.gtk.vfs.*" = "talk";
|
||||||
|
"org.gtk.vfs" = "talk";
|
||||||
|
"ca.desrt.dconf" = "talk";
|
||||||
|
"org.freedesktop.portal.*" = "talk";
|
||||||
|
"org.a11y.Bus" = "talk";
|
||||||
|
};
|
||||||
|
# https://github.com/nixpak/nixpak/blob/master/modules/gpu.nix
|
||||||
|
# 1. bind readonly - /run/opengl-driver
|
||||||
|
# 2. bind device - /dev/dri
|
||||||
|
gpu = {
|
||||||
|
enable = lib.mkDefault true;
|
||||||
|
provider = "nixos";
|
||||||
|
bundlePackage = pkgs.mesa.drivers; # for amd & intel
|
||||||
|
};
|
||||||
|
# https://github.com/nixpak/nixpak/blob/master/modules/gui/fonts.nix
|
||||||
|
# it works not well, bind system's /etc/fonts directly instead
|
||||||
|
fonts.enable = false;
|
||||||
|
# https://github.com/nixpak/nixpak/blob/master/modules/locale.nix
|
||||||
|
locale.enable = true;
|
||||||
|
bubblewrap = {
|
||||||
|
network = lib.mkDefault false;
|
||||||
|
bind.rw = [
|
||||||
|
[
|
||||||
|
(envSuffix "HOME" "/.var/app/${config.flatpak.appId}/cache")
|
||||||
|
sloth.xdgCacheHome
|
||||||
|
]
|
||||||
|
(sloth.concat' sloth.xdgCacheHome "/fontconfig")
|
||||||
|
(sloth.concat' sloth.xdgCacheHome "/mesa_shader_cache")
|
||||||
|
|
||||||
|
(sloth.concat [
|
||||||
|
(sloth.env "XDG_RUNTIME_DIR")
|
||||||
|
"/"
|
||||||
|
(sloth.envOr "WAYLAND_DISPLAY" "no")
|
||||||
|
])
|
||||||
|
|
||||||
|
(envSuffix "XDG_RUNTIME_DIR" "/at-spi/bus")
|
||||||
|
(envSuffix "XDG_RUNTIME_DIR" "/gvfsd")
|
||||||
|
(envSuffix "XDG_RUNTIME_DIR" "/pulse")
|
||||||
|
|
||||||
|
"/run/dbus"
|
||||||
|
];
|
||||||
|
bind.ro = [
|
||||||
|
(envSuffix "XDG_RUNTIME_DIR" "/doc")
|
||||||
|
(sloth.concat' sloth.xdgConfigHome "/gtk-2.0")
|
||||||
|
(sloth.concat' sloth.xdgConfigHome "/gtk-3.0")
|
||||||
|
(sloth.concat' sloth.xdgConfigHome "/gtk-4.0")
|
||||||
|
(sloth.concat' sloth.xdgConfigHome "/fontconfig")
|
||||||
|
|
||||||
|
"/etc/fonts" # for fontconfig
|
||||||
|
"/etc/machine-id"
|
||||||
|
"/etc/localtime"
|
||||||
|
|
||||||
|
# Fix: libEGL warning: egl: failed to create dri2 screen
|
||||||
|
"/etc/egl"
|
||||||
|
"/etc/static/egl"
|
||||||
|
];
|
||||||
|
bind.dev = [
|
||||||
|
# seems required when using nvidia as primary gpu
|
||||||
|
"/dev/nvidia0"
|
||||||
|
"/dev/nvidiactl"
|
||||||
|
"/dev/nvidia-modeset"
|
||||||
|
"/dev/nvidia-uvm"
|
||||||
|
];
|
||||||
|
|
||||||
|
env = {
|
||||||
|
XDG_DATA_DIRS = lib.mkForce (lib.makeSearchPath "share" [
|
||||||
|
iconTheme
|
||||||
|
cursorTheme
|
||||||
|
pkgs.shared-mime-info
|
||||||
|
]);
|
||||||
|
XCURSOR_PATH = lib.mkForce (lib.concatStringsSep ":" [
|
||||||
|
"${cursorTheme}/share/icons"
|
||||||
|
"${cursorTheme}/share/pixmaps"
|
||||||
|
]);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
# https://github.com/nixpak/pkgs/blob/master/pkgs/modules/network.nix
|
||||||
|
{
|
||||||
|
etc.sslCertificates.enable = true;
|
||||||
|
bubblewrap = {
|
||||||
|
bind.ro = ["/etc/resolv.conf"];
|
||||||
|
network = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
makeDesktopItem,
|
||||||
|
qq,
|
||||||
|
}:
|
||||||
|
makeDesktopItem {
|
||||||
|
name = "qq";
|
||||||
|
desktopName = "QQ";
|
||||||
|
exec = "qq %U";
|
||||||
|
terminal = false;
|
||||||
|
# To find the icon name(nushell):
|
||||||
|
# let p = NIXPKGS_ALLOW_UNFREE=1 nix eval --impure nixpkgs#qq.outPath | str trim --char '"'
|
||||||
|
# tree $"($p)/share/icons"
|
||||||
|
icon = "${qq}/share/icons/hicolor/512x512/apps/qq.png";
|
||||||
|
type = "Application";
|
||||||
|
categories = ["Network"];
|
||||||
|
comment = "QQ boxed";
|
||||||
|
}
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
# Refer:
|
||||||
|
# - Flatpak manifest's docs:
|
||||||
|
# - https://docs.flatpak.org/en/latest/manifests.html
|
||||||
|
# - https://docs.flatpak.org/en/latest/sandbox-permissions.html
|
||||||
|
# - QQ's flatpak manifest: https://github.com/flathub/com.qq.QQ/blob/master/com.qq.QQ.yaml
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
mkNixPak,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
mkNixPak {
|
||||||
|
config = {sloth, ...}: {
|
||||||
|
app = {
|
||||||
|
package = pkgs.qq.override {
|
||||||
|
# fix fcitx5 input method
|
||||||
|
commandLineArgs = lib.concatStringsSep " " ["--enable-wayland-ime"];
|
||||||
|
};
|
||||||
|
binPath = "bin/qq";
|
||||||
|
};
|
||||||
|
flatpak.appId = "com.tencent.qq";
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./modules/gui-base.nix
|
||||||
|
./modules/network.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
# list all dbus services:
|
||||||
|
# ls -al /run/current-system/sw/share/dbus-1/services/
|
||||||
|
# ls -al /etc/profiles/per-user/ryan/share/dbus-1/services/
|
||||||
|
dbus.policies = {
|
||||||
|
"org.gnome.Shell.Screencast" = "talk";
|
||||||
|
"org.freedesktop.Notifications" = "talk";
|
||||||
|
"org.kde.StatusNotifierWatcher" = "talk";
|
||||||
|
};
|
||||||
|
bubblewrap = {
|
||||||
|
# To trace all the home files QQ accesses, you can use the following nushell command:
|
||||||
|
# just trace-access qq
|
||||||
|
# See the Justfile in the root of this repository for more information.
|
||||||
|
bind.rw = [
|
||||||
|
# given the read write permission to the following directories.
|
||||||
|
# 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.xdgDocumentsDir "/QQ"]))
|
||||||
|
sloth.xdgDownloadDir
|
||||||
|
];
|
||||||
|
sockets = {
|
||||||
|
x11 = false;
|
||||||
|
wayland = true;
|
||||||
|
pipewire = true;
|
||||||
|
};
|
||||||
|
bind.dev = [
|
||||||
|
"/dev/shm" # Shared Memory
|
||||||
|
];
|
||||||
|
tmpfs = [
|
||||||
|
"/tmp"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
makeDesktopItem,
|
||||||
|
wechat-uos,
|
||||||
|
}:
|
||||||
|
makeDesktopItem {
|
||||||
|
name = "wechat";
|
||||||
|
desktopName = "WeChat";
|
||||||
|
exec = "wechat-uos %U";
|
||||||
|
terminal = false;
|
||||||
|
# To find the icon name(nushell):
|
||||||
|
# let p = NIXPKGS_ALLOW_UNFREE=1 nix eval --impure nixpkgs#wechat-uos.outPath | str trim --char '"'
|
||||||
|
# tree $"($p)/share/icons"
|
||||||
|
icon = "${wechat-uos}/share/icons/hicolor/256x256/apps/com.tencent.wechat.png";
|
||||||
|
type = "Application";
|
||||||
|
categories = ["Network"];
|
||||||
|
comment = "Wechat boxed";
|
||||||
|
}
|
||||||
@@ -0,0 +1,73 @@
|
|||||||
|
# TODO: wechat-uos is running in FHS sandbox by default, it's problematic
|
||||||
|
# to wrap it again via flatpak. We need to find a way to fix it.
|
||||||
|
# https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/we/wechat-uos/package.nix
|
||||||
|
# Refer:
|
||||||
|
# - Flatpak manifest's docs:
|
||||||
|
# - https://docs.flatpak.org/en/latest/manifests.html
|
||||||
|
# - https://docs.flatpak.org/en/latest/sandbox-permissions.html
|
||||||
|
# - wechat-uos's flatpak manifest: https://github.com/flathub/com.tencent.WeChat/blob/master/com.tencent.WeChat.yaml
|
||||||
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
mkNixPak,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
mkNixPak {
|
||||||
|
config = {sloth, ...}: {
|
||||||
|
app = {
|
||||||
|
package = pkgs.wechat-uos;
|
||||||
|
binPath = "bin/wechat-uos";
|
||||||
|
};
|
||||||
|
flatpak.appId = "com.tencent.WeChat";
|
||||||
|
|
||||||
|
imports = [
|
||||||
|
./modules/gui-base.nix
|
||||||
|
./modules/network.nix
|
||||||
|
];
|
||||||
|
|
||||||
|
# list all dbus services:
|
||||||
|
# ls -al /run/current-system/sw/share/dbus-1/services/
|
||||||
|
# ls -al /etc/profiles/per-user/ryan/share/dbus-1/services/
|
||||||
|
dbus.policies = {
|
||||||
|
"org.gnome.Shell.Screencast" = "talk";
|
||||||
|
# System tray icon
|
||||||
|
"org.freedesktop.Notifications" = "talk";
|
||||||
|
"org.kde.StatusNotifierWatcher" = "talk";
|
||||||
|
# File Manager
|
||||||
|
"org.freedesktop.FileManager1" = "talk";
|
||||||
|
# Uses legacy StatusNotifier implementation
|
||||||
|
"org.kde.*" = "own";
|
||||||
|
};
|
||||||
|
bubblewrap = {
|
||||||
|
# To trace all the home files QQ accesses, you can use the following nushell command:
|
||||||
|
# just trace-access wechat-uos
|
||||||
|
# See the Justfile in the root of this repository for more information.
|
||||||
|
bind.rw = [
|
||||||
|
# given the read write permission to the following directories.
|
||||||
|
# NOTE: sloth.mkdir is used to create the directory if it does not exist!
|
||||||
|
(sloth.mkdir (sloth.concat [sloth.homeDir "/.xwechat"]))
|
||||||
|
(sloth.mkdir (sloth.concat [sloth.xdgDocumentsDir "/xwechat_files"]))
|
||||||
|
(sloth.mkdir (sloth.concat [sloth.xdgDocumentsDir "/WeChat_Data/"]))
|
||||||
|
sloth.xdgDownloadDir
|
||||||
|
];
|
||||||
|
sockets = {
|
||||||
|
x11 = false;
|
||||||
|
wayland = true;
|
||||||
|
pipewire = true;
|
||||||
|
};
|
||||||
|
bind.dev = [
|
||||||
|
"/dev/shm" # Shared Memory
|
||||||
|
];
|
||||||
|
tmpfs = [
|
||||||
|
"/tmp"
|
||||||
|
];
|
||||||
|
|
||||||
|
env = {
|
||||||
|
# Hidpi scale
|
||||||
|
"QT_AUTO_SCREEN_SCALE_FACTOR" = "1";
|
||||||
|
# Only supports xcb
|
||||||
|
"QT_QPA_PLATFORM" = "kcb";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{modulesPath, ...}: {
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/profiles/hardened.nix")
|
||||||
|
];
|
||||||
|
|
||||||
|
# disable coredump that could be exploited later
|
||||||
|
# and also slow down the system when something crash
|
||||||
|
systemd.coredump.enable = false;
|
||||||
|
}
|
||||||
+18
-3
@@ -5,12 +5,11 @@
|
|||||||
}: {
|
}: {
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
# Misc
|
# Misc
|
||||||
tldr
|
|
||||||
cowsay
|
cowsay
|
||||||
gnupg
|
gnupg
|
||||||
gnumake
|
gnumake
|
||||||
|
|
||||||
# Morden cli tools, replacement of grep/sed/...
|
# Modern cli tools, replacement of grep/sed/...
|
||||||
|
|
||||||
# Interactively filter its input using fuzzy searching, not limit to filenames.
|
# Interactively filter its input using fuzzy searching, not limit to filenames.
|
||||||
fzf
|
fzf
|
||||||
@@ -62,7 +61,7 @@
|
|||||||
# do not enable aliases in nushell!
|
# do not enable aliases in nushell!
|
||||||
enableNushellIntegration = false;
|
enableNushellIntegration = false;
|
||||||
git = true;
|
git = true;
|
||||||
icons = true;
|
icons = "auto";
|
||||||
};
|
};
|
||||||
|
|
||||||
# a cat(1) clone with syntax highlighting and Git integration.
|
# a cat(1) clone with syntax highlighting and Git integration.
|
||||||
@@ -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
|
||||||
|
|||||||
+160
-137
@@ -1,147 +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)
|
||||||
|
$env.config.rm.always_trash = true
|
||||||
|
|
||||||
table: {
|
# recursion_limit (int): how many times a command can call itself recursively
|
||||||
mode: rounded # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other
|
# before an error will be generated.
|
||||||
index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column
|
$env.config.recursion_limit = 50
|
||||||
show_empty: true # show 'empty list' and 'empty record' placeholders for command output
|
|
||||||
trim: {
|
# ---------------------------
|
||||||
methodology: wrapping # wrapping or truncating
|
# Commandline Editor Settings
|
||||||
wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology
|
# ---------------------------
|
||||||
truncating_suffix: "..." # A suffix used by the 'truncating' methodology
|
|
||||||
}
|
# 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)
|
|
||||||
}
|
|
||||||
use_grid_icons: true
|
|
||||||
footer_mode: "25" # 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.
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,10 +1,18 @@
|
|||||||
{pkgs-unstable, ...}: let
|
{
|
||||||
|
config,
|
||||||
|
pkgs-unstable,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
shellAliases = {
|
shellAliases = {
|
||||||
k = "kubectl";
|
k = "kubectl";
|
||||||
|
|
||||||
urldecode = "python3 -c 'import sys, urllib.parse as ul; print(ul.unquote_plus(sys.stdin.read()))'";
|
urldecode = "python3 -c 'import sys, urllib.parse as ul; print(ul.unquote_plus(sys.stdin.read()))'";
|
||||||
urlencode = "python3 -c 'import sys, urllib.parse as ul; print(ul.quote_plus(sys.stdin.read()))'";
|
urlencode = "python3 -c 'import sys, urllib.parse as ul; print(ul.quote_plus(sys.stdin.read()))'";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
localBin = "${config.home.homeDirectory}/.local/bin";
|
||||||
|
goBin = "${config.home.homeDirectory}/go/bin";
|
||||||
|
rustBin = "${config.home.homeDirectory}/.cargo/bin";
|
||||||
in {
|
in {
|
||||||
# only works in bash/zsh, not nushell
|
# only works in bash/zsh, not nushell
|
||||||
home.shellAliases = shellAliases;
|
home.shellAliases = shellAliases;
|
||||||
@@ -20,7 +28,7 @@ in {
|
|||||||
enable = true;
|
enable = true;
|
||||||
enableCompletion = true;
|
enableCompletion = true;
|
||||||
bashrcExtra = ''
|
bashrcExtra = ''
|
||||||
export PATH="$HOME/.local/bin:$HOME/go/bin:$PATH"
|
export PATH="$PATH:${localBin}:${goBin}:${rustBin}"
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,12 @@
|
|||||||
# Changing working directory when exiting Yazi
|
# Changing working directory when exiting Yazi
|
||||||
enableBashIntegration = true;
|
enableBashIntegration = true;
|
||||||
enableNushellIntegration = true;
|
enableNushellIntegration = true;
|
||||||
|
settings = {
|
||||||
|
manager = {
|
||||||
|
show_hidden = true;
|
||||||
|
sort_dir_first = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
xdg.configFile."yazi/theme.toml".source = "${nur-ryan4yin.packages.${pkgs.system}.catppuccin-yazi}/mocha.toml";
|
xdg.configFile."yazi/theme.toml".source = "${nur-ryan4yin.packages.${pkgs.system}.catppuccin-yazi}/mocha.toml";
|
||||||
|
|||||||
@@ -5,6 +5,6 @@
|
|||||||
wireshark # network analyzer
|
wireshark # network analyzer
|
||||||
|
|
||||||
# IDEs
|
# IDEs
|
||||||
jetbrains.idea-community
|
# jetbrains.idea-community
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,13 +13,11 @@ My current terminal emulators are:
|
|||||||
1. kitty: My main terminal emulator.
|
1. kitty: My main terminal emulator.
|
||||||
1. to select/copy a large mount of text, We should do some tricks via kitty's `scrollback_pager`
|
1. to select/copy a large mount of text, We should do some tricks via kitty's `scrollback_pager`
|
||||||
with neovim, it's really painful: <https://github.com/kovidgoyal/kitty/issues/719>
|
with neovim, it's really painful: <https://github.com/kovidgoyal/kitty/issues/719>
|
||||||
2. wezterm: My secondary terminal emulator.
|
2. foot: A fast, lightweight and minimalistic Wayland terminal emulator.
|
||||||
1. its search ability is very basic, and it's not easy to use.
|
|
||||||
1. its scrollback buffer's copy mode is very like vim, which is nice, but zellij's even better,
|
|
||||||
it can use neovim as its default scrollback buffer's editor without any pain!
|
|
||||||
3. foot: a fast, lightweight and minimalistic Wayland terminal emulator.
|
|
||||||
1. foot only do the things a terminal emulator should do, no more, no less.
|
1. foot only do the things a terminal emulator should do, no more, no less.
|
||||||
1. It's really suitable for tiling window manager or zellij users!
|
1. It's really suitable for tiling window manager or zellij users!
|
||||||
|
3. alacritty: A cross-platform, GPU-accelerated terminal emulator.
|
||||||
|
1. alacritty is really fast, I use it as a backup terminal emulator on all my desktops.
|
||||||
|
|
||||||
## 'xterm-kitty': unknown terminal type when `ssh` into a remote host or `sudo xxx`
|
## 'xterm-kitty': unknown terminal type when `ssh` into a remote host or `sudo xxx`
|
||||||
|
|
||||||
@@ -54,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>
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,65 @@
|
|||||||
|
[colors.primary]
|
||||||
|
background = "#1e1e2e"
|
||||||
|
foreground = "#cdd6f4"
|
||||||
|
dim_foreground = "#7f849c"
|
||||||
|
bright_foreground = "#cdd6f4"
|
||||||
|
|
||||||
|
[colors.cursor]
|
||||||
|
text = "#1e1e2e"
|
||||||
|
cursor = "#f5e0dc"
|
||||||
|
|
||||||
|
[colors.vi_mode_cursor]
|
||||||
|
text = "#1e1e2e"
|
||||||
|
cursor = "#b4befe"
|
||||||
|
|
||||||
|
[colors.search.matches]
|
||||||
|
foreground = "#1e1e2e"
|
||||||
|
background = "#a6adc8"
|
||||||
|
|
||||||
|
[colors.search.focused_match]
|
||||||
|
foreground = "#1e1e2e"
|
||||||
|
background = "#a6e3a1"
|
||||||
|
|
||||||
|
[colors.footer_bar]
|
||||||
|
foreground = "#1e1e2e"
|
||||||
|
background = "#a6adc8"
|
||||||
|
|
||||||
|
[colors.hints.start]
|
||||||
|
foreground = "#1e1e2e"
|
||||||
|
background = "#f9e2af"
|
||||||
|
|
||||||
|
[colors.hints.end]
|
||||||
|
foreground = "#1e1e2e"
|
||||||
|
background = "#a6adc8"
|
||||||
|
|
||||||
|
[colors.selection]
|
||||||
|
text = "#1e1e2e"
|
||||||
|
background = "#f5e0dc"
|
||||||
|
|
||||||
|
[colors.normal]
|
||||||
|
black = "#45475a"
|
||||||
|
red = "#f38ba8"
|
||||||
|
green = "#a6e3a1"
|
||||||
|
yellow = "#f9e2af"
|
||||||
|
blue = "#89b4fa"
|
||||||
|
magenta = "#f5c2e7"
|
||||||
|
cyan = "#94e2d5"
|
||||||
|
white = "#bac2de"
|
||||||
|
|
||||||
|
[colors.bright]
|
||||||
|
black = "#585b70"
|
||||||
|
red = "#f38ba8"
|
||||||
|
green = "#a6e3a1"
|
||||||
|
yellow = "#f9e2af"
|
||||||
|
blue = "#89b4fa"
|
||||||
|
magenta = "#f5c2e7"
|
||||||
|
cyan = "#94e2d5"
|
||||||
|
white = "#a6adc8"
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 16
|
||||||
|
color = "#fab387"
|
||||||
|
|
||||||
|
[[colors.indexed_colors]]
|
||||||
|
index = 17
|
||||||
|
color = "#f5e0dc"
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
pkgs-unstable,
|
||||||
|
...
|
||||||
|
}:
|
||||||
|
###########################################################
|
||||||
|
#
|
||||||
|
# Alacritty Configuration
|
||||||
|
#
|
||||||
|
# Useful Hot Keys for macOS:
|
||||||
|
# 1. Multi-Window: `command + N`
|
||||||
|
# 2. Increase Font Size: `command + =` | `command + +`
|
||||||
|
# 3. Decrease Font Size: `command + -` | `command + _`
|
||||||
|
# 4. Search Text: `command + F`
|
||||||
|
# 5. And Other common shortcuts such as Copy, Paste, Cursor Move, etc.
|
||||||
|
#
|
||||||
|
# Useful Hot Keys for Linux:
|
||||||
|
# 1. Increase Font Size: `ctrl + shift + =` | `ctrl + shift + +`
|
||||||
|
# 2. Decrease Font Size: `ctrl + shift + -` | `ctrl + shift + _`
|
||||||
|
# 3. Search Text: `ctrl + shift + N`
|
||||||
|
# 4. And Other common shortcuts such as Copy, Paste, Cursor Move, etc.
|
||||||
|
#
|
||||||
|
# Note: Alacritty do not have support for Tabs, and any graphic protocol.
|
||||||
|
#
|
||||||
|
###########################################################
|
||||||
|
{
|
||||||
|
programs.alacritty = {
|
||||||
|
enable = true;
|
||||||
|
package = pkgs-unstable.alacritty;
|
||||||
|
# https://alacritty.org/config-alacritty.html
|
||||||
|
settings = {
|
||||||
|
general.import = [
|
||||||
|
./catppuccin-mocha.toml
|
||||||
|
];
|
||||||
|
window = {
|
||||||
|
opacity = 0.93;
|
||||||
|
startup_mode = "Maximized"; # Maximized window
|
||||||
|
dynamic_title = true;
|
||||||
|
option_as_alt = "Both"; # Option key acts as Alt on macOS
|
||||||
|
};
|
||||||
|
scrolling = {
|
||||||
|
history = 10000;
|
||||||
|
};
|
||||||
|
font = {
|
||||||
|
bold = {family = "JetBrainsMono Nerd Font";};
|
||||||
|
italic = {family = "JetBrainsMono Nerd Font";};
|
||||||
|
normal = {family = "JetBrainsMono Nerd Font";};
|
||||||
|
bold_italic = {family = "JetBrainsMono Nerd Font";};
|
||||||
|
size =
|
||||||
|
if pkgs.stdenv.isDarwin
|
||||||
|
then 14
|
||||||
|
else 13;
|
||||||
|
};
|
||||||
|
terminal = {
|
||||||
|
# Spawn a nushell in login mode via `bash`
|
||||||
|
shell = {
|
||||||
|
program = "${pkgs.bash}/bin/bash";
|
||||||
|
args = ["--login" "-c" "nu --login --interactive"];
|
||||||
|
};
|
||||||
|
# Controls the ability to write to the system clipboard with the OSC 52 escape sequence.
|
||||||
|
# It's used by zellij to copy text to the system clipboard.
|
||||||
|
osc52 = "CopyPaste";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -0,0 +1,72 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
programs.foot = {
|
||||||
|
# foot is designed only for Linux
|
||||||
|
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
|
||||||
|
settings = {
|
||||||
|
main = {
|
||||||
|
term = "foot"; # or "xterm-256color" for maximum compatibility
|
||||||
|
font = "JetBrainsMono Nerd Font:size=14";
|
||||||
|
dpi-aware = "yes";
|
||||||
|
|
||||||
|
# Spawn a nushell in login mode via `bash`
|
||||||
|
shell = "${pkgs.bash}/bin/bash --login -c 'nu --login --interactive'";
|
||||||
|
};
|
||||||
|
|
||||||
|
mouse = {
|
||||||
|
hide-when-typing = "yes";
|
||||||
|
};
|
||||||
|
|
||||||
|
# https://github.com/catppuccin/foot/blob/main/themes/catppuccin-mocha.ini
|
||||||
|
cursor = {
|
||||||
|
color = "11111b f5e0dc";
|
||||||
|
};
|
||||||
|
colors = {
|
||||||
|
alpha = "0.93"; # background opacity
|
||||||
|
|
||||||
|
foreground = "cdd6f4";
|
||||||
|
background = "1e1e2e";
|
||||||
|
|
||||||
|
regular0 = "45475a";
|
||||||
|
regular1 = "f38ba8";
|
||||||
|
regular2 = "a6e3a1";
|
||||||
|
regular3 = "f9e2af";
|
||||||
|
regular4 = "89b4fa";
|
||||||
|
regular5 = "f5c2e7";
|
||||||
|
regular6 = "94e2d5";
|
||||||
|
regular7 = "bac2de";
|
||||||
|
|
||||||
|
bright0 = "585b70";
|
||||||
|
bright1 = "f38ba8";
|
||||||
|
bright2 = "a6e3a1";
|
||||||
|
bright3 = "f9e2af";
|
||||||
|
bright4 = "89b4fa";
|
||||||
|
bright5 = "f5c2e7";
|
||||||
|
bright6 = "94e2d5";
|
||||||
|
bright7 = "a6adc8";
|
||||||
|
|
||||||
|
"16" = "fab387";
|
||||||
|
"17" = "f5e0dc";
|
||||||
|
|
||||||
|
"selection-foreground" = "cdd6f4";
|
||||||
|
"selection-background" = "414356";
|
||||||
|
|
||||||
|
"search-box-no-match" = "11111b f38ba8";
|
||||||
|
"search-box-match" = "cdd6f4 313244";
|
||||||
|
|
||||||
|
"jump-labels" = "11111b fab387";
|
||||||
|
urls = "89b4fa";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -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'";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -19,7 +19,7 @@
|
|||||||
# kitty has catppuccin theme built-in,
|
# kitty has catppuccin theme built-in,
|
||||||
# all the built-in themes are packaged into an extra package named `kitty-themes`
|
# all the built-in themes are packaged into an extra package named `kitty-themes`
|
||||||
# and it's installed by home-manager if `theme` is specified.
|
# and it's installed by home-manager if `theme` is specified.
|
||||||
theme = "Catppuccin-Mocha";
|
themeFile = "Catppuccin-Mocha";
|
||||||
font = {
|
font = {
|
||||||
name = "JetBrainsMono Nerd Font";
|
name = "JetBrainsMono Nerd Font";
|
||||||
# use different font size on macOS
|
# use different font size on macOS
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
else 13;
|
else 13;
|
||||||
};
|
};
|
||||||
|
|
||||||
# consistent with wezterm
|
# consistent with other terminal emulators
|
||||||
keybindings = {
|
keybindings = {
|
||||||
"ctrl+shift+m" = "toggle_maximized";
|
"ctrl+shift+m" = "toggle_maximized";
|
||||||
"ctrl+shift+f" = "show_scrollback"; # search in the current window
|
"ctrl+shift+f" = "show_scrollback"; # search in the current window
|
||||||
|
|||||||
@@ -1,105 +0,0 @@
|
|||||||
{pkgs, ...}:
|
|
||||||
###########################################################
|
|
||||||
#
|
|
||||||
# Wezterm Configuration
|
|
||||||
#
|
|
||||||
# Useful Hot Keys for Linux(replace `ctrl + shift` with `cmd` on macOS)):
|
|
||||||
# 1. Increase Font Size: `ctrl + shift + =` | `ctrl + shift + +`
|
|
||||||
# 2. Decrease Font Size: `ctrl + shift + -` | `ctrl + shift + _`
|
|
||||||
# 3. And Other common shortcuts such as Copy, Paste, Cursor Move, etc.
|
|
||||||
#
|
|
||||||
# Default Keybindings: https://wezfurlong.org/wezterm/config/default-keys.html
|
|
||||||
#
|
|
||||||
###########################################################
|
|
||||||
{
|
|
||||||
# wezterm has catppuccin theme built-in,
|
|
||||||
# it's not necessary to install it separately.
|
|
||||||
|
|
||||||
# we can add wezterm as a flake input once this PR is merged:
|
|
||||||
# https://github.com/wez/wezterm/pull/3547
|
|
||||||
|
|
||||||
programs.wezterm = {
|
|
||||||
enable = true; # disable
|
|
||||||
|
|
||||||
# install wezterm via homebrew on macOS to avoid compilation, dummy package here.
|
|
||||||
package =
|
|
||||||
if pkgs.stdenv.isLinux
|
|
||||||
then pkgs.wezterm
|
|
||||||
else pkgs.hello;
|
|
||||||
|
|
||||||
enableBashIntegration = pkgs.stdenv.isLinux;
|
|
||||||
enableZshIntegration = pkgs.stdenv.isLinux;
|
|
||||||
|
|
||||||
extraConfig = let
|
|
||||||
fontsize =
|
|
||||||
if pkgs.stdenv.isLinux
|
|
||||||
then "13.0"
|
|
||||||
else "14.0";
|
|
||||||
in ''
|
|
||||||
-- Pull in the wezterm API
|
|
||||||
local wezterm = require 'wezterm'
|
|
||||||
|
|
||||||
-- This table will hold the configuration.
|
|
||||||
local config = {}
|
|
||||||
|
|
||||||
-- In newer versions of wezterm, use the config_builder which will
|
|
||||||
-- help provide clearer error messages
|
|
||||||
if wezterm.config_builder then
|
|
||||||
config = wezterm.config_builder()
|
|
||||||
end
|
|
||||||
|
|
||||||
wezterm.on('toggle-opacity', function(window, pane)
|
|
||||||
local overrides = window:get_config_overrides() or {}
|
|
||||||
if not overrides.window_background_opacity then
|
|
||||||
overrides.window_background_opacity = 0.93
|
|
||||||
else
|
|
||||||
overrides.window_background_opacity = nil
|
|
||||||
end
|
|
||||||
window:set_config_overrides(overrides)
|
|
||||||
end)
|
|
||||||
|
|
||||||
wezterm.on('toggle-maximize', function(window, pane)
|
|
||||||
window:maximize()
|
|
||||||
end)
|
|
||||||
|
|
||||||
-- This is where you actually apply your config choices
|
|
||||||
config.color_scheme = "Catppuccin Mocha"
|
|
||||||
config.font = wezterm.font_with_fallback {
|
|
||||||
"JetBrainsMono Nerd Font",
|
|
||||||
"FiraCode Nerd Font",
|
|
||||||
|
|
||||||
-- To avoid 'Chinese characters displayed as variant (Japanese) glyphs'
|
|
||||||
"Source Han Sans SC",
|
|
||||||
"Source Han Sans TC"
|
|
||||||
}
|
|
||||||
|
|
||||||
config.hide_tab_bar_if_only_one_tab = true
|
|
||||||
config.scrollback_lines = 10000
|
|
||||||
config.enable_scroll_bar = true
|
|
||||||
config.term = 'wezterm'
|
|
||||||
|
|
||||||
config.keys = {
|
|
||||||
-- toggle opacity(CTRL + SHIFT + B)
|
|
||||||
{
|
|
||||||
key = 'B',
|
|
||||||
mods = 'CTRL',
|
|
||||||
action = wezterm.action.EmitEvent 'toggle-opacity',
|
|
||||||
},
|
|
||||||
{
|
|
||||||
key = 'M',
|
|
||||||
mods = 'CTRL',
|
|
||||||
action = wezterm.action.EmitEvent 'toggle-maximize',
|
|
||||||
},
|
|
||||||
}
|
|
||||||
config.font_size = ${fontsize}
|
|
||||||
|
|
||||||
-- 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`
|
|
||||||
config.default_prog = { '${pkgs.bash}/bin/bash', '--login', '-c', 'nu --login --interactive' }
|
|
||||||
|
|
||||||
return config
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
||||||
+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,6 +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 & 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
|
||||||
@@ -46,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.
|
||||||
|
|
||||||
|
|||||||
@@ -5,14 +5,12 @@
|
|||||||
- paredit/[lispy](https://github.com/doomemacs/doomemacs/tree/master/modules/editor/lispy): too
|
- paredit/[lispy](https://github.com/doomemacs/doomemacs/tree/master/modules/editor/lispy): too
|
||||||
complex.
|
complex.
|
||||||
- [evil-cleverparens](https://github.com/emacs-evil/evil-cleverparens): simple and useful.
|
- [evil-cleverparens](https://github.com/emacs-evil/evil-cleverparens): simple and useful.
|
||||||
- [parinfer(par-in-fer)](https://shaunlebron.github.io/parinfer/): morden, simple, elegant and
|
- [parinfer(par-in-fer)](https://shaunlebron.github.io/parinfer/): modern, simple, elegant and
|
||||||
useful, but works not well with some other completion plugins...
|
useful, but works not well with some other completion plugins...
|
||||||
- to make parinfer works, you should disable sexp & smartparens in any lisp mode.
|
- to make parinfer works, you should disable sexp & smartparens in any lisp mode.
|
||||||
|
|
||||||
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 auther'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 = ''
|
|
||||||
export PATH="${config.xdg.configHome}/emacs/bin:$PATH"
|
|
||||||
'';
|
|
||||||
shellAliases = {
|
|
||||||
e = "emacsclient --create-frame"; # gui
|
|
||||||
et = "emacsclient --create-frame --tty"; # termimal
|
|
||||||
};
|
|
||||||
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)
|
|
||||||
@@ -20,7 +20,7 @@ Use `:tutor` in helix to start the tutorial.
|
|||||||
1. Helix: delete 2 word: `2w` then `x`. You can always see what you're selecting before you apply
|
1. Helix: delete 2 word: `2w` then `x`. You can always see what you're selecting before you apply
|
||||||
the action.
|
the action.
|
||||||
2. Neovim: delete 2 word: `d`. then `2w`. No visual feedback before you apply the action.
|
2. Neovim: delete 2 word: `d`. then `2w`. No visual feedback before you apply the action.
|
||||||
1. Helix - Morden builtin features: LSP, tree-sitter, fuzzy finder, multi cursors, surround and
|
1. Helix - Modern builtin features: LSP, tree-sitter, fuzzy finder, multi cursors, surround and
|
||||||
more.
|
more.
|
||||||
1. They're all available in Neovim too, but you need to find and use the right plugins manually,
|
1. They're all available in Neovim too, but you need to find and use the right plugins manually,
|
||||||
which takes time and effort.
|
which takes time and effort.
|
||||||
|
|||||||
@@ -84,6 +84,8 @@ plugin.
|
|||||||
| Show line diagnostics | `gl` |
|
| Show line diagnostics | `gl` |
|
||||||
| Show function/variable info | `K` |
|
| Show function/variable info | `K` |
|
||||||
| References of a symbol | `gr` |
|
| References of a symbol | `gr` |
|
||||||
|
| Next tab | `]b` |
|
||||||
|
| Previous tab | `[b` |
|
||||||
|
|
||||||
### Window Navigation
|
### Window Navigation
|
||||||
|
|
||||||
@@ -94,8 +96,11 @@ plugin.
|
|||||||
|
|
||||||
### Splitting and Buffers
|
### Splitting and Buffers
|
||||||
|
|
||||||
| | Action | Shortcut | | --------------------- | ------------- | | Horizontal Split | `\` | |
|
| Action | Shortcut |
|
||||||
Vertical Split | `\|` | | Close Buffer | `<Space> + c` |
|
| ---------------- | ------------- |
|
||||||
|
| Horizontal Split | `\` |
|
||||||
|
| Vertical Split | `\|` |
|
||||||
|
| Close Buffer | `<Space> + c` |
|
||||||
|
|
||||||
### Editing and Formatting
|
### Editing and Formatting
|
||||||
|
|
||||||
@@ -109,7 +114,18 @@ Vertical Split | `\|` | | Close Buffer | `<Space> + c` |
|
|||||||
| Comment Line(support multiple lines) | `<Space> + /` |
|
| Comment Line(support multiple lines) | `<Space> + /` |
|
||||||
| Open filepath/URL at cursor(neovim's builtin command) | `gx` |
|
| Open filepath/URL at cursor(neovim's builtin command) | `gx` |
|
||||||
| Find files by name (fzf) | `<Space> + ff` |
|
| Find files by name (fzf) | `<Space> + ff` |
|
||||||
|
| Find files by name (include hidden files) | `<Space> + fF` |
|
||||||
| Grep string in files (ripgrep) | `<Space> + fw` |
|
| Grep string in files (ripgrep) | `<Space> + fw` |
|
||||||
|
| Grep string in files (include hidden files) | `<Space> + fW` |
|
||||||
|
|
||||||
|
### Git
|
||||||
|
|
||||||
|
| Action | Shortcut |
|
||||||
|
| -------------------------- | --------------- |
|
||||||
|
| Git Commits (repository) | `:<Space> + gc` |
|
||||||
|
| Git Commits (current file) | `:<Space> + gC` |
|
||||||
|
| Git Branches | `:<Space> + gb` |
|
||||||
|
| Git Status | `:<Space> + gt` |
|
||||||
|
|
||||||
### Sessions
|
### Sessions
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
config,
|
config,
|
||||||
lib,
|
lib,
|
||||||
pkgs,
|
pkgs,
|
||||||
|
pkgs-unstable,
|
||||||
...
|
...
|
||||||
}:
|
}:
|
||||||
###############################################################################
|
###############################################################################
|
||||||
@@ -14,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;
|
||||||
@@ -25,11 +27,33 @@ in {
|
|||||||
programs = {
|
programs = {
|
||||||
neovim = {
|
neovim = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
package = pkgs-unstable.neovim-unwrapped;
|
||||||
|
|
||||||
defaultEditor = true;
|
# defaultEditor = true; # set EDITOR at system-wide level
|
||||||
viAlias = true;
|
viAlias = true;
|
||||||
vimAlias = true;
|
vimAlias = true;
|
||||||
|
|
||||||
|
# These environment variables are needed to build and run binaries
|
||||||
|
# with external package managers like mason.nvim.
|
||||||
|
#
|
||||||
|
# LD_LIBRARY_PATH is also needed to run the non-FHS binaries downloaded by mason.nvim.
|
||||||
|
# it will be set by nix-ld, so we do not need to set it here again.
|
||||||
|
extraWrapperArgs = with pkgs; [
|
||||||
|
# LIBRARY_PATH is used by gcc before compilation to search directories
|
||||||
|
# containing static and shared libraries that need to be linked to your program.
|
||||||
|
"--suffix"
|
||||||
|
"LIBRARY_PATH"
|
||||||
|
":"
|
||||||
|
"${lib.makeLibraryPath [stdenv.cc.cc zlib]}"
|
||||||
|
|
||||||
|
# PKG_CONFIG_PATH is used by pkg-config before compilation to search directories
|
||||||
|
# containing .pc files that describe the libraries that need to be linked to your program.
|
||||||
|
"--suffix"
|
||||||
|
"PKG_CONFIG_PATH"
|
||||||
|
":"
|
||||||
|
"${lib.makeSearchPathOutput "dev" "lib/pkgconfig" [stdenv.cc.cc zlib]}"
|
||||||
|
];
|
||||||
|
|
||||||
# Currently we use lazy.nvim as neovim's package manager, so comment this one.
|
# Currently we use lazy.nvim as neovim's package manager, so comment this one.
|
||||||
#
|
#
|
||||||
# NOTE: These plugins will not be used by astronvim by default!
|
# NOTE: These plugins will not be used by astronvim by default!
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ return {
|
|||||||
features = {
|
features = {
|
||||||
autoformat = true, -- enable or disable auto formatting on start
|
autoformat = true, -- enable or disable auto formatting on start
|
||||||
codelens = true, -- enable/disable codelens refresh on start
|
codelens = true, -- enable/disable codelens refresh on start
|
||||||
inlay_hints = false, -- enable/disable inlay hints on start
|
inlay_hints = true, -- enable/disable inlay hints on start
|
||||||
semantic_tokens = true, -- enable/disable semantic token highlighting
|
semantic_tokens = true, -- enable/disable semantic token highlighting
|
||||||
},
|
},
|
||||||
-- customize lsp formatting options
|
-- customize lsp formatting options
|
||||||
@@ -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
|
||||||
@@ -72,7 +72,7 @@ return {
|
|||||||
"nushell", -- nushell language server
|
"nushell", -- nushell language server
|
||||||
|
|
||||||
---- Web Development
|
---- Web Development
|
||||||
"tsserver", -- typescript/javascript language server
|
"ts_ls", -- typescript/javascript language server
|
||||||
"tailwindcss", -- tailwindcss language server
|
"tailwindcss", -- tailwindcss language server
|
||||||
"html", -- html language server
|
"html", -- html language server
|
||||||
"cssls", -- css language server
|
"cssls", -- css language server
|
||||||
@@ -101,6 +101,18 @@ return {
|
|||||||
filetypes = { "scheme", "scm" },
|
filetypes = { "scheme", "scm" },
|
||||||
single_file_support = true,
|
single_file_support = true,
|
||||||
},
|
},
|
||||||
|
rust_analyzer = {
|
||||||
|
settings = {
|
||||||
|
-- Make the rust-analyzer use its own profile,
|
||||||
|
-- so you can run cargo build without that being blocked while rust-analyzer runs.
|
||||||
|
["rust-analyzer"] = {
|
||||||
|
cargo = {
|
||||||
|
extraEnv = { CARGO_PROFILE_RUST_ANALYZER_INHERITS = "dev" },
|
||||||
|
extraArgs = { "--profile", "rust-analyzer" },
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
-- customize how language servers are attached
|
-- customize how language servers are attached
|
||||||
handlers = {
|
handlers = {
|
||||||
|
|||||||
@@ -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,10 +0,0 @@
|
|||||||
-- Custom copilot-lua to enable filetypes: markdown
|
|
||||||
return {
|
|
||||||
"zbirenbaum/copilot.lua",
|
|
||||||
opts = function(_, opts)
|
|
||||||
opts.filetypes = {
|
|
||||||
yaml = true,
|
|
||||||
markdown = true,
|
|
||||||
}
|
|
||||||
end,
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
-- Customize Mason plugins
|
-- Customize Mason plugins
|
||||||
|
--
|
||||||
|
-- NOTE: Issue - mason.nvim does not support NixOS:
|
||||||
|
-- https://github.com/williamboman/mason.nvim/issues/428
|
||||||
|
|
||||||
---@type LazySpec
|
---@type LazySpec
|
||||||
return {
|
return {
|
||||||
@@ -60,4 +63,16 @@ return {
|
|||||||
-- })
|
-- })
|
||||||
-- end,
|
-- end,
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"williamboman/mason.nvim",
|
||||||
|
opts = function(_, opts)
|
||||||
|
-- Where Mason should put its bin location in your PATH. Can be one of:
|
||||||
|
-- - "prepend" (default, Mason's bin location is put first in PATH)
|
||||||
|
-- - "append" (Mason's bin location is put at the end of PATH)
|
||||||
|
-- - "skip" (doesn't modify PATH)
|
||||||
|
---@type '"prepend"' | '"append"' | '"skip"'
|
||||||
|
opts.PATH = "append" -- use mason's package only when no other package is found
|
||||||
|
end,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ return {
|
|||||||
opts.ensure_installed = require("astrocore").list_insert_unique(opts.ensure_installed, {
|
opts.ensure_installed = require("astrocore").list_insert_unique(opts.ensure_installed, {
|
||||||
-- please add only the tree-sitters that are not available in nixpkgs here
|
-- please add only the tree-sitters that are not available in nixpkgs here
|
||||||
|
|
||||||
|
"just",
|
||||||
"kdl",
|
"kdl",
|
||||||
"csv",
|
"csv",
|
||||||
"xml",
|
"xml",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
{pkgs, ...}: {
|
{
|
||||||
nixpkgs.config = {
|
pkgs,
|
||||||
programs.npm.npmrc = ''
|
pkgs-unstable,
|
||||||
prefix = ''${HOME}/.npm-global
|
...
|
||||||
'';
|
}: {
|
||||||
};
|
|
||||||
|
|
||||||
home.packages = with pkgs; (
|
home.packages = with pkgs; (
|
||||||
# -*- Data & Configuration Languages -*-#
|
# -*- Data & Configuration Languages -*-#
|
||||||
[
|
[
|
||||||
@@ -36,7 +34,7 @@
|
|||||||
marksman # language server for markdown
|
marksman # language server for markdown
|
||||||
glow # markdown previewer
|
glow # markdown previewer
|
||||||
pandoc # document converter
|
pandoc # document converter
|
||||||
hugo # static site generator
|
pkgs-unstable.hugo # static site generator
|
||||||
|
|
||||||
#-- sql
|
#-- sql
|
||||||
sqlfluff
|
sqlfluff
|
||||||
@@ -60,13 +58,14 @@
|
|||||||
# llvmPackages.clang-unwrapped
|
# llvmPackages.clang-unwrapped
|
||||||
clang-tools
|
clang-tools
|
||||||
lldb
|
lldb
|
||||||
|
vscode-extensions.vadimcn.vscode-lldb.adapter # codelldb - debugger
|
||||||
|
|
||||||
#-- 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
|
||||||
|
|
||||||
@@ -78,22 +77,16 @@
|
|||||||
pyquery
|
pyquery
|
||||||
pyyaml
|
pyyaml
|
||||||
boto3
|
boto3
|
||||||
|
|
||||||
## emacs's lsp-bridge dependenciesge
|
|
||||||
# epc
|
|
||||||
# orjson
|
|
||||||
# sexpdata
|
|
||||||
# six
|
|
||||||
# setuptools
|
|
||||||
# paramiko
|
|
||||||
# rapidfuzz
|
|
||||||
]
|
]
|
||||||
))
|
))
|
||||||
|
|
||||||
#-- rust
|
#-- rust
|
||||||
rust-analyzer
|
# we'd better use the rust-overlays for rust development
|
||||||
cargo # rust package manager
|
pkgs-unstable.rustc
|
||||||
rustfmt
|
pkgs-unstable.rust-analyzer
|
||||||
|
pkgs-unstable.cargo # rust package manager
|
||||||
|
pkgs-unstable.rustfmt
|
||||||
|
pkgs-unstable.clippy # rust linter
|
||||||
|
|
||||||
#-- golang
|
#-- golang
|
||||||
go
|
go
|
||||||
@@ -134,11 +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.isLinux && pkgs.stdenv.isx86
|
||||||
|
# then pkgs-unstable.akkuPackages.scheme-langserver
|
||||||
|
# else pkgs.emptyDirectory
|
||||||
|
# )
|
||||||
|
# ]
|
||||||
++ [
|
++ [
|
||||||
proselint # English prose linter
|
proselint # English prose linter
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ using a Cloud provider for key management.
|
|||||||
Both age, Sops & GnuPG provide asymmetric encryption, which is useful for encrypting files for a
|
Both age, Sops & GnuPG provide asymmetric encryption, which is useful for encrypting files for a
|
||||||
specific user.
|
specific user.
|
||||||
|
|
||||||
For morden use, age is recommended, as it use [AEAD encryption function -
|
For modern use, age is recommended, as it use [AEAD encryption function -
|
||||||
ChaCha20-Poly1305][age Format v1], If you do not want to manage the keys by yourself, Sops is
|
ChaCha20-Poly1305][age Format v1], If you do not want to manage the keys by yourself, Sops is
|
||||||
recommended, as it use KMS for key management.
|
recommended, as it use KMS for key management.
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,11 @@
|
|||||||
{pkgs, ...}: {
|
{
|
||||||
|
pkgs,
|
||||||
|
pkgs-unstable,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
age
|
age
|
||||||
sops
|
pkgs-unstable.sops
|
||||||
rclone
|
rclone
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,15 +96,15 @@ 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).
|
||||||
|
|
||||||
Let's generate a keypair interactively:
|
Let's generate a keypair interactively:
|
||||||
|
|
||||||
> Now in 2024, GnuPG 2.4.1 defaults to ECC algorithm (9) and Curve 25519 for ECC, which is morden
|
> Now in 2024, GnuPG 2.4.1 defaults to ECC algorithm (9) and Curve 25519 for ECC, which is modern
|
||||||
> and safe, I would recommend to use these defaults directly.
|
> and safe, I would recommend to use these defaults directly.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
@@ -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,10 +1,11 @@
|
|||||||
let
|
{pkgs, ...}: let
|
||||||
shellAliases = {
|
shellAliases = {
|
||||||
"zj" = "zellij";
|
"zj" = "zellij";
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
programs.zellij = {
|
programs.zellij = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
package = pkgs.zellij;
|
||||||
};
|
};
|
||||||
# auto start zellij in nushell
|
# auto start zellij in nushell
|
||||||
programs.nushell.extraConfig = ''
|
programs.nushell.extraConfig = ''
|
||||||
|
|||||||
@@ -0,0 +1,329 @@
|
|||||||
|
# Place a copy of this config to ~/.aerospace.toml
|
||||||
|
# After that, you can edit ~/.aerospace.toml to your liking
|
||||||
|
|
||||||
|
# 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
|
||||||
|
# Available commands: https://nikitabobko.github.io/AeroSpace/commands
|
||||||
|
after-login-command = []
|
||||||
|
|
||||||
|
# You can use it to add commands that run after AeroSpace startup.
|
||||||
|
# 'after-startup-command' is run after 'after-login-command'
|
||||||
|
# Available commands : https://nikitabobko.github.io/AeroSpace/commands
|
||||||
|
after-startup-command = [
|
||||||
|
# Highlight focused windows with colored borders
|
||||||
|
#
|
||||||
|
# JankyBorders has a built-in detection of already running process,
|
||||||
|
# so it won't be run twice on AeroSpace restart
|
||||||
|
'exec-and-forget borders active_color=0xffe1e3e4 inactive_color=0xff494d64 width=5.0',
|
||||||
|
]
|
||||||
|
|
||||||
|
# Start AeroSpace at login
|
||||||
|
start-at-login = true
|
||||||
|
|
||||||
|
# Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization
|
||||||
|
enable-normalization-flatten-containers = true
|
||||||
|
enable-normalization-opposite-orientation-for-nested-containers = true
|
||||||
|
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/guide#layouts
|
||||||
|
# The 'accordion-padding' specifies the size of accordion padding
|
||||||
|
# You can set 0 to disable the padding feature
|
||||||
|
accordion-padding = 30
|
||||||
|
|
||||||
|
# Possible values: tiles|accordion
|
||||||
|
default-root-container-layout = 'tiles'
|
||||||
|
|
||||||
|
# Possible values: horizontal|vertical|auto
|
||||||
|
# 'auto' means: wide monitor (anything wider than high) gets horizontal orientation,
|
||||||
|
# tall monitor (anything higher than wide) gets vertical orientation
|
||||||
|
default-root-container-orientation = 'auto'
|
||||||
|
|
||||||
|
# Mouse follows focus when focused monitor changes
|
||||||
|
# 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/commands#move-mouse
|
||||||
|
# Fallback value (if you omit the key): on-focused-monitor-changed = []
|
||||||
|
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-*).
|
||||||
|
# Possible values:
|
||||||
|
# - Constant: gaps.outer.top = 8
|
||||||
|
# - 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.
|
||||||
|
# Monitor pattern is the same as for 'workspace-to-monitor-force-assignment'.
|
||||||
|
# See:
|
||||||
|
# https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors
|
||||||
|
[gaps]
|
||||||
|
inner.horizontal = 3
|
||||||
|
inner.vertical = 3
|
||||||
|
outer.left = 3
|
||||||
|
outer.bottom = 3
|
||||||
|
outer.top = 3
|
||||||
|
outer.right = 3
|
||||||
|
|
||||||
|
# ['main'] binding mode declaration
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
|
||||||
|
# ['main'] binding mode must be always presented
|
||||||
|
# Fallback value (if you omit the key): mode.main.binding = {}
|
||||||
|
[mode.main.binding]
|
||||||
|
|
||||||
|
# All possible keys:
|
||||||
|
# - Letters. a, b, c, ..., z
|
||||||
|
# - Numbers. 0, 1, 2, ..., 9
|
||||||
|
# - Keypad numbers. keypad0, keypad1, keypad2, ..., keypad9
|
||||||
|
# - F-keys. f1, f2, ..., f20
|
||||||
|
# - Special keys. minus, equal, period, comma, slash, backslash, quote, semicolon,
|
||||||
|
# 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,
|
||||||
|
# keypadMinus, keypadMultiply, keypadPlus
|
||||||
|
# - Arrows. left, down, up, right
|
||||||
|
|
||||||
|
# All possible modifiers: cmd, alt, ctrl, shift
|
||||||
|
|
||||||
|
# All possible commands: https://nikitabobko.github.io/AeroSpace/commands
|
||||||
|
|
||||||
|
# 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)
|
||||||
|
alt-enter = '''exec-and-forget osascript -e '
|
||||||
|
tell application "kitty"
|
||||||
|
do script
|
||||||
|
activate
|
||||||
|
end tell'
|
||||||
|
'''
|
||||||
|
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/commands#layout
|
||||||
|
alt-slash = 'layout tiles horizontal vertical'
|
||||||
|
alt-comma = 'layout accordion horizontal vertical'
|
||||||
|
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/commands#focus
|
||||||
|
alt-h = 'focus left'
|
||||||
|
alt-j = 'focus down'
|
||||||
|
alt-k = 'focus up'
|
||||||
|
alt-l = 'focus right'
|
||||||
|
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/commands#move
|
||||||
|
alt-shift-h = 'move left'
|
||||||
|
alt-shift-j = 'move down'
|
||||||
|
alt-shift-k = 'move up'
|
||||||
|
alt-shift-l = 'move right'
|
||||||
|
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/commands#resize
|
||||||
|
alt-shift-minus = 'resize smart -50'
|
||||||
|
alt-shift-equal = 'resize smart +50'
|
||||||
|
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/commands#workspace
|
||||||
|
alt-1 = 'workspace 1Kitty'
|
||||||
|
alt-2 = 'workspace 2Alacritty'
|
||||||
|
alt-3 = 'workspace 3Work'
|
||||||
|
alt-4 = 'workspace 4Firefox'
|
||||||
|
alt-5 = 'workspace 5Chrome'
|
||||||
|
alt-6 = 'workspace 6Chat'
|
||||||
|
alt-7 = 'workspace 7Music'
|
||||||
|
alt-8 = 'workspace 8Mail'
|
||||||
|
alt-9 = 'workspace 9File'
|
||||||
|
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
|
||||||
|
alt-shift-1 = 'move-node-to-workspace 1Kitty'
|
||||||
|
alt-shift-2 = 'move-node-to-workspace 2Alacritty'
|
||||||
|
alt-shift-3 = 'move-node-to-workspace 3Work'
|
||||||
|
alt-shift-4 = 'move-node-to-workspace 4Firefox'
|
||||||
|
alt-shift-5 = 'move-node-to-workspace 5Chrome'
|
||||||
|
alt-shift-6 = 'move-node-to-workspace 6Chat'
|
||||||
|
alt-shift-7 = 'move-node-to-workspace 7Music'
|
||||||
|
alt-shift-8 = 'move-node-to-workspace 8Mail'
|
||||||
|
alt-shift-9 = 'move-node-to-workspace 9File'
|
||||||
|
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
|
||||||
|
alt-tab = 'workspace-back-and-forth'
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/commands#move-workspace-to-monitor
|
||||||
|
alt-shift-tab = 'move-workspace-to-monitor --wrap-around next'
|
||||||
|
|
||||||
|
# See: https://nikitabobko.github.io/AeroSpace/commands#mode
|
||||||
|
alt-shift-semicolon = 'mode service'
|
||||||
|
|
||||||
|
# 'service' binding mode declaration.
|
||||||
|
# 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']
|
||||||
|
|
||||||
|
# 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']
|
||||||
|
|
||||||
|
|
||||||
|
# Declare 'resize' binding mode
|
||||||
|
[mode.resize.binding]
|
||||||
|
h = 'resize width -50'
|
||||||
|
j = 'resize height +50'
|
||||||
|
k = 'resize height -50'
|
||||||
|
l = 'resize width +50'
|
||||||
|
enter = 'mode main'
|
||||||
|
esc = 'mode main'
|
||||||
|
|
||||||
|
[exec]
|
||||||
|
inherit-env-vars = true
|
||||||
|
[exec.env-vars]
|
||||||
|
PATH = '/opt/homebrew/bin:/opt/homebrew/sbin:${PATH}'
|
||||||
|
|
||||||
|
# =================================================================
|
||||||
|
#
|
||||||
|
# Assign apps on particular workspaces
|
||||||
|
#
|
||||||
|
# Use this command to get IDs of running applications:
|
||||||
|
# aerospace list-apps
|
||||||
|
#
|
||||||
|
# =================================================================
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'net.kovidgoyal.kitty'
|
||||||
|
run = 'move-node-to-workspace 1Kitty'
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'org.alacritty'
|
||||||
|
run = 'move-node-to-workspace 2Alacritty'
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.tencent.WeWorkMac'
|
||||||
|
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]]
|
||||||
|
if.app-id = 'org.mozilla.firefox'
|
||||||
|
run = 'move-node-to-workspace 4Firefox'
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.google.Chrome'
|
||||||
|
run = 'move-node-to-workspace 5Chrome'
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'ru.keepcoder.Telegram'
|
||||||
|
run = 'move-node-to-workspace 6Chat'
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.tencent.xinWeChat'
|
||||||
|
run = 'move-node-to-workspace 6Chat'
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.tencent.qq'
|
||||||
|
run = 'move-node-to-workspace 6Chat'
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.tencent.QQMusicMac'
|
||||||
|
run = 'move-node-to-workspace 7Music'
|
||||||
|
|
||||||
|
[[on-window-detected]]
|
||||||
|
if.app-id = 'com.netease.163music'
|
||||||
|
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
|
||||||
|
[[on-window-detected]]
|
||||||
|
check-further-callbacks = true
|
||||||
|
run = ['layout floating']
|
||||||
|
|
||||||
|
# =================================================================
|
||||||
|
# Multiple monitor configuration
|
||||||
|
# =================================================================
|
||||||
|
|
||||||
|
[workspace-to-monitor-force-assignment]
|
||||||
|
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)
|
||||||
|
3Work = ['built-in']
|
||||||
|
4Firefox = ['main']
|
||||||
|
5Chrome = ['main']
|
||||||
|
6Chat = ['built-in']
|
||||||
|
7Music = ['built-in']
|
||||||
|
8Mail = ['main']
|
||||||
|
9File = ['main']
|
||||||
|
0Other = ['main']
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
{config, ...}: {
|
||||||
|
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";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
let
|
{lib, ...}: let
|
||||||
envExtra = ''
|
envExtra = ''
|
||||||
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 = 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
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
3. `base`: all common configurations for all desktops.
|
3. `base`: all common configurations for all desktops.
|
||||||
4. `hyprland`: Hyprland's configuration.
|
4. `hyprland`: Hyprland's configuration.
|
||||||
5. `i3`: i3's configuration.
|
|
||||||
|
|
||||||
## Why install I3/Hyprland in Home Manager instead of a NixOS Module?
|
## Why install I3/Hyprland in Home Manager instead of a NixOS Module?
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -15,15 +17,19 @@
|
|||||||
# reaper # audio production
|
# reaper # audio production
|
||||||
# sonic-pi # music programming
|
# sonic-pi # music programming
|
||||||
|
|
||||||
|
# 2d game design
|
||||||
|
ldtk # A modern, versatile 2D level editor
|
||||||
|
# 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 = {
|
||||||
@@ -35,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
|
||||||
@@ -53,7 +59,7 @@
|
|||||||
obs-command-source
|
obs-command-source
|
||||||
obs-move-transition
|
obs-move-transition
|
||||||
obs-backgroundremoval
|
obs-backgroundremoval
|
||||||
advanced-scene-switcher
|
# advanced-scene-switcher
|
||||||
obs-pipewire-audio-capture
|
obs-pipewire-audio-capture
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
...
|
...
|
||||||
}: {
|
}: {
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
# nix-gaming.packages.${pkgs.system}.osu-lazer-bin
|
# nix-gaming.packages.${pkgs.system}.osu-laser-bin
|
||||||
gamescope # SteamOS session compositing window manager
|
gamescope # SteamOS session compositing window manager
|
||||||
prismlauncher # A free, open source launcher for Minecraft
|
prismlauncher # A free, open source launcher for Minecraft
|
||||||
winetricks # A script to install DLLs needed to work around problems in Wine
|
winetricks # A script to install DLLs needed to work around problems in Wine
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
|
|
||||||
theme = {
|
theme = {
|
||||||
# https://github.com/catppuccin/gtk
|
# https://github.com/catppuccin/gtk
|
||||||
name = "Catppuccin-Macchiato-Compact-Pink-Dark";
|
name = "catppuccin-macchiato-pink-compact";
|
||||||
package = pkgs.catppuccin-gtk.override {
|
package = pkgs.catppuccin-gtk.override {
|
||||||
# https://github.com/NixOS/nixpkgs/blob/nixos-23.05/pkgs/data/themes/catppuccin-gtk/default.nix
|
# https://github.com/NixOS/nixpkgs/blob/nixos-23.05/pkgs/data/themes/catppuccin-gtk/default.nix
|
||||||
accents = ["pink"];
|
accents = ["pink"];
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -11,16 +11,19 @@
|
|||||||
|
|
||||||
# instant messaging
|
# instant messaging
|
||||||
telegram-desktop
|
telegram-desktop
|
||||||
discord
|
# discord # update too frequently, use the web version instead
|
||||||
pkgs-unstable.qq # https://github.com/NixOS/nixpkgs/tree/master/pkgs/applications/networking/instant-messengers/qq
|
|
||||||
|
|
||||||
# remote desktop(rdp connect)
|
# remote desktop(rdp connect)
|
||||||
remmina
|
remmina
|
||||||
freerdp # required by remmina
|
freerdp # required by remmina
|
||||||
|
|
||||||
# misc
|
# my custom hardened packages
|
||||||
flameshot
|
pkgs.nixpaks.qq
|
||||||
ventoy # multi-boot usb creator
|
pkgs.nixpaks.qq-desktop-item
|
||||||
|
|
||||||
|
wechat-uos
|
||||||
|
# pkgs.nixpaks.wechat-uos
|
||||||
|
# pkgs.nixpaks.wechat-uos-desktop-item
|
||||||
];
|
];
|
||||||
|
|
||||||
# GitHub CLI tool
|
# GitHub CLI tool
|
||||||
|
|||||||
@@ -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,10 +61,11 @@
|
|||||||
# 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;
|
||||||
|
|
||||||
"x-scheme-handler/discord" = ["discord.desktop"];
|
|
||||||
"x-scheme-handler/tg" = ["org.telegram.desktop.desktop "];
|
"x-scheme-handler/tg" = ["org.telegram.desktop.desktop "];
|
||||||
|
|
||||||
"audio/*" = ["mpv.desktop"];
|
"audio/*" = ["mpv.desktop"];
|
||||||
@@ -74,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,5 @@
|
|||||||
|
{pkgs, ...}: {
|
||||||
|
home.packages = with pkgs; [
|
||||||
|
zed-editor
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
# Hyprland
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
show hyprland's log:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
hyprctl rollinglog
|
||||||
|
```
|
||||||
@@ -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,198 +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 {
|
|
||||||
sensitivity=2.0
|
|
||||||
apply_sens_to_raw=0
|
|
||||||
|
|
||||||
gaps_in=5
|
|
||||||
gaps_out=10
|
|
||||||
|
|
||||||
border_size=4
|
|
||||||
col.active_border=0xFFB4A1DB
|
|
||||||
col.inactive_border=0xFF343A40
|
|
||||||
}
|
|
||||||
|
|
||||||
#-- Decoration ----------------------------------------------------
|
|
||||||
# Decoration settings like Rounded Corners, Opacity, Blur, etc.
|
|
||||||
decoration {
|
|
||||||
rounding=8 # Original: rounding=-1
|
|
||||||
|
|
||||||
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 = kitty
|
|
||||||
$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 %%
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user