Compare commits

..

175 Commits

Author SHA1 Message Date
Ryan Yin cf9d5acd95 feat: add components into README 2023-07-27 13:04:20 +08:00
Ryan Yin 98fed47741 fix: minor changes in README 2023-07-27 12:01:49 +08:00
Ryan Yin ed57391eb0 feat: update mimeApps 2023-07-27 03:52:18 +08:00
Ryan Yin fc4a44c023 feat: hyprland - add screenshots 2023-07-27 03:45:04 +08:00
Ryan Yin c158f17c63 feat: switch wallpaper 2023-07-27 03:00:45 +08:00
Ryan Yin e61bd9ae14 feat: aqua/kana/ruby - switch to nixos-stable(23.05) 2023-07-27 02:56:58 +08:00
Ryan Yin 4f6b899643 docs: comments 2023-07-27 02:39:38 +08:00
Ryan Yin 5d2cf3e5dd refactor: flake.nix - adjust nixosConfigurations 2023-07-27 02:33:39 +08:00
Ryan Yin befddfe476 refactor: do not hardcode username/email in sub modules 2023-07-27 02:28:29 +08:00
Ryan Yin 204cb03922 feat: simplify flake.nix 2023-07-27 02:22:08 +08:00
Ryan Yin eebbb9f5e6 feat: update README 2023-07-26 01:59:38 +08:00
Ryan Yin ad76bb3451 feat: update wallpapers 2023-07-26 01:20:39 +08:00
Ryan Yin 0564357a9c feat: add wallpapers 2023-07-26 01:16:13 +08:00
Ryan Yin b44672d16c feat: add screenshot for hyprland 2023-07-26 00:54:44 +08:00
Ryan Yin 1164bebee4 feat: update README 2023-07-26 00:47:36 +08:00
Ryan Yin 29129215a5 fix: waybar, mpd 2023-07-26 00:29:39 +08:00
Ryan Yin bc08dc1949 feat: ai with both i3 & hyprland
replace archcraft's icon by snowflake(nixos)
feat: update waybar's settings
2023-07-25 23:36:25 +08:00
Ryan Yin 6e825eef7f feat: add private key to ssh-agent when using ssh 2023-07-25 13:09:50 +08:00
Ryan Yin 6ae4d4ba80 fix: platformio - failed to upload firmware 2023-07-24 23:32:56 +08:00
Ryan Yin c34911ba26 fix: skip load alias_for_work if it does not exist 2023-07-24 23:12:54 +08:00
Ryan Yin 82819ff091 feat: do not hide any files - neotree 2023-07-24 18:13:08 +08:00
Ryan Yin 12ef055135 feat: search and replace across multiple files in neovim 2023-07-24 00:35:19 +08:00
Ryan Yin 5beb15c165 feat: comments of astronvim 2023-07-24 00:17:01 +08:00
Ryan Yin cf6584ea71 feat: add devbox from nixpkgs-unstable 2023-07-21 12:15:46 +08:00
Ryan Yin 3bbe86cb55 feat: add LINCENSE - MIT 2023-07-20 20:07:08 +08:00
Ryan Yin 18c6e79d0c feat: update README 2023-07-20 20:00:12 +08:00
Ryan Yin 6fbefd0a67 feat: comments for darwin's secrets 2023-07-19 19:32:57 +08:00
Ryan Yin d502490bf6 fix: secrets 2023-07-19 19:31:57 +08:00
Ryan Yin 3f6b5b321a update flake.lock, add comments for tailscale on macOS 2023-07-18 19:43:45 +08:00
Ryan Yin 2d06846467 fix: comments for kitty 2023-07-18 14:37:35 +08:00
Ryan Yin baac168826 feat: comments for kitty/alacritty, bump astronvim to v3.33.3 2023-07-18 14:34:19 +08:00
Ryan Yin 78e5053ae5 fix: correct error info related to secrets 2023-07-18 00:17:24 +08:00
Ryan Yin 25ac706450 feat: bump AstroNvim to v3.33.2 2023-07-17 23:27:48 +08:00
Ryan Yin edff2bdc6c fix: DNS for WireGuard on macOS 2023-07-17 18:09:51 +08:00
Ryan Yin 337f67109e fix: DNS for WireGuard on macOS 2023-07-17 17:31:59 +08:00
Ryan Yin 450389400a feat: zsh on macOS 2023-07-17 17:02:45 +08:00
Ryan Yin f52d604d42 fix: disable neovim's smartidentent 2023-07-17 16:48:59 +08:00
Ryan Yin d12e3b979a fix: do not auto start tmux on boot 2023-07-17 16:24:06 +08:00
Ryan Yin 7b482f8cfa feat: macOS - adjust terminal's font size, starship for zsh, squirrel input method 2023-07-17 16:20:07 +08:00
Ryan Yin de1bc12b1b feat: flypy - add custom symbols Δ 2023-07-17 15:15:37 +08:00
Ryan Yin a6fb453c9e feat: input method for macOS - squirrel 2023-07-17 14:17:56 +08:00
Ryan Yin 32429619ab feat: rime-data for both linux & macOS 2023-07-17 13:25:17 +08:00
Ryan Yin cc6e5ea071 feat: start kitty as fullscreen on macOS 2023-07-17 11:38:38 +08:00
Ryan Yin ba29d32d80 fix: i3 - do not assign all kitty terminal to window 1 2023-07-17 11:32:42 +08:00
Ryan Yin 0f08976902 fix: macOS 2023-07-17 11:31:25 +08:00
Ryan Yin b3ac7784ca feat: enable copilot for markdown & yaml, try to fix nix comment identation 2023-07-16 19:37:18 +08:00
Ryan Yin b271e43df4 fix: kitty settings on linux 2023-07-16 17:03:18 +08:00
Ryan Yin 3dff682ceb fix: identation 2023-07-16 17:01:01 +08:00
Ryan Yin 8d05c3a204 feat: change default terminal from alacritty to kitty 2023-07-16 16:53:36 +08:00
Ryan Yin 887825d254 feat: use different font size on macOS 2023-07-16 16:48:48 +08:00
Ryan Yin 8061e07a00 feat: default to nushell - zellij 2023-07-16 16:46:45 +08:00
Ryan Yin fa1cf24af5 fix: typo 2023-07-16 16:45:31 +08:00
Ryan Yin 1ab318b6db fix: kitty + nushell on macOS 2023-07-16 16:35:33 +08:00
Ryan Yin 59493d03fa feat: exa -> ls 2023-07-16 16:13:47 +08:00
Ryan Yin c06504032c feat: bat with theme - catppuccino 2023-07-16 16:08:55 +08:00
Ryan Yin cf80c7549e refactor: alacritty's config 2023-07-16 15:59:11 +08:00
Ryan Yin e6b7e24a36 feat: add terminal - kitty 2023-07-16 15:31:26 +08:00
Ryan Yin 1b5a415d7a fix: missing base packages - linux 2023-07-16 00:38:11 +08:00
Ryan Yin 95d9cd0a27 fix: macOS 2023-07-15 19:49:39 +08:00
Ryan Yin cca05de49b feat: static hostname - macOS 2023-07-15 19:45:10 +08:00
Ryan Yin fa9f23751c docs: remap capslock key 2023-07-15 19:12:48 +08:00
Ryan Yin cf33721ec1 feat: refactor codes
feat: custom rime - disable full_shape punctuations
feat: remap capslock key
2023-07-15 19:10:04 +08:00
Ryan Yin 52c72bd45d fix: lock agenix's commit 2023-07-15 16:38:07 +08:00
Ryan Yin c6e736d64b feat: install some apps from apple store instead of homebrew
feat: replace username with ryan
fix: secrets
2023-07-15 16:33:22 +08:00
Ryan Yin c90d1c0208 fix: migrate secrets from /run/agenix(deleted after reboot) to /etc/agenix 2023-07-15 12:31:18 +08:00
Ryan Yin 5ed0ece058 fix: secrets for work 2023-07-14 23:12:47 +08:00
Ryan Yin 8684376b98 feat: astronvim - nushell hightlight(wip) 2023-07-14 19:04:31 +08:00
Ryan Yin 03cee6582f docs: secrets 2023-07-14 18:24:11 +08:00
Ryan Yin 86291af053 docs: secrets 2023-07-14 18:13:46 +08:00
Ryan Yin 54bb672d9e feat: harden my private secrets 2023-07-14 17:59:15 +08:00
Ryan Yin f34bf79884 docs: comments - astronvim 2023-07-14 16:14:20 +08:00
Ryan Yin db9ebd5ffd fix: comment - astronvim 2023-07-14 16:04:20 +08:00
Ryan Yin 64e384c18a docs: comment - astronvim 2023-07-14 15:59:22 +08:00
Ryan Yin 1e325739b1 docs: comment for raycast 2023-07-14 15:26:26 +08:00
Ryan Yin 2bf5d295d4 feat: add comment - astronvim on macOS 2023-07-14 15:21:25 +08:00
Ryan Yin 040d8a210c feat: customize keyrepeat & other preferences - macOS 2023-07-14 15:07:40 +08:00
Ryan Yin df63bce926 feat: set args about key repeat - macOS 2023-07-14 13:19:04 +08:00
Ryan Yin b5707d8457 feat: disabled guest login - macOS 2023-07-14 13:13:40 +08:00
Ryan Yin cd4ed3679c docs: comments 2023-07-14 12:56:38 +08:00
Ryan Yin 55b6aadf00 feat: remove visual-studio-code-insider, it's replaced by copilot-lua-cmp.nvim now 2023-07-14 12:52:43 +08:00
Ryan Yin 849ecfd6b7 fix: customize macOS, fix alacritty 2023-07-14 12:50:55 +08:00
Ryan Yin ca60e962f0 feat: alacritty 2023-07-14 10:03:28 +08:00
Ryan Yin 7bf52e7a75 fix: typo 2023-07-14 02:10:16 +08:00
Ryan Yin 872caa0407 feat: astronvim - comments 2023-07-14 02:08:47 +08:00
Ryan Yin 580a08841f feat: add zellij - a modern tmux 2023-07-14 01:58:43 +08:00
Ryan Yin ff6442e588 feat: astronvim - markdown preview - glow 2023-07-14 01:27:21 +08:00
Ryan Yin 271846703f fix: astronvim - formatting & diagnostic & code actions 2023-07-14 01:17:44 +08:00
Ryan Yin 298affd460 fix: astronvim - formatting 2023-07-14 00:15:59 +08:00
Ryan Yin d718c8084a fix: astronvim - lsp 2023-07-14 00:02:20 +08:00
Ryan Yin 39d35091d6 fix: astronvim - lsp 2023-07-13 23:36:22 +08:00
Ryan Yin cf9b184c9f fix: astronvim - install lsp via home-manager instead of mason.nvim 2023-07-13 23:28:32 +08:00
Ryan Yin 4abe5d7b8d feat: astronvim - autosave 2023-07-13 12:28:28 +08:00
Ryan Yin 54ebad9151 fix: astronvim - install lsp, fomatters and others via home-manager instead of mason.nvim 2023-07-13 12:28:23 +08:00
Ryan Yin 3234d0db2e feat: astronvim - update TODO 2023-07-13 11:18:47 +08:00
Ryan Yin c9b5a1d39b feat: update TODO 2023-07-13 01:59:04 +08:00
Ryan Yin fc8d43982b feat: add node2nix 2023-07-13 01:42:20 +08:00
Ryan Yin c4a47b9e53 feat: astronvim - Temporary solution 2023-07-13 01:23:37 +08:00
Ryan Yin 34182f3e45 feat: astronvim - add TODO 2023-07-13 01:05:33 +08:00
Ryan Yin 87de22fec4 fix: astronvim - missing markdown lsp 2023-07-13 00:51:11 +08:00
Ryan Yin 787010ac34 feat: update README 2023-07-13 00:47:01 +08:00
Ryan Yin 874a1ab939 fix: astronvim - fix copilot's completion by <tab>, add comments 2023-07-13 00:26:48 +08:00
Ryan Yin 95df12c59e fix: astronvim - dependencies for languages support 2023-07-12 23:12:59 +08:00
Ryan Yin 25c0938a64 feat: astronvim - languages 2023-07-12 13:24:33 +08:00
Ryan Yin 5731b52d3c feat: astronvim comments 2023-07-12 12:17:40 +08:00
Ryan Yin c7d88c1f57 fix: astronvim with noice.nvim 2023-07-12 12:12:47 +08:00
Ryan Yin 678016e391 feat: neovim - add noice.nvim - enhanced ui 2023-07-12 11:37:01 +08:00
Ryan Yin e14d6f8405 feat: migrate to astronvim 2023-07-12 11:10:59 +08:00
Ryan Yin 588cbabbc2 fix: neovim 2023-07-11 02:49:15 +08:00
Ryan Yin 7cc49c29f1 fix: neovim 2023-07-11 02:22:00 +08:00
Ryan Yin 21b3d4ad37 feat: neovim 2023-07-10 19:11:49 +08:00
Ryan Yin b6629a38a1 feat: remove alias for http_proxy & https_proxy 2023-07-10 00:24:43 +08:00
Ryan Yin a88afaaab3 feat: adjsut brightness(x11) 2023-07-09 22:09:27 +08:00
Ryan Yin 2acda6e977 feat: install ipython for root 2023-07-09 22:01:09 +08:00
Ryan Yin d1dd9bfdd6 fix: typo 2023-07-09 17:31:04 +08:00
Ryan Yin 027d819860 fix: typo 2023-07-09 17:30:37 +08:00
Ryan Yin 7e02cc8566 feat: update readme, comments & flake.lock 2023-07-09 17:26:33 +08:00
Ryan Yin bacc1bf9cd fix: nushell's PATH on darwin 2023-07-06 17:18:00 +08:00
Ryan Yin 6e7815ce22 fix: nushell's PATH on darwin 2023-07-06 17:13:17 +08:00
Ryan Yin 0193f84847 fix: nushell's PATH on darwin 2023-07-06 17:11:08 +08:00
Ryan Yin bb2c967981 feat: add darwin packages using homebrew 2023-07-06 16:45:59 +08:00
Ryan Yin 8d24a094bf chore: update README 2023-07-06 09:47:23 +08:00
Ryan Yin cb0dc30c7e feat: add tailscale for macOS 2023-07-05 18:40:59 +08:00
Ryan Yin 190d409992 feat: update for macOS 2023-07-05 18:35:05 +08:00
Ryan Yin acd7f8308c feat: add apps(using homebrew), update shells 2023-07-05 18:03:12 +08:00
Ryan Yin 4af3fa88dd feat: install apps using homebrew instead of nix 2023-07-05 16:38:04 +08:00
Ryan Yin e90d2eca1e chore: update flake.lock 2023-07-04 21:19:07 +08:00
Ryan Yin 462f671a76 feat: disable remote building for now 2023-07-02 21:17:38 +08:00
Ryan Yin 5d2371dda4 docs: add comment 2023-07-01 22:50:48 +08:00
Ryan Yin 379032a40b feat: enable libvirt(qemu/kvm), install qemu_full(qemu-system-riscv64/qemu-system-loongarch64/...) 2023-07-01 22:47:39 +08:00
Ryan Yin 65b5146dcb feat: enable libvirt(qemu/kvm), install qemu_full(qemu-system-riscv64/qemu-system-loongarch64/...) 2023-07-01 22:46:54 +08:00
Ryan Yin 4c53b59e89 feat: enable libvirt(qemu/kvm) for ai 2023-07-01 22:28:31 +08:00
Ryan Yin 9bd5cac675 feat: update flake.lock 2023-07-01 10:56:35 +08:00
Ryan Yin 2e65d0aa03 fix: install awscli2 instead of awscli 2023-06-30 14:52:36 +08:00
Ryan Yin afc74dcf68 feat: update README.md 2023-06-28 14:54:09 +08:00
Ryan Yin e7e3d0040a feat: update README 2023-06-25 12:52:37 +08:00
Ryan Yin 14c174890e docs: README 2023-06-23 02:32:44 +08:00
Ryan Yin dd472488b6 fix: fallback from unstable to stable caused NixOS failed to boot(precondition: the system image is created with unstable nixpkgs) 2023-06-21 01:09:46 +08:00
Ryan Yin ec4d00509e feat: update idols separately - update Makefile 2023-06-21 00:54:06 +08:00
Ryan Yin aa0c789b6e feat: replace sudo by '--use-remote-sudo', so we will change to sudo only when we need. 2023-06-21 00:49:57 +08:00
Ryan Yin 016115faa5 fix: problem in proxmox-hardware-configuration, update ruby & kana's publicKey 2023-06-21 00:37:09 +08:00
Ryan Yin f6ade7c612 fix: problem in proxmox-hardware-configuration 2023-06-21 00:30:58 +08:00
Ryan Yin 0bfd154437 docs: remove some TODOs 2023-06-18 22:13:23 +08:00
Ryan Yin 9a752121ba feat: adjust idols's max-jobs 2023-06-18 13:39:47 +08:00
Ryan Yin 3ea707245b feat: adjust remote builder's max-jobs 2023-06-18 03:07:07 +08:00
Ryan Yin e31ae3f553 feat: update i3 layout's readme & comments 2023-06-18 02:02:04 +08:00
Ryan Yin c38db38207 fix: remove useless i3block configs 2023-06-18 01:22:00 +08:00
Ryan Yin 6b364e19de fix: autostart in i3 2023-06-18 01:21:12 +08:00
Ryan Yin dae0504f5c feat: save i3 layout and auto load it 2023-06-18 01:09:52 +08:00
Ryan Yin d53ed4ef7e feat: add comments 2023-06-17 22:57:30 +08:00
Ryan Yin 530f8498a1 feat: add comments 2023-06-17 22:53:09 +08:00
Ryan Yin ef3c903582 feat: using nixos's stable branch by default, update Makefile 2023-06-17 22:45:51 +08:00
Ryan Yin 8314b91324 feat: using nixos's stable branch by default to stablize the system 2023-06-17 22:32:19 +08:00
Ryan Yin ccd4752d04 feat: add posters of [推しの子] 2023-06-17 22:10:53 +08:00
Ryan Yin 1bfeeacf2f feat: use 'chatter +i' to make a file immutable on linux 2023-06-17 22:00:32 +08:00
Ryan Yin bfac95b71e feat: idols & nix's distributed building 2023-06-17 12:55:53 +08:00
Ryan Yin b91508af5f feat: harmonica 2023-06-17 12:29:38 +08:00
Ryan Yin e51486a796 feat: yep, it's Oshi no Ko 2023-06-17 12:27:29 +08:00
Ryan Yin 897af2712f feat: dstributed builds 2023-06-17 10:46:05 +08:00
Ryan Yin ed5b4d121c fix: dstributed builds 2023-06-17 10:24:48 +08:00
Ryan Yin 45a7973553 feat: add distributed-builds & many hosts
feat: remove nur & devenv
feat: adjust the structure to make it suitable for servers
feat: add iso/proxmox generators and add docs about it
feat: update ryan's openssh keys & add hashedPassword
feat: add proxmox's nodes into ssh_config, with alias
2023-06-17 09:51:29 +08:00
Ryan Yin a5f0922ba7 feat: add support for riscv64-linux 2023-06-16 21:23:25 +08:00
Ryan Yin 792a7e7bfc feat: import all base configs in darwin
feat: change darwin's default shell to nushell
feat: update starship's config
2023-06-13 13:44:50 +08:00
Ryan Yin 8f512eb0bd feat: add some system tools - lspci/lsusb/hdparm/dmidecode/dig/nslookup 2023-06-13 03:03:47 +08:00
Ryan Yin 4936c0c46e feat: udpate README 2023-06-13 02:45:55 +08:00
Ryan Yin fe54e220e4 feat: update configs for tmux 2023-06-13 02:43:46 +08:00
Ryan Yin 0c5b01b5f0 feat: update git's config 2023-06-13 01:41:51 +08:00
Ryan Yin 0024dff048 fix: polish README 2023-06-13 01:11:01 +08:00
Ryan Yin 7c42d4d950 feat: update comments 2023-06-13 01:07:25 +08:00
Ryan Yin dc0fc97cb9 feat: add comments, format all nix files 2023-06-13 01:05:13 +08:00
Ryan Yin 86114a4db1 feat: polish, add comments 2023-06-13 00:56:40 +08:00
Ryan Yin 24ef3ed105 feat: rename 'common' to 'base' 2023-06-13 00:54:08 +08:00
Ryan Yin be437c3417 feat: change desktop's default shell to nushell 2023-06-13 00:54:08 +08:00
Ryan Yin e2e75407c9 feat: update README.md 2023-06-12 11:47:31 +08:00
Ryan Yin b99f77e0de feat: udpate README for command 'fhs' 2023-06-11 16:48:35 +08:00
Ryan Yin 909409ff29 feat: udpate README for command 'fhs' 2023-06-11 16:41:22 +08:00
145 changed files with 5468 additions and 4133 deletions
+1
View File
@@ -1,2 +1,3 @@
result result
result/ result/
.DS_Store
+21
View File
@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 Ryan Yin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
+94 -13
View File
@@ -1,8 +1,26 @@
deploy: #
sudo nixos-rebuild switch --flake . # NOTE: Makefile's target name should not be the same as one of the file or directory in the current directory,
# otherwise the target will not be executed!
#
debug:
sudo nixos-rebuild switch --flake . --show-trace --verbose ############################################################################
#
# Nix commands related to the local machine
#
############################################################################
i3:
nixos-rebuild switch --flake .#ai_i3 --use-remote-sudo
hypr:
nixos-rebuild switch --flake .#ai_hyprland --use-remote-sudo
i3-debug:
nixos-rebuild switch --flake .#ai_i3 --use-remote-sudo --show-trace --verbose
hypr-debug:
nixos-rebuild switch --flake .#ai_hyprland --use-remote-sudo --show-trace --verbose
update: update:
nix flake update nix flake update
@@ -14,24 +32,87 @@ gc:
# remove all generations older than 7 days # remove all generations older than 7 days
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 older than 14 days # garbage collect all unused nix store entries
sudo nix store gc --debug sudo nix store gc --debug
# adjust brightness(x11)
# usage: make bright b=0.9
bright:
xrandr --output DP-2 --brightness $(b)
############################################################################
#
# Darwin related commands, harmonica is my macbook pro's hostname
#
############################################################################
darwin-set-proxy: darwin-set-proxy:
sudo python3 scripts/darwin_set_proxy.py sudo python3 scripts/darwin_set_proxy.py
darwin: darwin-set-proxy ha: darwin-set-proxy
nix build .#darwinConfigurations.harmonica.system \ nix build .#darwinConfigurations.harmonica.system
--extra-experimental-features 'nix-command flakes'
./result/sw/bin/darwin-rebuild switch --flake . ./result/sw/bin/darwin-rebuild switch --flake .
darwin-debug: darwin-set-proxy ha-debug: darwin-set-proxy
nix build .#darwinConfigurations.harmonica.system \ nix build .#darwinConfigurations.harmonica.system --show-trace --verbose
--show-trace --verbose \ ./result/sw/bin/darwin-rebuild switch --flake .#harmonica --show-trace --verbose
--extra-experimental-features 'nix-command flakes'
./result/sw/bin/darwin-rebuild switch --flake . --show-trace --verbose
############################################################################
#
# Idols, Commands related to my remote distributed building cluster
#
############################################################################
add-idols-ssh-key:
ssh-add ~/.ssh/ai-idols
aqua: add-idols-ssh-key
nixos-rebuild --flake .#aquamarine --target-host aquamarine --build-host aquamarine switch --use-remote-sudo
aqua-debug: add-idols-ssh-key
nixos-rebuild --flake .#aquamarine --target-host aquamarine --build-host aquamarine switch --use-remote-sudo --show-trace --verbose
ruby: add-idols-ssh-key
nixos-rebuild --flake .#ruby --target-host ruby --build-host ruby switch --use-remote-sudo
ruby-debug: add-idols-ssh-key
nixos-rebuild --flake .#ruby --target-host ruby --build-host ruby switch --use-remote-sudo --show-trace --verbose
kana: add-idols-ssh-key
nixos-rebuild --flake .#kana --target-host kana --build-host kana switch --use-remote-sudo
kana-debug: add-idols-ssh-key
nixos-rebuild --flake .#kana --target-host kana --build-host kana switch --use-remote-sudo --show-trace --verbose
idols: aqua ruby kana
idols-debug: aqua-debug ruby-debug kana-debug
# only used once to setup the virtual machines
idols-image:
# take image for idols, and upload the image to proxmox nodes.
nom build .#aquamarine
scp result/vzdump-qemu-*.vma.zst root@gtr5:/var/lib/vz/dump
nom build .#ruby
scp result/vzdump-qemu-*.vma.zst root@s500plus:/var/lib/vz/dump
nom build .#kana
scp result/vzdump-qemu-*.vma.zst root@um560:/var/lib/vz/dump
############################################################################
#
# Misc, other useful commands
#
############################################################################
fmt:
# format the nix files in this repo
nix fmt
.PHONY: clean .PHONY: clean
clean: clean:
rm -rf result rm -rf result
+151 -36
View File
@@ -1,58 +1,102 @@
# Nix Configuration <h2 align="center">:snowflake: Ryan4Yin's Nix Config :snowflake:</h2>
<p align="center">
<img src="https://raw.githubusercontent.com/catppuccin/catppuccin/main/assets/palette/macchiato.png" width="400" />
</p>
<p align="center">
<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>
<a href="https://nixos.org/">
<img src="https://img.shields.io/badge/NixOS-23.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">
<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>
</p>
This repository is home to the nix code that builds my systems. This repository is home to the nix code that builds my systems.
## Screenshots
![](./_img/screenshot_2023-05-07-21-21.webp)
## TODO
- enable disk encryption to enhance data security
- make fcitx5-rime work in vscode/chrome/telegram on wayland
- auto unlock with `ssh-agent` after login
- [People using ssh-agent, how do you unlock it on login? - reddit](https://www.reddit.com/r/NixOS/comments/lsbo9a/people_using_sshagent_how_do_you_unlock_it_on/)
- update scripts for i3wm, especially rofi & screenshot
- fix `xdg-open`: after set `firefox.desktop` as defaultApplication, NixOS returned error `no apps installed that can open "https://baidu.com"`
- `Xcursor.size` do not take effect in i3
## Why Nix? ## Why Nix?
Nix allows for easy to manage, collaborative, reproducible deployments. This means that once something is setup and configured once, it works forever. If someone else shares their configuration, anyone can make use of it. Nix allows for easy-to-manage, collaborative, reproducible deployments. This means that once something is setup and configured once, it works forever. If someone else shares their configuration, anyone can make use of it.
**Want to know Nix in details? Looking for a beginner-friendly tutorial? Check out [NixOS & Nix Flakes - A Guide for Beginners](https://thiscute.world/en/posts/nixos-and-flake-basics/)!** **Want to know Nix in detail? Looking for a beginner-friendly tutorial or best practices? Check out [NixOS & Nix Flakes Book - 🛠️ ❤️ An unofficial & opinionated :book: for beginners](https://github.com/ryan4yin/nixos-and-flakes-book)!**
> If you're using macOS, you can also check out [ryan4yin/nix-darwin-kickstarter](https://github.com/ryan4yin/nix-darwin-kickstarter) for a quick start.
## Components
| | NixOS(Wayland) | NixOS(Xorg) |
| --------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
| **Window Manager** | [Hyprland][Hyprland] | [i3][i3] |
| **Terminal Emulator** | [Kitty][Kitty] | [Kitty][Kitty] |
| **Bar** | [Waybar][Waybar] | [i3block][i3block] |
| **Application Launcher** | [wofi][wofi] | [rofi][rofi] |
| **Notification Daemon** | [Mako][Mako] | [Dunst][Dunst] |
| **Display Manager** | [GDM][GDM] | [GDM][GDM] |
| **network management tool** | [NetworkManager][NetworkManager] | [NetworkManager][NetworkManager] |
| **Input method framework** | [Fcitx5][Fcitx5] | [Fcitx5][Fcitx5] |
| **System resource monitor** | [Btop][Btop] | [Btop][Btop] |
| **File Manager** | [thunar][thunar] | [thunar][thunar] |
| **Shell** | [Nushell][Nushell] | [Nushell][Nushell] |
| **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] | [mpv][mpv] |
| **Text Editor** | [Neovim][Neovim] | [Neovim][Neovim] |
| **Fonts** | [Nerd fonts][Nerd fonts] | [Nerd fonts][Nerd fonts] |
| **Image Viewer** | [imv][imv] | [feh][feh] |
| **Screenshot Software** | [grim][grim] | [flameshot](https://github.com/flameshot-org/flameshot) |
| **Screen Recording** | [OBS][OBS] | [OBS][OBS] |
## Hyprland + AstroNvim
![](./_img/hyprland_2023-07-26.webp)
![](./_img/hyprland_2023-07-27.webp)
## I3 + AstroNvim
![](/_img/astronvim_2023-07-13_00-39.webp)
## Hosts
```shell
tree hosts
hosts
├── harmonica # my MacBook Pro 2020 13-inch, for work.
└── idols
├── ai # my main computer, with NixOS + I5-13600KF + RTX 4090 GPU, for gaming & daily use.
├── aquamarine # my NixOS virtual machine with R9-5900HX(8C16T), for distributed building & testing.
├── kana # yet another NixOS vm on another physical machine with R5-5625U(6C12T).
└── ruby # another NixOS vm on another physical machine with R7-5825U(8C16T).
```
## How to Deploy this Flake? ## How to Deploy this Flake?
> Note: you should NOT deploy this flake directly on your machine, it contains my hardware information and personal information which is not suitable for you. You may use this repo as a reference to build your own configuration. > Note: you should NOT deploy this flake directly on your machine, it contains my hardware information and personal information which is not suitable for you. You may use this repo as a reference to build your own configuration.
After installed NixOS with `nix-command` & `flake` enabled, flow the steps below to deploy this flake. After installing NixOS with `nix-command` & `flake` enabled, follow the steps below to deploy this flake.
For NixOS, use the following commands: For NixOS, use the following commands:
```bash ```bash
# deploy my test configuration # deploy one of the configuration based on the hostname
sudo nixos-rebuild switch --flake .#nixos-test sudo nixos-rebuild switch --flake .#ai_i3
# we can also deploy using `make`, which is defined in Makefile
make i3
# deploy my PC's configuration # or we can deploy with details
sudo nixos-rebuild switch --flake .#msi-rtx4090 make i3-debug
# or just deploy with hostname
sudo nixos-rebuild switch
# we can also deploy using make, which is defined in Makefile
make deploy
``` ```
For MacOS, use the following commands: For MacOS, use the following commands:
```bash ```bash
# deploy the darwin configuration(harmonicia) # deploy the darwin configuration(harmonicia)
make darwin make ha
# deploy with details # deploy with details
make darwin-debug make ha-debug
``` ```
## Install Apps from Flatpak ## Install Apps from Flatpak
@@ -74,17 +118,88 @@ flatpak search <keyword>
# search on website is also supported: https://flathub.org/ # search on website is also supported: https://flathub.org/
``` ```
## Other Interesting Dotfiles ## How to create & managage VM from this flake?
Other configurations that inspired me: use `aquamarine` as an example, we can create a virtual machine with the following command:
- [notwidow/hyprland](https://github.com/notwidow/hyprland): hyprland configuration ```shell
- [denisse-dev/dotfiles](https://github.com/denisse-dev/dotfiles) # 1. generate a proxmox vma image file
nom build .#aquamarine # `nom`(nix-output-monitor) can be replaced by the standard command `nix`
# 2. upload the genereated image to proxmox server's backup directory `/var/lib/vz/dump`
# please replace the vma file name with the one you generated in step 1.
scp result/vzdump-qemu-aquamarine-nixos-23.11.20230603.dd49825.vma.zst root@192.168.5.174:/var/lib/vz/dump
# 3. the image we uploaded will be listed in proxmox web ui's this page: [storage 'local'] -> [backups], we can restore a vm from it via the web ui now.
```
Once the virtual machine `aquamarine` is created, we can deploy updates to it with the following commands:
```shell
# 1. add the ssh key to ssh-agent
ssh-add ~/.ssh/ai-idols
# 2. deploy the configuration to the remote host, using the ssh key we added in step 1
# and the username defaults to `$USER`, it's `ryan` in my case.
nixos-rebuild --flake .#aquamarine --target-host aquamarine --build-host aquamarine switch --use-remote-sudo --verbose
# or we can replace the command above with the following command, which is defined in Makefile
make aqua
```
The commands above will build & deploy the configuration to `aquamarine`, the build process will be executed on `aquamarine` too, and the `--use-remote-sudo` option indicates that we will use `sudo` on the remote host.
## References
Other dotfiles that inspired me:
- Nix Flakes
- [NixOS-CN/NixOS-CN-telegram](https://github.com/NixOS-CN/NixOS-CN-telegram)
- [notusknot/dotfiles-nix](https://github.com/notusknot/dotfiles-nix) - [notusknot/dotfiles-nix](https://github.com/notusknot/dotfiles-nix)
- [xddxdd/nixos-config](https://github.com/xddxdd/nixos-config) - [xddxdd/nixos-config](https://github.com/xddxdd/nixos-config)
- [bobbbay/dotfiles](https://github.com/bobbbay/dotfiles) - [bobbbay/dotfiles](https://github.com/bobbbay/dotfiles)
- [gytis-ivaskevicius/nixfiles](https://github.com/gytis-ivaskevicius/nixfiles) - [gytis-ivaskevicius/nixfiles](https://github.com/gytis-ivaskevicius/nixfiles)
- [fufexan/dotfiles](https://github.com/fufexan/dotfiles) - [fufexan/dotfiles](https://github.com/fufexan/dotfiles)
- [davidtwco/veritas](https://github.com/davidtwco/veritas) - [davidtwco/veritas](https://github.com/davidtwco/veritas)
- [NixOS-CN/NixOS-CN-telegram](https://github.com/NixOS-CN/NixOS-CN-telegram) - [gvolpe/nix-config](https://github.com/gvolpe/nix-config)
- [Tips&Tricks for NixOS Desktop](https://discourse.nixos.org/t/tips-tricks-for-nixos-desktop/28488/2) - [Ruixi-rebirth/flakes](https://github.com/Ruixi-rebirth/flakes)
- Hyprland
- [HeinzDev/Hyprland-dotfiles](https://github.com/HeinzDev/Hyprland-dotfiles)
- [notwidow/hyprland](https://github.com/notwidow/hyprland)
- I3 Window Manager
- [denisse-dev/dotfiles](https://github.com/denisse-dev/dotfiles)
- Neovim/AstroNvim
- [maxbrunet/dotfiles](https://github.com/maxbrunet/dotfiles): astronvim with nix flakes.
- Misc
- [1amSimp1e/dots](https://github.com/1amSimp1e/dots)
[Hyprland]: https://github.com/hyprwm/Hyprland
[i3]: https://github.com/i3/i3
[Kitty]: https://github.com/kovidgoyal/kitty
[Nushell]: https://github.com/nushell/nushell
[Waybar]: https://github.com/Alexays/Waybar
[i3block]: https://github.com/vivien/i3blocks
[rofi]: https://github.com/davatorium/rofi
[wofi]: https://hg.sr.ht/~scoopta/wofi
[Dunst]: https://github.com/dunst-project/dunst
[Fcitx5]: https://github.com/fcitx/fcitx5
[Btop]: https://github.com/aristocratos/btop
[mpv]: https://github.com/mpv-player/mpv
[Neovim]: https://github.com/neovim/neovim
[AstroNvim]: https://github.com/AstroNvim/AstroNvim
[flameshot]: https://github.com/flameshot-org/flameshot
[grim]: https://github.com/emersion/grim
[feh]: https://github.com/derf/feh
[imv]: https://sr.ht/~exec64/imv/
[OBS]: https://obsproject.com
[Mako]: https://github.com/emersion/mako
[Nerd fonts]: https://github.com/ryanoasis/nerd-fonts
[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
[wl-clipboard]: https://github.com/bugaevc/wl-clipboard
[GDM]: https://wiki.archlinux.org/title/GDM
[thunar]: https://gitlab.xfce.org/xfce/thunar
Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 265 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 243 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 232 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 841 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 336 KiB

Generated
+137 -382
View File
@@ -7,17 +7,34 @@
"nixpkgs": "nixpkgs" "nixpkgs": "nixpkgs"
}, },
"locked": { "locked": {
"lastModified": 1684153753, "lastModified": 1689334118,
"narHash": "sha256-PVbWt3qrjYAK+T5KplFcO+h7aZWfEj1UtyoKlvcDxh0=", "narHash": "sha256-djk5AZv1yU84xlKFaVHqFWvH73U7kIRstXwUAnDJPsk=",
"owner": "ryantm", "owner": "ryantm",
"repo": "agenix", "repo": "agenix",
"rev": "db5637d10f797bb251b94ef9040b237f4702cde3", "rev": "0d8c5325fc81daf00532e3e26c6752f7bcde1143",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "ryantm", "owner": "ryantm",
"repo": "agenix", "repo": "agenix",
"rev": "db5637d10f797bb251b94ef9040b237f4702cde3", "rev": "0d8c5325fc81daf00532e3e26c6752f7bcde1143",
"type": "github"
}
},
"astronvim": {
"flake": false,
"locked": {
"lastModified": 1689614566,
"narHash": "sha256-LG9eSOmX902EK3KEAkEwqGa4sBkxkK3qOHaWcykv6OA=",
"owner": "AstroNvim",
"repo": "AstroNvim",
"rev": "215b5605337f32d3e92ba7608e269fe90c1208f6",
"type": "github"
},
"original": {
"owner": "AstroNvim",
"ref": "v3.33.3",
"repo": "AstroNvim",
"type": "github" "type": "github"
} }
}, },
@@ -43,71 +60,13 @@
"type": "github" "type": "github"
} }
}, },
"darwin_2": {
"inputs": {
"nixpkgs": [
"nixpkgs-darwin"
]
},
"locked": {
"lastModified": 1685559570,
"narHash": "sha256-MNIQvLRoq92isMLR/ordKNCl+aXNiuwBM4QyqmS8d00=",
"owner": "lnl7",
"repo": "nix-darwin",
"rev": "4338bc869e9874d54a4c89539af72f16666b2abe",
"type": "github"
},
"original": {
"owner": "lnl7",
"repo": "nix-darwin",
"type": "github"
}
},
"devenv": {
"inputs": {
"flake-compat": "flake-compat",
"nix": "nix",
"nixpkgs": "nixpkgs_2",
"pre-commit-hooks": "pre-commit-hooks"
},
"locked": {
"lastModified": 1678113758,
"narHash": "sha256-mD3SkN43b1s5CJ8Rx3l2oK3Dqgs+6Ze0FfWrdMcrrYk=",
"owner": "cachix",
"repo": "devenv",
"rev": "6455f319fc90e0be2071327093c5458f9afc61bf",
"type": "github"
},
"original": {
"owner": "cachix",
"ref": "v0.6.2",
"repo": "devenv",
"type": "github"
}
},
"flake-compat": { "flake-compat": {
"flake": false,
"locked": { "locked": {
"lastModified": 1673956053, "lastModified": 1688025799,
"narHash": "sha256-4gtG9iQuiKITOjNQQeQIpoIB6b16fm+504Ch3sNKLd8=", "narHash": "sha256-ktpB4dRtnksm9F5WawoIkEneh1nrEvuxb5lJFt1iOyw=",
"owner": "edolstra",
"repo": "flake-compat",
"rev": "35bb57c0c8d8b62bbfd284272c928ceb64ddbde9",
"type": "github"
},
"original": {
"owner": "edolstra",
"repo": "flake-compat",
"type": "github"
}
},
"flake-compat_2": {
"locked": {
"lastModified": 1680531544,
"narHash": "sha256-8qbiDTYb1kGaDADRXTItpcMKQ1TeQVkuof6oEwHUvVA=",
"owner": "nix-community", "owner": "nix-community",
"repo": "flake-compat", "repo": "flake-compat",
"rev": "95e78dc12268c5e4878621845c511077f3798729", "rev": "8bf105319d44f6b9f0d764efa4fdef9f1cc9ba1c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -125,11 +84,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1680392223, "lastModified": 1688466019,
"narHash": "sha256-n3g7QFr85lDODKt250rkZj2IFS3i4/8HBU2yKHO3tqw=", "narHash": "sha256-VeM2akYrBYMsb4W/MmBo1zmaMfgbL4cH3Pu8PGyIwJ0=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "dcc36e45d054d7bb554c9cdab69093debd91a0b5", "rev": "8e8d955c22df93dbe24f19ea04f47a74adbdc5ec",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -139,30 +98,15 @@
} }
}, },
"flake-utils": { "flake-utils": {
"locked": {
"lastModified": 1667395993,
"narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"inputs": { "inputs": {
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1681202837, "lastModified": 1689068808,
"narHash": "sha256-H+Rh19JDwRtpVPAWp64F+rlEtxUWBAQW28eAi3SRSzg=", "narHash": "sha256-6ixXo3wt24N/melDWjq70UuHQLxGV8jZvooRanIHXw0=",
"owner": "numtide", "owner": "numtide",
"repo": "flake-utils", "repo": "flake-utils",
"rev": "cfacdce06f30d2b68473a46042957675eebb3401", "rev": "919d646de7be200f3bf08cb76ae1f09402b6f9b4",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -171,46 +115,6 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_3": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1685518550,
"narHash": "sha256-o2d0KcvaXzTrPRIo0kOLV0/QXHhDQ5DTi+OxcjO8xqY=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "a1720a10a6cfe8234c0e93907ffe81be440f4cef",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"gitignore": {
"inputs": {
"nixpkgs": [
"devenv",
"pre-commit-hooks",
"nixpkgs"
]
},
"locked": {
"lastModified": 1660459072,
"narHash": "sha256-8DFJjXG8zqoONA1vXtgeKXy68KdJL5UaXR8NtVMUbx8=",
"owner": "hercules-ci",
"repo": "gitignore.nix",
"rev": "a20de23b925fd8264fd7fad6454652e142fd7f73",
"type": "github"
},
"original": {
"owner": "hercules-ci",
"repo": "gitignore.nix",
"type": "github"
}
},
"home-manager": { "home-manager": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -239,11 +143,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1685599623, "lastModified": 1687871164,
"narHash": "sha256-Tob4CMOVHue0D3RzguDBCtUmX5ji2PsdbQDbIOIKvsc=", "narHash": "sha256-bBFlPthuYX322xOlpJvkjUBz0C+MOBjZdDOOJJ+G2jU=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "93db05480c0c0f30382d3e80779e8386dcb4f9dd", "rev": "07c347bb50994691d7b0095f45ebd8838cf6bc38",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -256,21 +160,21 @@
"hyprland": { "hyprland": {
"inputs": { "inputs": {
"hyprland-protocols": "hyprland-protocols", "hyprland-protocols": "hyprland-protocols",
"nixpkgs": "nixpkgs_3", "nixpkgs": "nixpkgs_2",
"wlroots": "wlroots", "wlroots": "wlroots",
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1683130508, "lastModified": 1689766295,
"narHash": "sha256-Npf48UUfywneFYGEc7NQ59xudwvw7EJjwweT4tHguIY=", "narHash": "sha256-2OuPIcw2WOUc/zjrH7JZHWe1byuMjqP6Zz7D4qsi10s=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "Hyprland", "repo": "Hyprland",
"rev": "f27873a6f06dc2f87600edb890f3c38298bfb55f", "rev": "b08b72358ad549fd066e5be0fc3aa4c9df367607",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "hyprwm", "owner": "hyprwm",
"ref": "v0.25.0", "ref": "v0.27.2",
"repo": "Hyprland", "repo": "Hyprland",
"type": "github" "type": "github"
} }
@@ -283,11 +187,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1681065697, "lastModified": 1684265364,
"narHash": "sha256-QPzwwlGKX95tl6ZEshboZbEwwAXww6lNLdVYd6T9Mrc=", "narHash": "sha256-AxNnWbthsuNx73HDQr0eBxrcE3+yfl/WsaXZqUFmkpQ=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprland-protocols", "repo": "hyprland-protocols",
"rev": "4d29e48433270a2af06b8bc711ca1fe5109746cd", "rev": "8c279b9fb0f2b031427dc5ef4eab53f2ed835530",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -298,15 +202,15 @@
}, },
"lib-aggregate": { "lib-aggregate": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_3", "flake-utils": "flake-utils",
"nixpkgs-lib": "nixpkgs-lib" "nixpkgs-lib": "nixpkgs-lib"
}, },
"locked": { "locked": {
"lastModified": 1685621386, "lastModified": 1690114105,
"narHash": "sha256-QxSbJ/deTW8r9DCveOr5N/TpiUqBAmGXsKdqmnVNW8s=", "narHash": "sha256-QOY9FXZ4pWjlDPdZKkLNNMHS+ct1+4wu8lrcua7+chw=",
"owner": "nix-community", "owner": "nix-community",
"repo": "lib-aggregate", "repo": "lib-aggregate",
"rev": "5b7f85fd4ee671b013f2c1935abf4cb5499ad3b5", "rev": "d923660039d7e793712ba93f633778046f5e6087",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -315,78 +219,55 @@
"type": "github" "type": "github"
} }
}, },
"lowdown-src": { "mysecrets": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1633514407, "lastModified": 1689587139,
"narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=", "narHash": "sha256-D3PDgAvBe6FKbrDIoBW/+wRgZc7RtqIVKcnQ6hwqEh8=",
"owner": "kristapsdz", "ref": "refs/heads/main",
"repo": "lowdown", "rev": "a136d8dacc58115edec9edaf6f201c5496e423e3",
"rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8", "shallow": true,
"type": "github" "type": "git",
"url": "ssh://git@github.com/ryan4yin/nix-secrets.git"
}, },
"original": { "original": {
"owner": "kristapsdz", "shallow": true,
"repo": "lowdown", "type": "git",
"type": "github" "url": "ssh://git@github.com/ryan4yin/nix-secrets.git"
} }
}, },
"nil": { "nix-darwin": {
"inputs": { "inputs": {
"flake-utils": "flake-utils_2",
"nixpkgs": "nixpkgs_4",
"rust-overlay": "rust-overlay"
},
"locked": {
"lastModified": 1683653883,
"narHash": "sha256-Xg3Cux5wQDatXRvQWsVD0YPfmxfijjG8+gxYqgoT6JE=",
"owner": "oxalica",
"repo": "nil",
"rev": "18de045d7788df2343aec58df7b85c10d1f5d5dd",
"type": "github"
},
"original": {
"owner": "oxalica",
"ref": "2023-05-09",
"repo": "nil",
"type": "github"
}
},
"nix": {
"inputs": {
"lowdown-src": "lowdown-src",
"nixpkgs": [ "nixpkgs": [
"devenv", "nixpkgs-darwin"
"nixpkgs" ]
],
"nixpkgs-regression": "nixpkgs-regression"
}, },
"locked": { "locked": {
"lastModified": 1676545802, "lastModified": 1690368313,
"narHash": "sha256-EK4rZ+Hd5hsvXnzSzk2ikhStJnD63odF7SzsQ8CuSPU=", "narHash": "sha256-1MG/pU2riawknpYaTfaynKJPaIKFnQiYTTCFJAjXM5Q=",
"owner": "domenkozar", "owner": "lnl7",
"repo": "nix", "repo": "nix-darwin",
"rev": "7c91803598ffbcfe4a55c44ac6d49b2cf07a527f", "rev": "94212ebe32948471a1aa11baa5c576ce60d54589",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "domenkozar", "owner": "lnl7",
"ref": "relaxed-flakes", "repo": "nix-darwin",
"repo": "nix",
"type": "github" "type": "github"
} }
}, },
"nix-eval-jobs": { "nix-eval-jobs": {
"inputs": { "inputs": {
"flake-parts": "flake-parts", "flake-parts": "flake-parts",
"nixpkgs": "nixpkgs_6" "nixpkgs": "nixpkgs_4",
"treefmt-nix": "treefmt-nix"
}, },
"locked": { "locked": {
"lastModified": 1685435187, "lastModified": 1689903701,
"narHash": "sha256-2tSrjl16iHdG6FYMNKS+MdsIDrCWXuKQ0XRWcdbMdFg=", "narHash": "sha256-kW1Rke5wLqw8XHVyiWw7qIKZR911GCsbOg5SkgKH1Uc=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nix-eval-jobs", "repo": "nix-eval-jobs",
"rev": "a0e0808280535bc22ffde7d34ecad11014edd6a9", "rev": "fcaf7773e3a6713b78dacfd442339a96cfab405f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -397,11 +278,11 @@
}, },
"nixlib": { "nixlib": {
"locked": { "locked": {
"lastModified": 1681001314, "lastModified": 1689469483,
"narHash": "sha256-5sDnCLdrKZqxLPK4KA8+f4A3YKO/u6ElpMILvX0g72c=", "narHash": "sha256-2SBhY7rZQ/iNCxe04Eqxlz9YK9KgbaTMBssq3/BgdWY=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixpkgs.lib", "repo": "nixpkgs.lib",
"rev": "367c0e1086a4eb4502b24d872cea2c7acdd557f4", "rev": "02fea408f27186f139153e1ae88f8ab2abd9c22c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -418,11 +299,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1685446848, "lastModified": 1690133435,
"narHash": "sha256-vEU1jynjDXwOJESHeJyABqbY/Y+DoihZq9iDVtYgrMg=", "narHash": "sha256-YNZiefETggroaTLsLJG2M+wpF0pJPwiauKG4q48ddNU=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixos-generators", "repo": "nixos-generators",
"rev": "b6114e214e5b546c4cceccd33ee6b72294a76b60", "rev": "b1171de4d362c022130c92d7c8adc4bf2b83d586",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -449,11 +330,11 @@
}, },
"nixpkgs-darwin": { "nixpkgs-darwin": {
"locked": { "locked": {
"lastModified": 1685865905, "lastModified": 1690298576,
"narHash": "sha256-XJZ/o17eOd2sEsGif+/MQBnfa2DKmndWgJyc7CWajFc=", "narHash": "sha256-RLgIGS04t4Rd0viqsx2e9dGViKB6nVsGmO11EagCWmM=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "e7603eba51f2c7820c0a182c6bbb351181caa8e7", "rev": "88f63d511092e95d28e9a7c98534595c53de1048",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -465,11 +346,11 @@
}, },
"nixpkgs-lib": { "nixpkgs-lib": {
"locked": { "locked": {
"lastModified": 1685561605, "lastModified": 1690073998,
"narHash": "sha256-LqEu1IWP8UWKxwwrpPtp1/p+JRCaUI0hl8e4hht5YdI=", "narHash": "sha256-qmK+VMvflwUzQSQl4XVP5kbodYLAKThNzq6mZrOM2Mo=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixpkgs.lib", "repo": "nixpkgs.lib",
"rev": "75aeea15ee4971c52c56bbbee84066e74d53d858", "rev": "d0545f65611a9625f161d0ff02627bc364e024f6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -478,67 +359,35 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs-regression": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1643052045, "lastModified": 1690179384,
"narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", "narHash": "sha256-+arbgqFTAtoeKtepW9wCnA0njCOyoiDFyl0Q0SBSOtE=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
"type": "github"
},
"original": {
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2",
"type": "github"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1673800717,
"narHash": "sha256-SFHraUqLSu5cC6IxTprex/nTsI81ZQAtDvlBvGDWfnA=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "2f9fd351ec37f5d479556cd48be4ca340da59b8f",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "nixos-22.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-stable_2": {
"locked": {
"lastModified": 1685801374,
"narHash": "sha256-otaSUoFEMM+LjBI1XL/xGB5ao6IwnZOXc47qhIgJe8U=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "c37ca420157f4abc31e26f436c1145f8951ff373", "rev": "b12803b6d90e2e583429bb79b859ca53c348b39a",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nixos", "owner": "nixos",
"ref": "nixos-23.05", "ref": "nixos-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nixpkgs-wayland": { "nixpkgs-wayland": {
"inputs": { "inputs": {
"flake-compat": "flake-compat_2", "flake-compat": "flake-compat",
"lib-aggregate": "lib-aggregate", "lib-aggregate": "lib-aggregate",
"nix-eval-jobs": "nix-eval-jobs", "nix-eval-jobs": "nix-eval-jobs",
"nixpkgs": "nixpkgs_7" "nixpkgs": "nixpkgs_5"
}, },
"locked": { "locked": {
"lastModified": 1685650687, "lastModified": 1690384532,
"narHash": "sha256-RhZ2Ih8t0Q0RFfBp3+/a65ncGwaeYsDVEFWbjdv5jOU=", "narHash": "sha256-Nc9d6GPajVdSj02aBDkAAq93fdLUtRXP9EIfwKn3Uq4=",
"owner": "nix-community", "owner": "nix-community",
"repo": "nixpkgs-wayland", "repo": "nixpkgs-wayland",
"rev": "217783e46fd199a033af8d488551c77b7019c752", "rev": "729cabdcc73e84963751dd65163048e9ff1a1a75",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -549,75 +398,43 @@
}, },
"nixpkgs_2": { "nixpkgs_2": {
"locked": { "locked": {
"lastModified": 1677534593, "lastModified": 1688500189,
"narHash": "sha256-PuZSAHeq4/9pP/uYH1FcagQ3nLm/DrDrvKi/xC9glvw=", "narHash": "sha256-djYYiY4lzJOlXOnTHytH6BUugrxHDZjuGxTSrU4gt4M=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "3ad64d9e2d5bf80c877286102355b1625891ae9a", "rev": "78419edadf0fabbe5618643bd850b2f2198ed060",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "NixOS",
"ref": "nixpkgs-unstable", "ref": "nixos-unstable",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nixpkgs_3": { "nixpkgs_3": {
"locked": { "locked": {
"lastModified": 1683014792, "lastModified": 1690271650,
"narHash": "sha256-6Va9iVtmmsw4raBc3QKvQT2KT/NGRWlvUlJj46zN8B8=", "narHash": "sha256-qwdsW8DBY1qH+9luliIH7VzgwvL+ZGI3LZWC0LTiDMI=",
"owner": "NixOS", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "1a411f23ba299db155a5b45d5e145b85a7aafc42", "rev": "6dc93f0daec55ee2f441da385aaf143863e3d671",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "NixOS", "owner": "nixos",
"ref": "nixos-unstable", "ref": "nixos-23.05",
"repo": "nixpkgs", "repo": "nixpkgs",
"type": "github" "type": "github"
} }
}, },
"nixpkgs_4": { "nixpkgs_4": {
"locked": { "locked": {
"lastModified": 1682929865, "lastModified": 1688951312,
"narHash": "sha256-jxVrgnf5QNjO+XoxDxUWtN2G5xyJSGZ5SWDQFxMuHxc=", "narHash": "sha256-0oG4uv60m5+oOMqgYYQ3ao3OK3YP3n3t7nWFtuyR/uQ=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "f2e9a130461950270f87630b11132323706b4d91",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixpkgs-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_5": {
"locked": {
"lastModified": 1685836261,
"narHash": "sha256-rpxEPGeW4JZJcH58SQApJUtJ7w78VPtkF6Cut/Pq6Kg=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "dd4982554e18b936790da07c4ea2db7c7600f283",
"type": "github"
},
"original": {
"owner": "nixos",
"ref": "nixos-unstable",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs_6": {
"locked": {
"lastModified": 1681347147,
"narHash": "sha256-B+hTioRc3Jdf4SJyeCiO0fW5ShIznJk2OTiW2vOV+mc=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "1a9d9175ecc48ecd033062fa09b1834d13ae9c69", "rev": "2a5f6cac357616d2596167d0631b4ca729e9a3ea",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -627,13 +444,13 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs_7": { "nixpkgs_5": {
"locked": { "locked": {
"lastModified": 1685383865, "lastModified": 1690179384,
"narHash": "sha256-3uQytfnotO6QJv3r04ajSXbEFMII0dUtw0uqYlZ4dbk=", "narHash": "sha256-+arbgqFTAtoeKtepW9wCnA0njCOyoiDFyl0Q0SBSOtE=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "5e871d8aa6f57cc8e0dc087d1c5013f6e212b4ce", "rev": "b12803b6d90e2e583429bb79b859ca53c348b39a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -643,88 +460,19 @@
"type": "github" "type": "github"
} }
}, },
"nur": {
"locked": {
"lastModified": 1685880642,
"narHash": "sha256-jQNe2IAL7qPdwCk8HnwlfJN790YjIoRu4EfjfI6y0qk=",
"owner": "nix-community",
"repo": "NUR",
"rev": "65b4ce84312de2fec2e26315bad06278e3e4acd5",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "NUR",
"type": "github"
}
},
"pre-commit-hooks": {
"inputs": {
"flake-compat": [
"devenv",
"flake-compat"
],
"flake-utils": "flake-utils",
"gitignore": "gitignore",
"nixpkgs": [
"devenv",
"nixpkgs"
],
"nixpkgs-stable": "nixpkgs-stable"
},
"locked": {
"lastModified": 1677160285,
"narHash": "sha256-tBzpCjMP+P3Y3nKLYvdBkXBg3KvTMo3gvi8tLQaqXVY=",
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"rev": "2bd861ab81469428d9c823ef72c4bb08372dd2c4",
"type": "github"
},
"original": {
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"type": "github"
}
},
"root": { "root": {
"inputs": { "inputs": {
"agenix": "agenix", "agenix": "agenix",
"darwin": "darwin_2", "astronvim": "astronvim",
"devenv": "devenv",
"home-manager": "home-manager_2", "home-manager": "home-manager_2",
"hyprland": "hyprland", "hyprland": "hyprland",
"nil": "nil", "mysecrets": "mysecrets",
"nix-darwin": "nix-darwin",
"nixos-generators": "nixos-generators", "nixos-generators": "nixos-generators",
"nixpkgs": "nixpkgs_5", "nixpkgs": "nixpkgs_3",
"nixpkgs-darwin": "nixpkgs-darwin", "nixpkgs-darwin": "nixpkgs-darwin",
"nixpkgs-stable": "nixpkgs-stable_2", "nixpkgs-unstable": "nixpkgs-unstable",
"nixpkgs-wayland": "nixpkgs-wayland", "nixpkgs-wayland": "nixpkgs-wayland"
"nur": "nur"
}
},
"rust-overlay": {
"inputs": {
"flake-utils": [
"nil",
"flake-utils"
],
"nixpkgs": [
"nil",
"nixpkgs"
]
},
"locked": {
"lastModified": 1682907601,
"narHash": "sha256-FfUAYvRJ+6s9WWjXNPdRzuuvAeu2VHIXIbUkPJr4t14=",
"owner": "oxalica",
"repo": "rust-overlay",
"rev": "5eaff055dd57128c53ae373dc96af944f5849daa",
"type": "github"
},
"original": {
"owner": "oxalica",
"repo": "rust-overlay",
"type": "github"
} }
}, },
"systems": { "systems": {
@@ -742,18 +490,25 @@
"type": "github" "type": "github"
} }
}, },
"systems_2": { "treefmt-nix": {
"inputs": {
"nixpkgs": [
"nixpkgs-wayland",
"nix-eval-jobs",
"nixpkgs"
]
},
"locked": { "locked": {
"lastModified": 1681028828, "lastModified": 1689620039,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", "narHash": "sha256-BtNwghr05z7k5YMdq+6nbue+nEalvDepuA7qdQMAKoQ=",
"owner": "nix-systems", "owner": "numtide",
"repo": "default", "repo": "treefmt-nix",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", "rev": "719c2977f958c41fa60a928e2fbc50af14844114",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-systems", "owner": "numtide",
"repo": "default", "repo": "treefmt-nix",
"type": "github" "type": "github"
} }
}, },
@@ -761,11 +516,11 @@
"flake": false, "flake": false,
"locked": { "locked": {
"host": "gitlab.freedesktop.org", "host": "gitlab.freedesktop.org",
"lastModified": 1682436395, "lastModified": 1689611045,
"narHash": "sha256-GGEjkQO9m7YLYIXIXM76HWdhjg4Ye+oafOtyaFAYKI4=", "narHash": "sha256-3RTOlQabkNetQ4O4UzSf57JPco9VGVHhSU1ls5uKBeE=",
"owner": "wlroots", "owner": "wlroots",
"repo": "wlroots", "repo": "wlroots",
"rev": "6830bfc17fd94709e2cdd4da0af989f102a26e59", "rev": "7791ffe0584c4ac13c170e1661ce33bdbd4a9b9e",
"type": "gitlab" "type": "gitlab"
}, },
"original": { "original": {
@@ -787,11 +542,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1682439384, "lastModified": 1685385764,
"narHash": "sha256-zHDa8LCZs05TZHQSIZ3ucwyMPglBGHcqTBzfkLjYXTM=", "narHash": "sha256-r+XMyOoRXq+hlfjayb+fyi9kq2JK48TrwuNIAXqlj7U=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland", "repo": "xdg-desktop-portal-hyprland",
"rev": "c0e233955568fbea4e859336f6d3d14d51294d7c", "rev": "4d9ff0c17716936e0b5ca577a39e263633901ed1",
"type": "github" "type": "github"
}, },
"original": { "original": {
+151 -129
View File
@@ -1,5 +1,12 @@
{ {
description = "NixOS configuration of Ryan Yin"; description = "NixOS & macOS configuration of Ryan Yin";
##################################################################################################################
#
# Want to know Nix in details? Looking for a beginner-friendly tutorial?
# Check out https://github.com/ryan4yin/nixos-and-flakes-book !
#
##################################################################################################################
# the nixConfig here only affects the flake itself, not the system configuration! # the nixConfig here only affects the flake itself, not the system configuration!
nixConfig = { nixConfig = {
@@ -7,7 +14,6 @@
substituters = [ substituters = [
# replace official cache with a mirror located in China # replace official cache with a mirror located in China
"https://mirrors.bfsu.edu.cn/nix-channels/store"
"https://mirrors.ustc.edu.cn/nix-channels/store" "https://mirrors.ustc.edu.cn/nix-channels/store"
"https://cache.nixos.org" "https://cache.nixos.org"
]; ];
@@ -16,40 +22,31 @@
extra-substituters = [ extra-substituters = [
"https://nix-community.cachix.org" "https://nix-community.cachix.org"
"https://nixpkgs-wayland.cachix.org" "https://nixpkgs-wayland.cachix.org"
"https://xddxdd.cachix.org"
]; ];
extra-trusted-public-keys = [ extra-trusted-public-keys = [
"cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY=" "cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY="
"nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs=" "nix-community.cachix.org-1:mB9FSh9qf2dCimDSUo8Zy7bkq5CX+/rkCWyvRCYg3Fs="
"nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA=" "nixpkgs-wayland.cachix.org-1:3lwxaILxMRkVhehr5StQprHdEo4IrE8sRho9R9HOLYA="
"xddxdd.cachix.org-1:ay1HJyNDYmlSwj5NXQG065C8LfoqqKaTNCyzeixGjf8="
]; ];
}; };
# This is the standard format for flake.nix. `inputs` are the dependencies of the flake, # This is the standard format for flake.nix. `inputs` are the dependencies of the flake,
# and `outputs` function will return all the build results of the flake.
# Each item in `inputs` will be passed as a parameter to the `outputs` function after being pulled and built. # Each item in `inputs` will be passed as a parameter to the `outputs` function after being pulled and built.
inputs = { inputs = {
# There are many ways to reference flake inputs. The most widely used is github:owner/name/reference, # There are many ways to reference flake inputs. The most widely used is github:owner/name/reference,
# which represents the GitHub repository URL + branch/commit-id/tag. # which represents the GitHub repository URL + branch/commit-id/tag.
# Official NixOS package source, using nixos-unstable branch here # Official NixOS package source, using nixos's stable branch by default
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs.url = "github:nixos/nixpkgs/nixos-23.05";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-23.05"; nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
# for macos # for macos
nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-23.05-darwin"; nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-23.05-darwin";
darwin = { nix-darwin = {
url = "github:lnl7/nix-darwin"; url = "github:lnl7/nix-darwin";
inputs.nixpkgs.follows = "nixpkgs-darwin"; inputs.nixpkgs.follows = "nixpkgs-darwin";
}; };
# nix users repository
# used to install some packages not in nixpkgs
# e.g. wechat-uos/qqmusic/dingtalk
nur.url = "github:nix-community/NUR";
# home-manager, used for managing user configuration # home-manager, used for managing user configuration
home-manager = { home-manager = {
url = "github:nix-community/home-manager/release-23.05"; url = "github:nix-community/home-manager/release-23.05";
@@ -60,7 +57,7 @@
}; };
# modern window compositor # modern window compositor
hyprland.url = "github:hyprwm/Hyprland/v0.25.0"; hyprland.url = "github:hyprwm/Hyprland/v0.27.2";
# community wayland nixpkgs # community wayland nixpkgs
nixpkgs-wayland.url = "github:nix-community/nixpkgs-wayland"; nixpkgs-wayland.url = "github:nix-community/nixpkgs-wayland";
@@ -70,143 +67,168 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
# use devenv to manage my development environment # secrets management, lock with git commit at 2023/7/15
devenv.url = "github:cachix/devenv/v0.6.2"; agenix.url = "github:ryantm/agenix/0d8c5325fc81daf00532e3e26c6752f7bcde1143";
# secrets management, lock with git commit at 2023/5/15 # AstroNvim is an aesthetic and feature-rich neovim config.
agenix.url = "github:ryantm/agenix/db5637d10f797bb251b94ef9040b237f4702cde3"; astronvim = {
url = "github:AstroNvim/AstroNvim/v3.33.3";
# nix language server, used by vscode & neovim flake = false;
nil.url = "github:oxalica/nil/2023-05-09";
}; };
# `outputs` are all the build result of the flake. # my private secrets, it's a private repository, you need to replace it with your own.
# A flake can have many use cases and different types of outputs. # use ssh protocol to authenticate via ssh-agent/ssh-key, and shallow clone to save time
mysecrets = {
url = "git+ssh://git@github.com/ryan4yin/nix-secrets.git?shallow=1";
flake = false;
};
};
# The `outputs` function will return all the build results of the flake.
# A flake can have many use cases and different types of outputs,
# parameters in `outputs` are defined in `inputs` and can be referenced by their names. # parameters in `outputs` are defined in `inputs` and can be referenced by their names.
# However, `self` is an exception, This special parameter points to the `outputs` itself (self-reference) # However, `self` is an exception, this special parameter points to the `outputs` itself (self-reference)
# The `@` syntax here is used to alias the attribute set of the inputs's parameter, making it convenient to use inside the function. # The `@` syntax here is used to alias the attribute set of the inputs's parameter, making it convenient to use inside the function.
outputs = inputs @ { outputs = inputs @ {
self, self,
nixpkgs, nixpkgs,
darwin, nixpkgs-unstable,
nix-darwin,
home-manager, home-manager,
nixos-generators,
... ...
}: { }: let
nixosConfigurations = { username = "ryan";
# By default, NixOS will try to refer the nixosConfiguration with its hostname. userfullname = "Ryan Yin";
# so the system named `msi-rtx4090` will use this configuration. useremail = "xiaoyin_c@qq.com";
# However, the configuration name can also be specified using `sudo nixos-rebuild switch --flake /path/to/flakes/directory#<name>`.
# The `nixpkgs.lib.nixosSystem` function is used to build this configuration, the following attribute set is its parameter.
# Run `sudo nixos-rebuild switch --flake .#msi-rtx4090` in the flake's directory to deploy this configuration on any NixOS system
msi-rtx4090 = nixpkgs.lib.nixosSystem rec {
system = "x86_64-linux";
# The Nix module system can modularize configurations, improving the maintainability of configurations. x64_system = "x86_64-linux";
# x64_darwin = "x86_64-darwin";
# Each parameter in the `modules` is a Nix Module, and there is a partial introduction to it in the nixpkgs manual: allSystems = [x64_system x64_darwin];
# <https://nixos.org/manual/nixpkgs/unstable/#module-system-introduction>
# It is said to be partial because the documentation is not complete, only some simple introductions nixosSystem = import ./lib/nixosSystem.nix;
# (such is the current state of Nix documentation...) macosSystem = import ./lib/macosSystem.nix;
# A Nix Module can be an attribute set, or a function that returns an attribute set. in {
# If a Module is a function, according to the Nix Wiki description, this function can have up to four parameters: nixosConfigurations = let
# # 星野 アイ, Hoshino Ai
# config: The configuration of the entire system idol_ai_modules_i3 = {
# options: All option declarations refined with all definition and declaration references. nixos-modules = [
# pkgs: The attribute set extracted from the Nix package collection and enhanced with the nixpkgs.config option. ./hosts/idols/ai
# modulesPath: The location of the module directory of Nix. ./modules/nixos/i3.nix
# ];
# Only these four parameters can be passed by default. home-module = import ./home/linux/desktop-i3.nix;
# If you need to pass other parameters, you must use `specialArgs` by uncomment the following line };
specialArgs = { idol_ai_modules_hyprland = {
pkgs-stable = import inputs.nixpkgs-stable { nixos-modules = [
system = system; # refer the `system` parameter form outer scope recursively ./hosts/idols/ai
./modules/nixos/hyprland.nix
];
home-module = import ./home/linux/desktop-hyprland.nix;
};
# 星野 愛久愛海, Hoshino Akuamarin
idol_aquamarine_modules = {
nixos-modules = [
./hosts/idols/aquamarine
];
home-module = import ./home/linux/server.nix;
};
# 星野 瑠美衣, Hoshino Rubii
idol_ruby_modules = {
nixos-modules = [
./hosts/idols/ruby
];
home-module = import ./home/linux/server.nix;
};
# 有馬 かな, Arima Kana
idol_kana_modules = {
nixos-modules = [
./hosts/idols/kana
];
home-module = import ./home/linux/server.nix;
};
system = x64_system;
specialArgs =
{
inherit username userfullname useremail;
# use unstable branch for some packages to get the latest updates
pkgs-unstable = import nixpkgs-unstable {
system = x64_system; # refer the `system` parameter form outer scope recursively
# To use chrome, we need to allow the installation of non-free software # To use chrome, we need to allow the installation of non-free software
config.allowUnfree = true; config.allowUnfree = true;
}; };
} // inputs;
modules = [
./hosts/msi-rtx4090
# make home-manager as a module of nixos
# so that home-manager configuration will be deployed automatically when executing `nixos-rebuild switch`
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
# pass all inputs into home manager's all sub modules
home-manager.extraSpecialArgs = specialArgs;
home-manager.users.ryan = import ./home/linux/x11.nix;
} }
]; // inputs;
base_args = {
inherit home-manager nixos-generators system specialArgs;
};
stable_args = base_args // {inherit nixpkgs;};
unstable_args = base_args // {nixpkgs = nixpkgs-unstable;};
in {
# ai with i3 window manager
ai_i3 = nixosSystem (idol_ai_modules_i3 // stable_args);
# ai with hyprland compositor
ai_hyprland = nixosSystem (idol_ai_modules_hyprland // stable_args);
aquamarine = nixosSystem (idol_aquamarine_modules // stable_args);
ruby = nixosSystem (idol_ruby_modules // stable_args);
kana = nixosSystem (idol_kana_modules // stable_args);
}; };
nixos-test = nixpkgs.lib.nixosSystem rec { # take system images for idols
system = "x86_64-linux"; # https://github.com/nix-community/nixos-generators
specialArgs = { packages."${x64_system}" =
pkgs-stable = import inputs.nixpkgs-stable { # genAttrs returns an attribute set with the given keys and values(host => image).
system = system; nixpkgs.lib.genAttrs [
"ai_i3"
"ai_hyprland"
] (
host:
self.nixosConfigurations.${host}.config.formats.iso
)
// nixpkgs.lib.genAttrs [
"aquamarine"
"ruby"
"kana"
] (
host:
self.nixosConfigurations.${host}.config.formats.proxmox
);
# macOS's configuration, for work.
darwinConfigurations = let
system = x64_darwin;
specialArgs =
{
inherit username userfullname useremail;
# use unstable branch for some packages to get the latest updates
pkgs-unstable = import nixpkgs-unstable {
inherit system; # refer the `system` parameter form outer scope recursively
# To use chrome, we need to allow the installation of non-free software
config.allowUnfree = true; config.allowUnfree = true;
}; };
} // inputs;
modules = [
./hosts/nixos-test
home-manager.nixosModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = specialArgs;
home-manager.users.ryan = import ./home/linux/wayland.nix;
} }
]; // inputs;
base_args = {
inherit nix-darwin home-manager system specialArgs;
}; };
}; in {
harmonica = macosSystem (base_args // {
# configurations for MacOS darwin-modules = [
darwinConfigurations."harmonica" = darwin.lib.darwinSystem {
system = "x86_64-darwin";
specialArgs = inputs;
modules = [
./hosts/harmonica ./hosts/harmonica
home-manager.darwinModules.home-manager
{
home-manager.useGlobalPkgs = true;
home-manager.useUserPackages = true;
home-manager.extraSpecialArgs = inputs;
home-manager.users.admin = import ./home/darwin;
}
]; ];
home-module = import ./home/darwin;
});
}; };
# generate qcow2 & iso image from nixos configuration # format the nix code in this flake
# https://github.com/nix-community/nixos-generators # alejandra is a nix formatter with a beautiful output
# packages.x86_64-linux = { formatter = nixpkgs.lib.genAttrs allSystems (
# qcow2 = nixos-generators.nixosGenerate { system:
# system = "x86_64-linux"; nixpkgs.legacyPackages.${system}.alejandra
# modules = [ );
# # you can include your own nixos configuration here, i.e.
# # ./configuration.nix
# ];
# format = "qcow";
# # you can also define your own custom formats
# # customFormats = { "myFormat" = <myFormatModule>; ... };
# # format = "myFormat";
# };
# iso = nixos-generators.nixosGenerate {
# system = "x86_64-linux";
# modules = [
# # you can include your own nixos configuration here, i.e.
# # ./configuration.nix
# ];
# format = "iso";
# };
# };
}; };
} }
-35
View File
@@ -1,35 +0,0 @@
{ lib, stdenvNoCC, fetchgit }:
stdenvNoCC.mkDerivation rec {
pname = "archcraft-font";
version = "2023-05-07";
src = fetchgit {
url = "https://github.com/archcraft-os/archcraft-packages.git";
rev = "88030ee6d2df80db958541b53bd3673e081720cf"; # git commit id
sparseCheckout = [ "archcraft-fonts/files/icon-fonts/archcraft.ttf" ]; # only fetch the feather.ttf file
# the sha256 is used to verify the integrity of the downloaded source, and alse cache the build result.
# so if you copy other package src's sha256, you will get a cached build result of that package, and all configs in this file will be ignored.
# specify sha256 to empty and build it, then an error will indicate the correct sha256
sha256 = "sha256-DrGN8lN4Yr1RTyCUZhJjzKgCuC0vTnSWjOKovNg3T/U=";
};
installPhase = ''
runHook preInstall
install -Dm644 archcraft-fonts/files/icon-fonts/archcraft.ttf -t $out/share/fonts/truetype/
runHook postInstall
'';
meta = with lib; {
homepage = "https://github.com/archcraft-os/archcraft-packages";
description = "Archcraft icon font";
version = version;
longDescription = ''Archcraft icon font'';
license = licenses.mit;
maintainers = [ maintainers.ryan4yin ];
platforms = platforms.all;
};
}
+5 -2
View File
@@ -1,5 +1,8 @@
{ lib, stdenvNoCC, fetchgit }: {
lib,
stdenvNoCC,
fetchgit,
}:
stdenvNoCC.mkDerivation rec { stdenvNoCC.mkDerivation rec {
pname = "icomoon-feather-font"; pname = "icomoon-feather-font";
version = "2023-05-06"; version = "2023-05-06";
+100
View File
@@ -0,0 +1,100 @@
{pkgs, ...}:
###########################################################
#
# 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. 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. 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;
};
xdg.configFile."alacritty/alacritty.yml".text =
''
import:
# all alacritty themes can be found at
# https://github.com/alacritty/alacritty-theme
- ~/.config/alacritty/theme_catppuccino.yml
window:
# Background opacity
#
# Window opacity as a floating point number from `0.0` to `1.0`.
# The value `0.0` is completely transparent and `1.0` is opaque.
opacity: 0.95
# Startup Mode (changes require restart)
#
# Values for `startup_mode`:
# - Windowed
# - Maximized
# - Fullscreen
#
# Values for `startup_mode` (macOS only):
# - SimpleFullscreen
startup_mode: Windowed
# Allow terminal applications to change Alacritty's window title.
dynamic_title: true
# Make `Option` key behave as `Alt` (macOS only):
# - OnlyLeft
# - OnlyRight
# - Both
# - None (default)
option_as_alt: Both
scrolling:
# Maximum number of lines in the scrollback buffer.
# Specifying '0' will disable scrolling.
history: 10000
# Scrolling distance multiplier.
#multiplier: 3
# Font configuration
font:
# Normal (roman) font face
bold:
family: JetBrainsMono Nerd Font
italic:
family: JetBrainsMono Nerd Font
normal:
family: JetBrainsMono Nerd Font
bold_italic:
# Font family
#
# If the bold italic family is not specified, it will fall back to the
# value specified for the normal font.
family: JetBrainsMono Nerd Font
''
+ (
if pkgs.stdenv.isDarwin
then ''
# Point size
size: 14
shell: # force nushell as default shell on macOS
program: /run/current-system/sw/bin/nu
''
else ''
# holder identation
# Point size
size: 13
''
);
xdg.configFile."alacritty/theme_catppuccino.yml".source = ./theme_catppuccino.yml;
}
@@ -0,0 +1,40 @@
# Catppuccino theme scheme for Alacritty
colors:
primary:
background: '#1E1E2E'
foreground: '0xd6d6d6'
cursor:
text: '#CDD6F4'
cursor: '#D9D9D9'
normal:
black: '#181A1F'
red: '#E86671'
green: '#98C379'
yellow: '#E5C07B'
blue: '#61AFEF'
magenta: '#C678DD'
cyan: '#54AFBC'
white: '#ABB2BF'
bright:
black: '#5C6370'
red: '#E86671'
green: '#98C379'
yellow: '#E5C07B'
blue: '#61AFEF'
magenta: '#C678DD'
cyan: '#54AFBC'
white: '0xf7f7f7'
dim:
black: '#5C6370'
red: '0x74423f'
green: '#98C379'
yellow: '#E5C07B'
blue: '#61AFEF'
magenta: '0x6e4962'
cyan: '0x5c8482'
white: '0x828282'
+12
View File
@@ -0,0 +1,12 @@
{...}: {
imports = [
./alacritty
../server
./neovim
./development.nix
./kitty.nix
./media.nix
./shell.nix
];
}
+76
View File
@@ -0,0 +1,76 @@
{
pkgs,
pkgs-unstable,
...
}: {
#############################################################
#
# Basic settings for development environment
#
# Please avoid to install language specific packages here(globally),
# instead, install them independently using dev-templates:
# https://github.com/the-nix-way/dev-templates
#
#############################################################
home.packages = with pkgs; [
pkgs-unstable.devbox
# cloud native
skopeo
docker-compose
dive # explore docker layers
kubectl
kubernetes-helm
terraform
# terraformer # generate terraform configs from existing cloud resources
pulumi
pulumictl
k9s
# istioctl
# cloud provider
awscli2
aws-iam-authenticator
eksctl
# DO NOT install build tools for C/C++, set it per project by devShell instead
gnumake # used by this repo, to simplify the deployment
# python
(python311.withPackages (ps:
with ps; [
ipython
pandas
requests
pyquery
pyyaml
]))
# db related
dbeaver
mycli
pgcli
mongosh
sqlite
# embedded development
minicom
# other tools
k6 # load testing tool
mitmproxy # http/https proxy tool
protobuf # protocol buffer compiler
];
programs = {
direnv = {
enable = true;
nix-direnv.enable = true;
enableZshIntegration = true;
enableBashIntegration = true;
enableNushellIntegration = true;
};
};
}
+59
View File
@@ -0,0 +1,59 @@
{
lib,
pkgs,
...
}:
###########################################################
#
# Kitty Configuration
#
# Useful Hot Keys for macOS:
# 1. New Tab: `command + t`
# 2. Close Tab: `command + w`
# 3. Switch Tab: `shift + command + [` | `shift + command + ]`
# 4. Increase Font Size: `command + =` | `command + +`
# 5. Decrease Font Size: `command + -` | `command + _`
# 6. And Other common shortcuts such as Copy, Paste, Cursor Move, etc.
#
# Useful Hot Keys for Linux:
# 1. New Tab: `ctrl + shift + t`
# 2. Close Tab: `ctrl + shift + q`
# 3. Switch Tab: `ctrl + shift + right` | `ctrl + shift + left`
# 4. Increase Font Size: `ctrl + shift + =` | `ctrl + shift + +`
# 5. Decrease Font Size: `ctrl + shift + -` | `ctrl + shift + _`
# 6. And Other common shortcuts such as Copy, Paste, Cursor Move, etc.
#
###########################################################
{
programs.kitty = {
enable = true;
theme = "Catppuccin-Mocha";
font = {
name = "JetBrainsMono Nerd Font";
# use different font size on macOS
size =
if pkgs.stdenv.isDarwin
then 14
else 13;
};
settings =
{
background_opacity = "0.95";
macos_option_as_alt = true; # Option key acts as Alt on macOS
scrollback_lines = 10000;
enable_audio_bell = false;
}
// (
if pkgs.stdenv.isDarwin
then {
# macOS specific settings, force kitty to use nushell as default shell
shell = "/run/current-system/sw/bin/nu";
}
else {}
);
# macOS specific settings
darwinLaunchOptions = ["--start-as=fullscreen"];
};
}
@@ -9,7 +9,7 @@
ffmpeg-full ffmpeg-full
# images # images
viu # terminal image viewer viu # Terminal image viewer with native support for iTerm and Kitty
imagemagick imagemagick
graphviz graphviz
]; ];
+7
View File
@@ -0,0 +1,7 @@
# AstroNvim
My Neovim config based on [AstroNvim](https://github.com/AstroNvim/AstroNvim).
## Screenshots
![](/_img/astronvim_2023-07-13_00-39.webp)
@@ -0,0 +1,288 @@
return {
colorscheme = "catppuccin",
options = {
opt = {
relativenumber = true, -- Show relative numberline
signcolumn = "auto", -- Show sign column when used only
spell = false, -- Spell checking
swapfile = false, -- Swapfile
smartindent = false; -- fix https://github.com/ryan4yin/nix-config/issues/4
},
},
plugins = {
"AstroNvim/astrocommunity",
-- colorscheme - catppuccin
{ import = "astrocommunity.colorscheme.catppuccin" },
-- Highly experimental plugin that completely replaces
-- the UI for messages, cmdline and the popupmenu.
{ 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.motion.leap-nvim" },
{ import = "astrocommunity.motion.flit-nvim" },
{ import = "astrocommunity.scrolling.nvim-scrollbar" },
{ import = "astrocommunity.editing-support.auto-save-nvim" },
{ import = "astrocommunity.editing-support.todo-comments-nvim" },
-- Language Support
---- Frontend & NodeJS
{ import = "astrocommunity.pack.typescript-all-in-one" },
{ import = "astrocommunity.pack.tailwindcss" },
{ import = "astrocommunity.pack.html-css" },
{ import = "astrocommunity.pack.prisma" },
{ import = "astrocommunity.pack.vue" },
---- Configuration Language
{ import = "astrocommunity.pack.markdown" },
{ import = "astrocommunity.markdown-and-latex.glow-nvim" },
{ import = "astrocommunity.pack.json" },
{ import = "astrocommunity.pack.yaml" },
{ import = "astrocommunity.pack.toml" },
---- Backend
{ import = "astrocommunity.pack.lua" },
{ import = "astrocommunity.pack.go" },
{ import = "astrocommunity.pack.rust" },
{ import = "astrocommunity.pack.python" },
{ import = "astrocommunity.pack.java" },
-- { import = "astrocommunity.pack.nix" }, -- manually add config for nix, comment this one.
{ import = "astrocommunity.pack.proto" },
---- Operation & Cloud Native
{ import = "astrocommunity.pack.terraform" },
{ import = "astrocommunity.pack.bash" },
{ import = "astrocommunity.pack.cmake" },
{ import = "astrocommunity.pack.cpp" },
{ import = "astrocommunity.pack.docker" },
-- AI Assistant
{ import = "astrocommunity.completion.copilot-lua-cmp" },
-- Custom copilot-lua to enable filtypes: markdown
{
"zbirenbaum/copilot.lua",
opts = function(_, opts)
opts.filetypes = {
yaml = true;
markdown = true,
}
end,
},
---- Nushell
{
"LhKipp/nvim-nu",
config = function()
require'nu'.setup({
use_lsp_features = true, -- requires https://github.com/jose-elias-alvarez/null-ls.nvim
-- lsp_feature: all_cmd_names is the source for the cmd name completion.
-- It can be
-- * a string, which is interpreted as a shell command and the returned list is the source for completions (requires plenary.nvim)
-- * a list, which is the direct source for completions (e.G. all_cmd_names = {"echo", "to csv", ...})
-- * a function, returning a list of strings and the return value is used as the source for completions
all_cmd_names = [[nu -c 'help commands | get name | str join "\n"']]
})
end,
dependencies = {
{"nvim-treesitter/nvim-treesitter"},
{ "jose-elias-alvarez/null-ls.nvim"},
}
},
-- File explorer(Custom configs)
{
"nvim-neo-tree/neo-tree.nvim",
opts = {
filesystem = {
filtered_items = {
visible = true, -- visible by default
hide_dotfiles = false,
hide_gitignored = false,
},
},
}
},
-- The plugin offers the `:Refactor` command to refactor code.
-- TODO not work yet
{
"ThePrimeagen/refactoring.nvim",
dependencies = {
{"nvim-lua/plenary.nvim"},
{"nvim-treesitter/nvim-treesitter"}
}
},
-- The plugin offers the `:Spectre` command to search and replace.
-- TODO not work yet
{
"nvim-pack/nvim-spectre",
dependencies = {
{"nvim-lua/plenary.nvim"},
}
},
-- Language Parser for syntax highlighting / indentation / folding / Incremental selection
{
"nvim-treesitter/nvim-treesitter",
opts = function(_, opts)
local utils = require "astronvim.utils";
opts.indent.enable = false;
opts.ensure_installed = utils.list_insert_unique(opts.ensure_installed, {
-- neovim
"vim",
"lua",
-- operation & cloud native
"dockerfile",
"hcl",
"jsonnet",
"regex",
"terraform",
"nix",
})
end,
},
-- Install lsp, formmatter and others via home manager instead of Mason.nvim
-- LSP installations
{
"williamboman/mason-lspconfig.nvim",
-- overwrite ensure_installed to install lsp via home manager(except emmet_ls)
opts = function(_, opts)
opts.ensure_installed = {
"emmet_ls", -- not exist in nixpkgs, so install it via mason
}
end,
},
-- Formatters/Linter installation
{
"jay-babu/mason-null-ls.nvim",
-- ensure_installed nothing
opts = function(_, opts)
opts.ensure_installed = nil
opts.automatic_installation = false
end,
},
{
"jose-elias-alvarez/null-ls.nvim",
opts = function(_, opts)
local null_ls = require "null-ls"
local code_actions = null_ls.builtins.code_actions
local diagnostics = null_ls.builtins.diagnostics
local formatting = null_ls.builtins.formatting
local hover = null_ls.builtins.hover
local completion = null_ls.builtins.completion
-- https://github.com/jose-elias-alvarez/null-ls.nvim/blob/main/doc/BUILTINS.md
if type(opts.sources) == "table" then
vim.list_extend(opts.sources, {
-- Common Code Actions
code_actions.gitsigns,
-- common refactoring actions based off the Refactoring book by Martin Fowler
code_actions.refactoring,
code_actions.gomodifytags, -- Go - modify struct field tags
code_actions.impl, -- Go - generate interface method stubs
code_actions.shellcheck,
code_actions.proselint, -- English prose linter
code_actions.statix, -- Lints and suggestions for Nix.
-- Completion
completion.luasnip,
-- Diagnostic
diagnostics.actionlint, -- GitHub Actions workflow syntax checking
diagnostics.buf, -- check text in current buffer
diagnostics.checkmake, -- check Makefiles
diagnostics.deadnix, -- Scan Nix files for dead code.
-- Formatting
formatting.prettier, -- js/ts/vue/css/html/json/... formatter
diagnostics.hadolint, -- Dockerfile linter
formatting.black, -- Python formatter
formatting.ruff, -- extremely fast Python linter
formatting.goimports, -- Go formatter
formatting.shfmt, -- Shell formatter
formatting.rustfmt, -- Rust formatter
formatting.taplo, -- TOML formatteautoindentr
formatting.terraform_fmt, -- Terraform formatter
formatting.stylua, -- Lua formatter
formatting.alejandra, -- Nix formatter
formatting.sqlfluff.with({ -- SQL formatter
extra_args = { "--dialect", "postgres" }, -- change to your dialect
}),
formatting.nginx_beautifier, -- Nginx formatter
})
end
end,
},
-- Debugger installation
{
"jay-babu/mason-nvim-dap.nvim",
-- overrides `require("mason-nvim-dap").setup(...)`
opts = function(_, opts)
opts.ensure_installed = nil
opts.automatic_installation = false
end,
},
},
-- Configure require("lazy").setup() options
lazy = {
defaults = { lazy = true },
performance = {
rtp = {
-- customize default disabled vim plugins
disabled_plugins = { };
},
},
},
lsp = {
config = {
-- the offset_enconding of clangd will confilicts whit null-ls
-- so we need to manually set it to utf-8
clangd = {
capabilities = {
offsetEncoding = "utf-8",
},
},
},
-- enable servers that installed by home-manager instead of mason
servers = {
---- Frontend & NodeJS
"tsserver", -- typescript/javascript language server
"tailwindcss", -- tailwindcss language server
"html", -- html language server
"cssls", -- css language server
"prismals", -- prisma language server
"volar", -- vue language server
---- Configuration Language
"marksman", -- markdown ls
"jsonls", -- json language server
"yamlls", -- yaml language server
"taplo", -- toml language server
---- Backend
"lua_ls", -- lua
"gopls", -- go
"rust_analyzer", -- rust
"pyright", -- python
"ruff_lsp", -- extremely fast Python linter and code transformation
"jdtls", -- java
"nil_ls", -- nix language server
"bufls", -- protocol buffer language server
"zls", -- zig language server
---- Operation & Cloud Nativautoindente
"bashls", -- bash
"cmake", -- cmake language server
"clangd", -- c/c++
"dockerls", -- dockerfile
"jsonnet_ls", -- jsonnet language server
"terraformls", -- terraform hcl
},
formatting = {
disabled = {},
format_on_save = {
enabled = true,
allow_filetypes = {
"go",
"jsonnet",
"rust",
"terraform",
},
},
},
},
}
@@ -0,0 +1,21 @@
-- Mapping data with "desc" stored directly by vim.keymap.set().
--
-- Please use this mappings table to set keyboard mapping since this is the
-- lower level configuration and more robust one. (which-key will
-- automatically pick-up stored data by this setting.)
local utils = require "astronvim.utils"
return {
-- first key is the mode
n = {
-- second key is the lefthand side of the map
-- mappings seen under group name "Buffer"
["<leader>bn"] = { "<cmd>tabnew<cr>", desc = "New tab" },
-- quick save
["<C-s>"] = { ":w!<cr>", desc = "Save File" }, -- change description but the same command
["<leader>tp"] = { function() utils.toggle_term_cmd("ipython") end, desc = "ToggleTerm python" },
},
t = {
-- setting a mapping to false will disable it
-- ["<esc>"] = false,
},
}
+223
View File
@@ -0,0 +1,223 @@
{
pkgs,
astronvim,
...
}:
###############################################################################
#
# AstroNvim's configuration and all its dependencies
#
# Related folders:
# nvim's config: `~/.config/nvim`
# astronvim's user configuration: `$XDG_CONFIG_HOME/astronvim/lua/user`
# all plugins will be installed into(by lazy.nvim): `~/.local/share/nvim/`
#
# For details: https://astronvim.com/
#
# Toggle visual mode: `v`
# Toggle visual block mode: `<Ctrl> + v` (select a block(vertically) of text)
#
# Commands & shortcuts in AstroNvim
# Learn Neovim's Basics: `:Tutor`
# Opening file explorer: `<Space> + e`
# Focus Neotree to current file: `<Space> + o`
# Floating Terminal: `<Space> + tf`
# Horizontal Split Terminal: `<Space> + th`
# Vertical Split Terminal: `<Space> + tv`
# Open IPython REPL: `<Space> + tp`
# Opening LSP symbols: `<Space> + lS`
# Show line diagnostics: `gl`
# Go to definition: `gd`
#
# Switching between windows: `<Ctrl> + h/j/k/l`
# Resizing windows: `<Ctrl> + Up/Down/Left/Right`
# Note that on macOS, this is conflict with system's default shortcuts.
# You need disable them in System Preferences -> Keyboard -> Shortcuts -> Mission Control.
# Horizontal Split: `\`
# Vertical Split: `|`
# Next Buffer(Tab): `]b`
# Previous Buffer(Tab): `[b`
# Close Buffer: `<Space> + c`
#
# Toggle buffer auto formatting: `<Space> + uf`
# Format Document: `<Space> + lf`
# Comment Line: `<Space> + /`
# Can be used in visual mode
# Code Actions: `<Space> + la`
# Rename: `<Space> + lr`
# Open filepath/URL at cursor: `gx`
# This is a neovim builtin command
# Find files by name(fzf): `<Space> + ff`
# Grep string in files(repgrep): `<Space> + fw`
#
# Save Session: `<Space> + Ss`
# Last Session: `<Space> + Sl`
# Delete Session: `<Space> + Sd`
# Search Session: `<Space> + Sf`
# Load Current Directory Session:`<Space> + S.`
#
# Debugging: press `<Space> + D` to see the available bindings and options.
#
# Replace in the selected area: `:s/old/new/g` (will show `:'<,'>s/old/new/g`)
# Replace in the current line: The same as above
# Replace in the whole file: `:% s/old/new/g`
# Replace with regex: `:% s@\vhttp://(\w+)@https://\1@gc`
# 1. `\v` means means that in the regex pattern after it can be used without backslash escaping(similar to python's raw string).
# 2. `\1` means the first matched group in the pattern.
# Replace in the specific lines:
# 1. From the 10th line to the end of the file: `:10,$ s/old/new/g`
# or `:10,$ s@^@#@g`
# 2. From the 10th line to the 20th line: `:10,20 s/old/new/g`
#
# The postfix(flgas) in the above commands:
# 1. `g` means replace all the matched strings in the current line/file.
# 2. `c` means ask for confirmation before replacing.
# 3. `i` means ignore case.
#
# Joining a Selection of Lines With Space: `:join`
# Joining without spaces: `:join!`
#
# Toggle text's case: `~`
# Convert to uppercase: `U`
# Convert to lowercase: `u`
#
# Save the selected text to a file: `:w filename` (will show `:'<,'>w filename`)
#
# Search key pattern and Replace in Multiple Files:
# sed -ri "s/pattern_str/replace_str/g" $(grep "key_pattern" 'path_pattern' -rl)
#
# Search file name pattern and Replace in Multiple Files:
# sed -ri "s/pattern_str/replace_str/g" $(find . -name "pattern")
#
# ......
# See https://astronvim.com/Basic%20Usage/walkthrough
#
#e#############################################################################
{
xdg.configFile = {
# base config
"nvim" = {
# update AstroNvim
onChange = "${pkgs.neovim}/bin/nvim --headless +quitall";
source = astronvim;
};
# my cusotom astronvim config, astronvim will load it after base config
# https://github.com/AstroNvim/AstroNvim/blob/v3.32.0/lua/astronvim/bootstrap.lua#L15-L16
"astronvim/lua/user" = {
# update AstroNvim
onChange = "${pkgs.neovim}/bin/nvim --headless +quitall";
source = ./astronvim_user;
};
};
nixpkgs.config = {
programs.npm.npmrc = ''
prefix = ''${HOME}/.npm-global
'';
};
programs = {
neovim = {
enable = true;
defaultEditor = true;
viAlias = false;
vimAlias = true;
withPython3 = true;
withNodeJs = true;
extraPackages = [];
# currently we use lazy.nvim as neovim's package manager, so comment this one.
plugins = with pkgs.vimPlugins; [
# search all the plugins using https://search.nixos.org/packages
luasnip
];
};
};
home = {
packages = with pkgs; [
#-- c/c++
cmake
cmake-language-server
gnumake
checkmake
gcc # c/c++ compiler, required by nvim-treesitter!
llvmPackages.clang-unwrapped # c/c++ tools with clang-tools such as clangd
gdb
lldb
#-- python
nodePackages.pyright # python language server
python311Packages.black # python formatter
python311Packages.ruff-lsp
#-- rust
rust-analyzer
cargo # rust package manager
rustfmt
#-- zig
zls
#-- nix
nil
rnix-lsp
# nixd
statix # Lints and suggestions for the nix programming language
deadnix # Find and remove unused code in .nix source files
alejandra # Nix Code Formatter
#-- golang
go
gomodifytags
iferr # generate error handling code for go
impl # generate function implementation for go
gotools # contains tools like: godoc, goimports, etc.
gopls # go language server
delve # go debugger
#-- lua
stylua
lua-language-server
#-- bash
nodePackages.bash-language-server
shellcheck
shfmt
#-- javascript/typescript --#
nodePackages.typescript
nodePackages.typescript-language-server
# HTML/CSS/JSON/ESLint language servers extracted from vscode
nodePackages.vscode-langservers-extracted
nodePackages."@tailwindcss/language-server"
#-- CloudNative
nodePackages.dockerfile-language-server-nodejs
terraform
terraform-ls
jsonnet
jsonnet-language-server
hadolint # Dockerfile linter
#-- Others
taplo # TOML language server / formatter / validator
nodePackages.yaml-language-server
sqlfluff # SQL linter
actionlint # GitHub Actions linter
buf # protoc plugin for linting and formatting
proselint # English prose linter
#-- Misc
tree-sitter # common language parser/highlighter
nodePackages.prettier # common code formatter
marksman # language server for markdown
glow # markdown previewer
#-- Optional Requirements:
gdu # disk usage analyzer, required by AstroNvim
ripgrep # fast search tool, required by AstroNvim's '<leader>fw'(<leader> is space key)
];
};
}
+24
View File
@@ -0,0 +1,24 @@
{...}: {
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 = {
# load the alias file for work
# the file must exist, otherwise nushell will complain about it!
#
# currently, nushell does not support conditional sourcing of files
# https://github.com/nushell/nushell/issues/8214
extraConfig = ''
source /etc/agenix/alias-for-work.nushell
'';
};
}
+16
View File
@@ -0,0 +1,16 @@
{...}: {
programs.bash = {
enable = true;
enableCompletion = true;
bashrcExtra = ''
export PATH="$PATH:$HOME/bin:$HOME/.local/bin:$HOME/go/bin"
'';
shellAliases = {
k = "kubectl";
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()))'";
};
};
}
@@ -0,0 +1,959 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>name</key>
<string>Catppuccin</string>
<key>settings</key>
<array>
<dict>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#cdd6f4</string>
<key>background</key>
<string>#1e1e2e</string>
<key>caret</key>
<string>#bac2de</string>
<key>invisibles</key>
<string>#a6adc8</string>
<key>gutterForeground</key>
<string>#9399b2</string>
<key>gutterForegroundHighlight</key>
<string>#a6e3a1</string>
<key>lineHighlight</key>
<string>#585b70</string>
<key>selection</key>
<string>#6c7086</string>
<key>selectionBorder</key>
<string>#1e1e2e</string>
<key>activeGuide</key>
<string>#fab387</string>
<key>findHighlightForeground</key>
<string>#181825</string>
<key>findHighlight</key>
<string>#f9e2af</string>
<key>bracketsForeground</key>
<string>#9399b2</string>
<key>bracketContentsForeground</key>
<string>#9399b2</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Comment</string>
<key>scope</key>
<string>comment</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6c7086</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String</string>
<key>scope</key>
<string>string</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#a6e3a1</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>String regex</string>
<key>scope</key>
<string>string.regexp</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fab387</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Number</string>
<key>scope</key>
<string>constant.numeric</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fab387</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Boolean</string>
<key>scope</key>
<string>constant.language.boolean</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fab387</string>
<key>fontStyle</key>
<string>bold italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in constant</string>
<key>scope</key>
<string>constant.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#b4befe</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Built-in function</string>
<key>scope</key>
<string>support.function.builtin</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fab387</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>User-defined constant</string>
<key>scope</key>
<string>variable.other.constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fab387</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable</string>
<key>scope</key>
<string>variable</string>
<key>settings</key>
<dict></dict>
</dict>
<dict>
<key>name</key>
<string>Keyword</string>
<key>scope</key>
<string>keyword</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f38ba8</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Conditional/loop</string>
<key>scope</key>
<string>keyword.control.loop, keyword.control.conditional, keyword.control.c++</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#cba6f7</string>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Return</string>
<key>scope</key>
<string>keyword.control.return, keyword.control.flow.return</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f5c2e7</string>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Exception</string>
<key>scope</key>
<string>support.type.exception</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fab387</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Operator</string>
<key>scope</key>
<string>keyword.operator, punctuation.accessor</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#89dceb</string>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Punctuation separator</string>
<key>scope</key>
<string>punctuation.separator</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#94e2d5</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Punctuation terminator</string>
<key>scope</key>
<string>punctuation.terminator</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#94e2d5</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Punctuation bracket</string>
<key>scope</key>
<string>punctuation.section</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#9399b2</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Include</string>
<key>scope</key>
<string>keyword.control.import.include</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#94e2d5</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage</string>
<key>scope</key>
<string>storage</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f38ba8</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage type</string>
<key>scope</key>
<string>storage.type</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f9e2af</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage modifier</string>
<key>scope</key>
<string>storage.modifier</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f38ba8</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage type namespace</string>
<key>scope</key>
<string>entity.name.namespace, meta.path</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f5e0dc</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Storage type class</string>
<key>scope</key>
<string>storage.type.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f5e0dc</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Label</string>
<key>scope</key>
<string>entity.name.label</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#89b4fa</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Keyword class</string>
<key>scope</key>
<string>keyword.declaration.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f38ba8</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Class name</string>
<key>scope</key>
<string>entity.name.class, meta.toc-list.full-identifier</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#89dceb</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Inherited class</string>
<key>scope</key>
<string>entity.other.inherited-class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#89dceb</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function name</string>
<key>scope</key>
<string>entity.name.function, variable.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#89b4fa</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function macro</string>
<key>scope</key>
<string>entity.name.function.preprocessor</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f38ba8</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Macro directive - ifdef</string>
<key>scope</key>
<string>keyword.control.import</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f38ba8</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Constructor</string>
<key>scope</key>
<string>entity.name.function.constructor, entity.name.function.destructor</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#b4befe</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function argument</string>
<key>scope</key>
<string>variable.parameter.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f5e0dc</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Function declaration</string>
<key>scope</key>
<string>keyword.declaration.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#eba0ac</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library function</string>
<key>scope</key>
<string>support.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#89dceb</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library constant</string>
<key>scope</key>
<string>support.constant</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#89b4fa</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library class/type</string>
<key>scope</key>
<string>support.type, support.class</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#89b4fa</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Library variable</string>
<key>scope</key>
<string>support.other.variable</string>
<key>settings</key>
<dict>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable function</string>
<key>scope</key>
<string>variable.function</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#89b4fa</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable parameter</string>
<key>scope</key>
<string>variable.parameter</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f5e0dc</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable other</string>
<key>scope</key>
<string>variable.other</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#cdd6f4</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable field</string>
<key>scope</key>
<string>variable.other.member</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f5e0dc</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Variable language</string>
<key>scope</key>
<string>variable.language</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#94e2d5</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag name</string>
<key>scope</key>
<string>entity.name.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#fab387</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag attribute</string>
<key>scope</key>
<string>entity.other.attribute-name</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#cba6f7</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Tag delimiter</string>
<key>scope</key>
<string>punctuation.definition.tag</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#eba0ac</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markdown URL</string>
<key>scope</key>
<string>markup.underline.link.markdown</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f5e0dc</string>
<key>fontStyle</key>
<string>italic underline</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markdown reference</string>
<key>scope</key>
<string>meta.link.inline.description</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#b4befe</string>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markdown literal</string>
<key>scope</key>
<string>comment.block.markdown, meta.code-fence, markup.raw.code-fence, markup.raw.inline</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#94e2d5</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markdown title</string>
<key>scope</key>
<string>punctuation.definition.heading, entity.name.section</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#89b4fa</string>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markdown emphasis</string>
<key>scope</key>
<string>markup.italic</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#eba0ac</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Markdown strong</string>
<key>scope</key>
<string>markup.bold</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#eba0ac</string>
<key>fontStyle</key>
<string>bold</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Escape</string>
<key>scope</key>
<string>constant.character.escape</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f5c2e7</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Bash built-in function</string>
<key>scope</key>
<string>source.shell.bash meta.function.shell meta.compound.shell meta.function-call.identifier.shell</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f5c2e7</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Bash parameter</string>
<key>scope</key>
<string>variable.language.shell</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f38ba8</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Lua field</string>
<key>scope</key>
<string>source.lua meta.function.lua meta.block.lua meta.mapping.value.lua meta.mapping.key.lua string.unquoted.key.lua</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#b4befe</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Lua constructor</string>
<key>scope</key>
<string>source.lua meta.function.lua meta.block.lua meta.mapping.key.lua string.unquoted.key.lua</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f2cdcd</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Java constant</string>
<key>scope</key>
<string>entity.name.constant.java</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#94e2d5</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS property</string>
<key>scope</key>
<string>support.type.property-name.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f2cdcd</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS constant</string>
<key>scope</key>
<string>support.constant.property-value.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#cdd6f4</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS suffix</string>
<key>scope</key>
<string>constant.numeric.suffix.css, keyword.other.unit.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#94e2d5</string>
<key>fontStyle</key>
<string>italic</string>
</dict>
</dict>
<dict>
<key>name</key>
<string>CSS variable property</string>
<key>scope</key>
<string>variable.other.custom-property.name.css, support.type.custom-property.name.css, punctuation.definition.custom-property.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#94e2d5</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SCSS tag</string>
<key>scope</key>
<string>entity.name.tag.css</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#b4befe</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>SASS variable</string>
<key>scope</key>
<string>variable.other.sass</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#94e2d5</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid</string>
<key>scope</key>
<string>invalid</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#cdd6f4</string>
<key>background</key>
<string>#f38ba8</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Invalid deprecated</string>
<key>scope</key>
<string>invalid.deprecated</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#cdd6f4</string>
<key>background</key>
<string>#cba6f7</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff header</string>
<key>scope</key>
<string>meta.diff, meta.diff.header</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#6c7086</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff deleted</string>
<key>scope</key>
<string>markup.deleted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f38ba8</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff inserted</string>
<key>scope</key>
<string>markup.inserted</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#a6e3a1</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Diff changed</string>
<key>scope</key>
<string>markup.changed</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f9e2af</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
<dict>
<key>name</key>
<string>Message error</string>
<key>scope</key>
<string>message.error</string>
<key>settings</key>
<dict>
<key>foreground</key>
<string>#f38ba8</string>
<key>fontStyle</key>
<string></string>
</dict>
</dict>
</array>
<key>uuid</key>
<string>4d0379b5-ef82-467b-b8b8-365889420646</string>
<key>colorSpaceName</key>
<string>sRGB</string>
<key>semanticClass</key>
<string>theme.dark.Catppuccin</string>
<key>author</key>
<string>BrunDerSchwarzmagier</string>
</dict>
</plist>
+14
View File
@@ -0,0 +1,14 @@
{...}: {
# a cat(1) clone with syntax highlighting and Git integration.
programs.bat = {
enable = true;
config = {
pager = "less -FR";
theme = "Catppuccin-mocha";
};
themes = {
# https://raw.githubusercontent.com/catppuccin/bat/main/Catppuccin-mocha.tmTheme
Catppuccin-mocha = builtins.readFile ./Catppuccin-mocha.tmTheme;
};
};
}
+76
View File
@@ -0,0 +1,76 @@
{pkgs, ...}: {
home.packages = with pkgs; [
neofetch
nnn # terminal file manager
# archives
zip
xz
unzip
p7zip
# utils
ripgrep # recursively searches directories for a regex pattern
jq # A lightweight and flexible command-line JSON processor
yq-go # yaml processer https://github.com/mikefarah/yq
fzf # A command-line fuzzy finder
# networking tools
mtr # A network diagnostic tool
iperf3
dnsutils # `dig` + `nslookup`
ldns # replacement of `dig`, it provide the command `drill`
aria2 # A lightweight multi-protocol & multi-source command-line download utility
socat # replacement of openbsd-netcat
nmap # A utility for network discovery and security auditing
ipcalc # it is a calculator for the IPv4/v6 addresses
# misc
cowsay
file
which
tree
gnused
gnutar
gawk
zstd
caddy
gnupg
# nix related
#
# it provides the command `nom` works just like `nix
# with more details log output
nix-output-monitor
nodePackages.node2nix
# productivity
hugo # static site generator
glow # markdown previewer in terminal
];
programs = {
# modern vim
neovim = {
enable = true;
defaultEditor = true;
vimAlias = true;
};
# A modern replacement for ls
# useful in bash/zsh prompt, not in nushell.
exa = {
enable = true;
enableAliases = true;
git = true;
icons = true;
};
# skim provides a single executable: sk.
# Basically anywhere you would want to use grep, try sk instead.
skim = {
enable = true;
enableBashIntegration = true;
};
};
}
@@ -1,13 +1,13 @@
{config, pkgs, ...}: {...}: {
{
imports = [ imports = [
./bat
./nushell ./nushell
./tmux
./zellij
./bash.nix
./core.nix ./core.nix
./development.nix
./git.nix ./git.nix
./media.nix
./starship.nix ./starship.nix
]; ];
} }
@@ -2,6 +2,9 @@
config, config,
lib, lib,
pkgs, pkgs,
userfullname,
useremail,
... ...
}: { }: {
# `programs.git` will generate the config file: ~/.config/git/config # `programs.git` will generate the config file: ~/.config/git/config
@@ -16,8 +19,8 @@
enable = true; enable = true;
lfs.enable = true; lfs.enable = true;
userName = "Ryan Yin"; userName = userfullname;
userEmail = "xiaoyin_c@qq.com"; userEmail = useremail;
includes = [ includes = [
{ {
@@ -28,9 +31,9 @@
]; ];
extraConfig = { extraConfig = {
pull = { init.defaultBranch = "main";
rebase = true; push.autoSetupRemote = true;
}; pull.rebase = true;
# replace https with ssh # replace https with ssh
url = { url = {
@@ -57,5 +60,22 @@
features = "side-by-side"; features = "side-by-side";
}; };
}; };
aliases = {
# common aliases
br = "branch";
co = "checkout";
st = "status";
ls = "log --pretty=format:\"%C(yellow)%h%Cred%d\\\\ %Creset%s%Cblue\\\\ [%cn]\" --decorate";
ll = "log --pretty=format:\"%C(yellow)%h%Cred%d\\\\ %Creset%s%Cblue\\\\ [%cn]\" --decorate --numstat";
cm = "commit -m";
ca = "commit -am";
dc = "diff --cached";
amend = "commit --amend -m";
# aliases for submodule
update = "submodule update --init --recursive";
foreach = "submodule foreach";
};
}; };
} }
+50
View File
@@ -0,0 +1,50 @@
# Nushell Config File
#
# version = 0.81.1
# The default config record. This is where much of your global configuration is setup.
let-env config = {
# true or false to enable or disable the welcome banner at startup
show_banner: false
table: {
mode: rounded # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other
index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column
show_empty: true # show 'empty list' and 'empty record' placeholders for command output
trim: {
methodology: wrapping # wrapping or truncating
wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology
truncating_suffix: "..." # A suffix used by the 'truncating' methodology
}
}
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
use_ansi_coloring: true
bracketed_paste: true # enable bracketed paste, currently useless on windows
edit_mode: emacs # emacs, vi
shell_integration: true # enables terminal markers and a workaround to arrow keys stop working issue
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.
}
+19
View File
@@ -0,0 +1,19 @@
{...}: {
programs.nushell = {
enable = true;
configFile.source = ./config.nu;
# home-manager will merge the cotent in `environmentVariables` with the `envFile.source`
# but basically, I set all environment variables via the shell-independent way, so I don't need to use those two options
#
# envFile.source = ./env.nu;
# environmentVariables = { FOO="bar"; };
shellAliases = {
k = "kubectl";
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()))'";
};
};
}
+25
View File
@@ -0,0 +1,25 @@
{...}: {
programs.starship = {
enable = true;
enableBashIntegration = true;
enableZshIntegration = true;
enableNushellIntegration = true;
settings = {
character = {
success_symbol = "[](bold green)";
error_symbol = "[](bold red)";
};
aws = {
symbol = "🅰 ";
};
gcloud = {
# do not show the account/project's info
# to avoid the leak of sensitive information when sharing the terminal
format = "on [$symbol$active(\($region\))]($style) ";
symbol = "🅶 ";
};
};
};
}
+13
View File
@@ -0,0 +1,13 @@
{pkgs, ...}: let
buildTmuxPlugin = pkgs.tmuxPlugins.mkTmuxPlugin;
in {
draculaTheme = buildTmuxPlugin {
pluginName = "dracula";
version = "v2.2.0";
src = builtins.fetchTarball {
name = "dracula-tmux-v2.2.0";
url = "https://github.com/dracula/tmux/archive/refs/tags/v2.2.0.tar.gz";
sha256 = "sha256:0v2k994yy4xx2iw8qxg7qphw46gq2qmg496i3a3h9b6jgwxqm7zn";
};
};
}
+64
View File
@@ -0,0 +1,64 @@
{
config,
pkgs,
...
}: let
plugins = pkgs.tmuxPlugins // pkgs.callPackage ./custom-plugins.nix {};
in {
programs.tmux = {
enable = true;
shell = "${pkgs.nushell}/bin/nu";
# Resize the window to the size of the smallest session for which it is the current window.
#
aggressiveResize = true;
# https://github.com/tmux-plugins/tmux-sensible
# tmux-sensible overwrites default tmux shortcuts, makes them more sane.
sensibleOnTop = true;
# extraConfig = builtins.readFile ./tmux.conf;
# keyMode = "vi"; # default is emacs
baseIndex = 1; # start index from 1
escapeTime = 0; # do not wait for escape key
terminal = "xterm-256color";
plugins = with plugins; [
draculaTheme # theme
{
# https://github.com/tmux-plugins/tmux-continuum
# Continuous saving of tmux environment. Automatic restore when tmux is started.
plugin = continuum;
extraConfig = ''
set -g @continuum-save-interval '15'
# Option to display current status of tmux continuum in tmux status line.
set -g status-right 'Continuum status: #{continuum_status}'
'';
}
{
# https://github.com/tmux-plugins/tmux-resurrect
# Manually persists tmux environment across system restarts.
# prefix + Ctrl-s - save
# prefix + Ctrl-r - restore
#
plugin = resurrect;
# Restore Neovim sessions
extraConfig = "set -g @resurrect-strategy-nvim 'session'";
}
{
# https://github.com/tmux-plugins/tmux-yank
# Enables copying to system clipboard.
plugin = yank;
}
# set -g @plugin 'tmux-plugins/tmux-cpu'
{
plugin = cpu;
extraConfig = ''
set -g status-right '#{cpu_bg_color} CPU: #{cpu_icon} #{cpu_percentage} | %a %h-%d %H:%M '
'';
}
];
};
}
+355
View File
@@ -0,0 +1,355 @@
// If you'd like to override the default keybindings completely, be sure to change "keybinds" to "keybinds clear-defaults=true"
keybinds {
normal {
// uncomment this and adjust key if using copy_on_select=false
// bind "Alt c" { Copy; }
}
locked {
bind "Ctrl g" { SwitchToMode "Normal"; }
}
resize {
bind "Ctrl n" { SwitchToMode "Normal"; }
bind "h" "Left" { Resize "Increase Left"; }
bind "j" "Down" { Resize "Increase Down"; }
bind "k" "Up" { Resize "Increase Up"; }
bind "l" "Right" { Resize "Increase Right"; }
bind "H" { Resize "Decrease Left"; }
bind "J" { Resize "Decrease Down"; }
bind "K" { Resize "Decrease Up"; }
bind "L" { Resize "Decrease Right"; }
bind "=" "+" { Resize "Increase"; }
bind "-" { Resize "Decrease"; }
}
pane {
bind "Ctrl p" { SwitchToMode "Normal"; }
bind "h" "Left" { MoveFocus "Left"; }
bind "l" "Right" { MoveFocus "Right"; }
bind "j" "Down" { MoveFocus "Down"; }
bind "k" "Up" { MoveFocus "Up"; }
bind "p" { SwitchFocus; }
bind "n" { NewPane; SwitchToMode "Normal"; }
bind "d" { NewPane "Down"; SwitchToMode "Normal"; }
bind "r" { NewPane "Right"; SwitchToMode "Normal"; }
bind "x" { CloseFocus; SwitchToMode "Normal"; }
bind "f" { ToggleFocusFullscreen; SwitchToMode "Normal"; }
bind "z" { TogglePaneFrames; SwitchToMode "Normal"; }
bind "w" { ToggleFloatingPanes; SwitchToMode "Normal"; }
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0;}
}
move {
bind "Ctrl h" { SwitchToMode "Normal"; }
bind "n" "Tab" { MovePane; }
bind "p" { MovePaneBackwards; }
bind "h" "Left" { MovePane "Left"; }
bind "j" "Down" { MovePane "Down"; }
bind "k" "Up" { MovePane "Up"; }
bind "l" "Right" { MovePane "Right"; }
}
tab {
bind "Ctrl t" { SwitchToMode "Normal"; }
bind "r" { SwitchToMode "RenameTab"; TabNameInput 0; }
bind "h" "Left" "Up" "k" { GoToPreviousTab; }
bind "l" "Right" "Down" "j" { GoToNextTab; }
bind "n" { NewTab; SwitchToMode "Normal"; }
bind "x" { CloseTab; SwitchToMode "Normal"; }
bind "s" { ToggleActiveSyncTab; SwitchToMode "Normal"; }
bind "1" { GoToTab 1; SwitchToMode "Normal"; }
bind "2" { GoToTab 2; SwitchToMode "Normal"; }
bind "3" { GoToTab 3; SwitchToMode "Normal"; }
bind "4" { GoToTab 4; SwitchToMode "Normal"; }
bind "5" { GoToTab 5; SwitchToMode "Normal"; }
bind "6" { GoToTab 6; SwitchToMode "Normal"; }
bind "7" { GoToTab 7; SwitchToMode "Normal"; }
bind "8" { GoToTab 8; SwitchToMode "Normal"; }
bind "9" { GoToTab 9; SwitchToMode "Normal"; }
bind "Tab" { ToggleTab; }
}
scroll {
bind "Ctrl s" { SwitchToMode "Normal"; }
bind "e" { EditScrollback; SwitchToMode "Normal"; }
bind "s" { SwitchToMode "EnterSearch"; SearchInput 0; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "Normal"; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
// uncomment this and adjust key if using copy_on_select=false
// bind "Alt c" { Copy; }
}
search {
bind "Ctrl s" { SwitchToMode "Normal"; }
bind "Ctrl c" { ScrollToBottom; SwitchToMode "Normal"; }
bind "j" "Down" { ScrollDown; }
bind "k" "Up" { ScrollUp; }
bind "Ctrl f" "PageDown" "Right" "l" { PageScrollDown; }
bind "Ctrl b" "PageUp" "Left" "h" { PageScrollUp; }
bind "d" { HalfPageScrollDown; }
bind "u" { HalfPageScrollUp; }
bind "n" { Search "down"; }
bind "p" { Search "up"; }
bind "c" { SearchToggleOption "CaseSensitivity"; }
bind "w" { SearchToggleOption "Wrap"; }
bind "o" { SearchToggleOption "WholeWord"; }
}
entersearch {
bind "Ctrl c" "Esc" { SwitchToMode "Scroll"; }
bind "Enter" { SwitchToMode "Search"; }
}
renametab {
bind "Ctrl c" { SwitchToMode "Normal"; }
bind "Esc" { UndoRenameTab; SwitchToMode "Tab"; }
}
renamepane {
bind "Ctrl c" { SwitchToMode "Normal"; }
bind "Esc" { UndoRenamePane; SwitchToMode "Pane"; }
}
session {
bind "Ctrl o" { SwitchToMode "Normal"; }
bind "Ctrl s" { SwitchToMode "Scroll"; }
bind "d" { Detach; }
}
tmux {
bind "[" { SwitchToMode "Scroll"; }
bind "Ctrl b" { Write 2; SwitchToMode "Normal"; }
bind "\"" { NewPane "Down"; SwitchToMode "Normal"; }
bind "%" { NewPane "Right"; SwitchToMode "Normal"; }
bind "z" { ToggleFocusFullscreen; SwitchToMode "Normal"; }
bind "c" { NewTab; SwitchToMode "Normal"; }
bind "," { SwitchToMode "RenameTab"; }
bind "p" { GoToPreviousTab; SwitchToMode "Normal"; }
bind "n" { GoToNextTab; SwitchToMode "Normal"; }
bind "Left" { MoveFocus "Left"; SwitchToMode "Normal"; }
bind "Right" { MoveFocus "Right"; SwitchToMode "Normal"; }
bind "Down" { MoveFocus "Down"; SwitchToMode "Normal"; }
bind "Up" { MoveFocus "Up"; SwitchToMode "Normal"; }
bind "h" { MoveFocus "Left"; SwitchToMode "Normal"; }
bind "l" { MoveFocus "Right"; SwitchToMode "Normal"; }
bind "j" { MoveFocus "Down"; SwitchToMode "Normal"; }
bind "k" { MoveFocus "Up"; SwitchToMode "Normal"; }
bind "o" { FocusNextPane; }
bind "d" { Detach; }
bind "Space" { NextSwapLayout; }
bind "x" { CloseFocus; SwitchToMode "Normal"; }
}
shared_except "locked" {
bind "Ctrl g" { SwitchToMode "Locked"; }
bind "Ctrl q" { Quit; }
bind "Alt n" { NewPane; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; }
bind "Alt k" "Alt Up" { MoveFocus "Up"; }
bind "Alt =" "Alt +" { Resize "Increase"; }
bind "Alt -" { Resize "Decrease"; }
bind "Alt [" { PreviousSwapLayout; }
bind "Alt ]" { NextSwapLayout; }
}
shared_except "normal" "locked" {
bind "Enter" "Esc" { SwitchToMode "Normal"; }
}
shared_except "pane" "locked" {
bind "Ctrl p" { SwitchToMode "Pane"; }
}
shared_except "resize" "locked" {
bind "Ctrl n" { SwitchToMode "Resize"; }
}
shared_except "scroll" "locked" {
bind "Ctrl s" { SwitchToMode "Scroll"; }
}
shared_except "session" "locked" {
bind "Ctrl o" { SwitchToMode "Session"; }
}
shared_except "tab" "locked" {
bind "Ctrl t" { SwitchToMode "Tab"; }
}
shared_except "move" "locked" {
bind "Ctrl h" { SwitchToMode "Move"; }
}
shared_except "tmux" "locked" {
bind "Ctrl b" { SwitchToMode "Tmux"; }
}
}
plugins {
tab-bar { path "tab-bar"; }
status-bar { path "status-bar"; }
strider { path "strider"; }
compact-bar { path "compact-bar"; }
}
// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
// eg. when terminal window with an active zellij session is closed
// Options:
// - detach (Default)
// - quit
//
// on_force_close "quit"
// Send a request for a simplified ui (without arrow fonts) to plugins
// Options:
// - true
// - false (Default)
//
// simplified_ui true
// Choose the path to the default shell that zellij will use for opening new panes
// Default: $SHELL
// Change to nushell
//
default_shell "nu"
// Toggle between having pane frames around the panes
// Options:
// - true (default)
// - false
//
// pane_frames true
// Toggle between having Zellij lay out panes according to a predefined set of layouts whenever possible
// Options:
// - true (default)
// - false
//
// auto_layout true
// Define color themes for Zellij
// 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
//
themes {
// https://github.com/zellij-org/zellij/blob/main/zellij-utils/assets/themes/catppuccin.kdl
catppuccin-latte {
bg "#acb0be" // Surface2
fg "#acb0be" // Surface2
red "#d20f39"
green "#40a02b"
blue "#1e66f5"
yellow "#df8e1d"
magenta "#ea76cb" // Pink
orange "#fe640b" // Peach
cyan "#04a5e5" // Sky
black "#dce0e8" // Crust
white "#4c4f69" // Text
}
catppuccin-frappe {
bg "#626880" // Surface2
fg "#c6d0f5"
red "#e78284"
green "#a6d189"
blue "#8caaee"
yellow "#e5c890"
magenta "#f4b8e4" // Pink
orange "#ef9f76" // Peach
cyan "#99d1db" // Sky
black "#292c3c" // Mantle
white "#c6d0f5"
}
catppuccin-macchiato {
bg "#5b6078" // Surface2
fg "#cad3f5"
red "#ed8796"
green "#a6da95"
blue "#8aadf4"
yellow "#eed49f"
magenta "#f5bde6" // Pink
orange "#f5a97f" // Peach
cyan "#91d7e3" // Sky
black "#1e2030" // Mantle
white "#cad3f5"
}
catppuccin-mocha {
bg "#585b70" // Surface2
fg "#cdd6f4"
red "#f38ba8"
green "#a6e3a1"
blue "#89b4fa"
yellow "#f9e2af"
magenta "#f5c2e7" // Pink
orange "#fab387" // Peach
cyan "#89dceb" // Sky
black "#181825" // Mantle
white "#cdd6f4"
}
}
// Choose the theme that is specified in the themes section.
// Default: default
//
theme "catppuccin-mocha"
// The name of the default layout to load on startup
// Default: "default"
//
// default_layout "compact"
// Choose the mode that zellij uses when starting up.
// Default: normal
//
// default_mode "locked"
// Toggle enabling the mouse mode.
// On certain configurations, or terminals this could
// potentially interfere with copying text.
// Options:
// - true (default)
// - false
//
// mouse_mode false
// Configure the scroll back buffer size
// 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.
// Valid values: positive integers
// Default value: 10000
//
// scroll_buffer_size 10000
// Provide a command to execute when copying text. The text will be piped to
// the stdin of the program to perform the copy. This can be used with
// terminal emulators which do not support the OSC 52 ANSI control sequence
// that will be used by default if this option is not set.
// Examples:
//
// copy_command "xclip -selection clipboard" // x11
// copy_command "wl-copy" // wayland
// copy_command "pbcopy" // osx
// Choose the destination for copied text
// Allows using the primary selection buffer (on x11/wayland) instead of the system clipboard.
// Does not apply when using copy_command.
// Options:
// - system (default)
// - primary
//
// copy_clipboard "primary"
// Enable or disable automatic copy (and clear) of selection when releasing mouse
// Default: true
//
// copy_on_select false
// Path to the default editor to use to edit pane scrollbuffer
// Default: $EDITOR or $VISUAL
//
// scrollback_editor "/usr/bin/vim"
// When attaching to an existing session with other users,
// should the session be mirrored (true)
// or should each user have their own cursor (false)
// Default: false
//
// mirror_session true
// The folder in which Zellij will look for layouts
//
// layout_dir "/path/to/my/layout_dir"
// The folder in which Zellij will look for themes
//
// theme_dir "/path/to/my/theme_dir"
+7
View File
@@ -0,0 +1,7 @@
{...}: {
programs.zellij = {
enable = true;
};
home.file.".config/zellij/config.kdl".source = ./config.kdl;
}
-98
View File
@@ -1,98 +0,0 @@
{config, pkgs, ...}:
{
home.packages = with pkgs; [
neofetch
nnn # terminal file manager
# archives
zip
xz
unzip
p7zip
# utils
ripgrep # recursively searches directories for a regex pattern
jq # A lightweight and flexible command-line JSON processor
yq-go # yaml processer https://github.com/mikefarah/yq
exa # A modern replacement for ls
fzf # A command-line fuzzy finder
# networking tools
mtr # A network diagnostic tool
iperf3
ldns # replacement of dig, it provide the command `drill`
aria2 # A lightweight multi-protocol & multi-source command-line download utility
socat # replacement of openbsd-netcat
nmap # A utility for network discovery and security auditing
# misc
cowsay
file
which
tree
gnused
gnutar
gawk
zstd
caddy
gnupg
# nix related
#
# it provides the command `nom` works just like `nix
# with more details log output
nix-output-monitor
# productivity
hugo # static site generator
glow # markdown previewer in terminal
];
programs = {
# A terminal multiplexer
tmux = {
enable = true;
};
# a cat(1) clone with syntax highlighting and Git integration.
bat = {
enable = true;
config = {
pager = "less -FR";
theme = "Catppuccin-mocha";
};
themes = {
Catppuccin-mocha = builtins.readFile (pkgs.fetchurl {
url = "https://raw.githubusercontent.com/catppuccin/bat/main/Catppuccin-mocha.tmTheme";
hash = "sha256-qMQNJGZImmjrqzy7IiEkY5IhvPAMZpq0W6skLLsng/w=";
});
};
};
# skim provides a single executable: sk.
# Basically anywhere you would want to use grep, try sk instead.
skim = {
enable = true;
enableBashIntegration = true;
};
};
programs.bash = {
enable = true;
enableCompletion = true;
bashrcExtra = ''
export PATH="$PATH:$HOME/bin:$HOME/.local/bin:$HOME/go/bin"
'';
};
home.shellAliases = {
k = "kubectl";
vim = "nvim";
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()))'";
httpproxy = "export https_proxy=http://127.0.0.1:7890; export http_proxy=http://127.0.0.1:7890;";
};
}
-117
View File
@@ -1,117 +0,0 @@
{config, pkgs, nil, ...}:
{
home.packages = with pkgs; [
nil.packages."${pkgs.system}".default # nix language server
# IDE
jetbrains.pycharm-community
jetbrains.idea-community
# cloud native
skopeo
docker-compose
dive # explore docker layers
kubectl
kubernetes-helm
terraform
# terraformer # generate terraform configs from existing cloud resources
pulumi
pulumictl
k9s
# istioctl
# cloud provider
awscli
aws-iam-authenticator
eksctl
# DO NOT install build tools for C/C++, set it per project by devShell instead
gnumake # used by this repo, to simplify the deployment
clang-tools
clang-analyzer
# lldb
# cmake
# autoconf
# automake
# bison
# cppcheck
# fakeroot
# flex
# gettext
# groff
# libtool
# m4
# patch
# pkgconf
# texinfo
# binutils
# Golang
delve
go
go-outline
go-tools
go2nix
gomodifytags
gopls
gotests
impl
# Rust
rustup
# python
(python310.withPackages(ps: with ps; [
ipython
pandas
requests
pyquery
]))
# db related
dbeaver
mycli
pgcli
mongosh
sqlite
# embedded development
minicom
# other languages
# julia
zig
# elixir
# solidity
# java
# adoptopenjdk-openj9-bin-17
# other tools
k6 # load testing tool
mitmproxy # http/https proxy tool
protobuf # protocol buffer compiler
];
programs = {
# modern vim
neovim = {
enable = true;
extraConfig = ''
set number relativenumber
'';
};
direnv = {
enable = true;
nix-direnv.enable = true;
enableZshIntegration = true;
};
};
# GitHub CLI tool
programs.gh = {
enable = true;
};
}
-7
View File
@@ -1,7 +0,0 @@
{
programs.nushell = {
enable = true;
# configFile.source = ./config.nu;
# envFile.source = ./env.nu;
};
}
-15
View File
@@ -1,15 +0,0 @@
{config, ...}: {
programs.starship = {
enable = true;
enableBashIntegration = true;
enableNushellIntegration = true;
settings = {
character = {
success_symbol = "[](bold green)";
error_symbol = "[](bold red)";
};
};
};
}
-730
View File
@@ -1,730 +0,0 @@
# Configuration for Alacritty, the GPU enhanced terminal emulator.
# Import additional configuration files
#
# Imports are loaded in order, skipping all missing files, with the importing
# file being loaded last. If a field is already present in a previous import, it
# will be replaced.
#
# All imports must either be absolute paths starting with `/`, or paths relative
# to the user's home directory starting with `~/`.
import:
# all alacritty themes can be found at
# https://github.com/alacritty/alacritty-theme
- ~/.config/alacritty/theme_github_dark.yml
# Any items in the `env` entry below will be added as
# environment variables. Some entries may override variables
# set by alacritty itself.
#env:
# TERM variable
#
# This value is used to set the `$TERM` environment variable for
# each instance of Alacritty. If it is not present, alacritty will
# check the local terminfo database and use `alacritty` if it is
# available, otherwise `xterm-256color` is used.
#TERM: alacritty
window:
# Window dimensions (changes require restart)
#
# Number of lines/columns (not pixels) in the terminal. Both lines and columns
# must be non-zero for this to take effect. The number of columns must be at
# least `2`, while using a value of `0` for columns and lines will fall back
# to the window manager's recommended size
#dimensions:
# columns: 0
# lines: 0
# Window position (changes require restart)
#
# Specified in number of pixels.
# If the position is not set, the window manager will handle the placement.
#position:
# x: 0
# y: 0
# Window padding (changes require restart)
#
# Blank space added around the window in pixels. This padding is scaled
# by DPI and the specified value is always added at both opposing sides.
padding:
x: 5
y: 5
# Spread additional padding evenly around the terminal content.
dynamic_padding: true
# Window decorations
#
# Values for `decorations`:
# - full: Borders and title bar
# - none: Neither borders nor title bar
#
# Values for `decorations` (macOS only):
# - transparent: Title bar, transparent background and title bar buttons
# - buttonless: Title bar, transparent background and no title bar buttons
#decorations: full
# Background opacity
#
# Window opacity as a floating point number from `0.0` to `1.0`.
# The value `0.0` is completely transparent and `1.0` is opaque.
opacity: 0.98
# Startup Mode (changes require restart)
#
# Values for `startup_mode`:
# - Windowed
# - Maximized
# - Fullscreen
#
# Values for `startup_mode` (macOS only):
# - SimpleFullscreen
startup_mode: Windowed
# Window title
title: Alacritty
# Allow terminal applications to change Alacritty's window title.
dynamic_title: true
# Window class (Linux/BSD only):
#class:
# Application instance name
#instance: Alacritty
# General application class
#general: Alacritty
# Decorations theme variant
#
# Override the variant of the System theme/GTK theme/Wayland client side
# decorations. Commonly supported values are `Dark`, `Light`, and `None` for
# auto pick-up. Set this to `None` to use the default theme variant.
#decorations_theme_variant: None
# Resize increments
#
# Prefer resizing window by discrete steps equal to cell dimensions.
#resize_increments: false
# Make `Option` key behave as `Alt` (macOS only):
# - OnlyLeft
# - OnlyRight
# - Both
# - None (default)
#option_as_alt: None
scrolling:
# Maximum number of lines in the scrollback buffer.
# Specifying '0' will disable scrolling.
history: 10000
# Scrolling distance multiplier.
#multiplier: 3
# Font configuration
font:
# Normal (roman) font face
bold:
family: JetBrainsMono Nerd Font
italic:
family: JetBrainsMono Nerd Font
normal:
family: JetBrainsMono Nerd Font
bold_italic:
# Font family
#
# If the bold italic family is not specified, it will fall back to the
# value specified for the normal font.
family: JetBrainsMono Nerd Font
# Point size
size: 14
# Offset is the extra space around each character. `offset.y` can be thought
# of as modifying the line spacing, and `offset.x` as modifying the letter
# spacing.
#offset:
# x: 0
# y: 0
# Glyph offset determines the locations of the glyphs within their cells with
# the default being at the bottom. Increasing `x` moves the glyph to the
# right, increasing `y` moves the glyph upward.
#glyph_offset:
# x: 0
# y: 0
# Use built-in font for box drawing characters.
#
# If `true`, Alacritty will use a custom built-in font for box drawing
# characters (Unicode points 2500 - 259f).
#
#builtin_box_drawing: true
# If `true`, bold text is drawn using the bright color variants.
#draw_bold_text_with_bright_colors: false
# Bell
#
# The bell is rung every time the BEL control character is received.
#bell:
# Visual Bell Animation
#
# Animation effect for flashing the screen when the visual bell is rung.
#
# Values for `animation`:
# - Ease
# - EaseOut
# - EaseOutSine
# - EaseOutQuad
# - EaseOutCubic
# - EaseOutQuart
# - EaseOutQuint
# - EaseOutExpo
# - EaseOutCirc
# - Linear
#animation: EaseOutExpo
# Duration of the visual bell flash in milliseconds. A `duration` of `0` will
# disable the visual bell animation.
#duration: 0
# Visual bell animation color.
#color: '#ffffff'
# Bell Command
#
# This program is executed whenever the bell is rung.
#
# When set to `command: None`, no command will be executed.
#
# Example:
# command:
# program: notify-send
# args: ["Hello, World!"]
#
#command: None
#selection:
# This string contains all characters that are used as separators for
# "semantic words" in Alacritty.
#semantic_escape_chars: ",│`|:\"' ()[]{}<>\t"
# When set to `true`, selected text will be copied to the primary clipboard.
#save_to_clipboard: false
#cursor:
# Cursor style
#style:
# Cursor shape
#
# Values for `shape`:
# - ▇ Block
# - _ Underline
# - | Beam
#shape: Block
# Cursor blinking state
#
# Values for `blinking`:
# - Never: Prevent the cursor from ever blinking
# - Off: Disable blinking by default
# - On: Enable blinking by default
# - Always: Force the cursor to always blink
#blinking: Off
# Vi mode cursor style
#
# If the vi mode cursor style is `None` or not specified, it will fall back to
# the style of the active value of the normal cursor.
#
# See `cursor.style` for available options.
#vi_mode_style: None
# Cursor blinking interval in milliseconds.
#blink_interval: 750
# Time after which cursor stops blinking, in seconds.
#
# Specifying '0' will disable timeout for blinking.
#blink_timeout: 5
# If this is `true`, the cursor will be rendered as a hollow box when the
# window is not focused.
#unfocused_hollow: true
# Thickness of the cursor relative to the cell width as floating point number
# from `0.0` to `1.0`.
#thickness: 0.15
# Live config reload (changes require restart)
live_config_reload: true
# Shell
#
# You can set `shell.program` to the path of your favorite shell, e.g.
# `/bin/fish`. Entries in `shell.args` are passed unmodified as arguments to the
# shell.
#
# Default:
# - (Linux/BSD/macOS) `$SHELL` or the user's login shell, if `$SHELL` is unset
# - (Windows) powershell
# shell:
# program: /bin/bash
# args:
# - --login
# Startup directory
#
# Directory the shell is started in. If this is unset, or `None`, the working
# directory of the parent process will be used.
#working_directory: None
# Offer IPC using `alacritty msg` (unix only)
#ipc_socket: true
#mouse:
# Click settings
#
# The `double_click` and `triple_click` settings control the time
# alacritty should wait for accepting multiple clicks as one double
# or triple click.
#double_click: { threshold: 300 }
#triple_click: { threshold: 300 }
# If this is `true`, the cursor is temporarily hidden when typing.
#hide_when_typing: false
# Hints
#
# Terminal hints can be used to find text or hyperlink in the visible part of
# the terminal and pipe it to other applications.
#hints:
# Keys used for the hint labels.
#alphabet: "jfkdls;ahgurieowpq"
# List with all available hints
#
# Each hint must have any of `regex` or `hyperlinks` field and either an
# `action` or a `command` field. The fields `mouse`, `binding` and
# `post_processing` are optional.
#
# The `hyperlinks` option will cause OSC 8 escape sequence hyperlinks to be
# highlighted.
#
# The fields `command`, `binding.key`, `binding.mods`, `binding.mode` and
# `mouse.mods` accept the same values as they do in the `key_bindings` section.
#
# The `mouse.enabled` field controls if the hint should be underlined while
# the mouse with all `mouse.mods` keys held or the vi mode cursor is above it.
#
# If the `post_processing` field is set to `true`, heuristics will be used to
# shorten the match if there are characters likely not to be part of the hint
# (e.g. a trailing `.`). This is most useful for URIs and applies only to
# `regex` matches.
#
# Values for `action`:
# - Copy
# Copy the hint's text to the clipboard.
# - Paste
# Paste the hint's text to the terminal or search.
# - Select
# Select the hint's text.
# - MoveViModeCursor
# Move the vi mode cursor to the beginning of the hint.
#enabled:
# - regex: "(ipfs:|ipns:|magnet:|mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)\
# [^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩`]+"
# hyperlinks: true
# command: xdg-open
# post_processing: true
# mouse:
# enabled: true
# mods: None
# binding:
# key: U
# mods: Control|Shift
# Mouse bindings
#
# Mouse bindings are specified as a list of objects, much like the key
# bindings further below.
#
# To trigger mouse bindings when an application running within Alacritty
# captures the mouse, the `Shift` modifier is automatically added as a
# requirement.
#
# Each mouse binding will specify a:
#
# - `mouse`:
#
# - Middle
# - Left
# - Right
# - Numeric identifier such as `5`
#
# - `action` (see key bindings for actions not exclusive to mouse mode)
#
# - Mouse exclusive actions:
#
# - ExpandSelection
# Expand the selection to the current mouse cursor location.
#
# And optionally:
#
# - `mods` (see key bindings)
#mouse_bindings:
# - { mouse: Right, action: ExpandSelection }
# - { mouse: Right, mods: Control, action: ExpandSelection }
# - { mouse: Middle, mode: ~Vi, action: PasteSelection }
# Key bindings
#
# Key bindings are specified as a list of objects. For example, this is the
# default paste binding:
#
# `- { key: V, mods: Control|Shift, action: Paste }`
#
# Each key binding will specify a:
#
# - `key`: Identifier of the key pressed
#
# - A-Z
# - F1-F24
# - Key0-Key9
#
# A full list with available key codes can be found here:
# https://docs.rs/winit/*/winit/event/enum.VirtualKeyCode.html#variants
#
# Instead of using the name of the keys, the `key` field also supports using
# the scancode of the desired key. Scancodes have to be specified as a
# decimal number. This command will allow you to display the hex scancodes
# for certain keys:
#
# `showkey --scancodes`.
#
# Then exactly one of:
#
# - `chars`: Send a byte sequence to the running application
#
# The `chars` field writes the specified string to the terminal. This makes
# it possible to pass escape sequences. To find escape codes for bindings
# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside
# of tmux. Note that applications use terminfo to map escape sequences back
# to keys. It is therefore required to update the terminfo when changing an
# escape sequence.
#
# - `action`: Execute a predefined action
#
# - ToggleViMode
# - SearchForward
# Start searching toward the right of the search origin.
# - SearchBackward
# Start searching toward the left of the search origin.
# - Copy
# - Paste
# - IncreaseFontSize
# - DecreaseFontSize
# - ResetFontSize
# - ScrollPageUp
# - ScrollPageDown
# - ScrollHalfPageUp
# - ScrollHalfPageDown
# - ScrollLineUp
# - ScrollLineDown
# - ScrollToTop
# - ScrollToBottom
# - ClearHistory
# Remove the terminal's scrollback history.
# - Hide
# Hide the Alacritty window.
# - Minimize
# Minimize the Alacritty window.
# - Quit
# Quit Alacritty.
# - ToggleFullscreen
# - ToggleMaximized
# - SpawnNewInstance
# Spawn a new instance of Alacritty.
# - CreateNewWindow
# Create a new Alacritty window from the current process.
# - ClearLogNotice
# Clear Alacritty's UI warning and error notice.
# - ClearSelection
# Remove the active selection.
# - ReceiveChar
# - None
#
# - Vi mode exclusive actions:
#
# - Open
# Perform the action of the first matching hint under the vi mode cursor
# with `mouse.enabled` set to `true`.
# - ToggleNormalSelection
# - ToggleLineSelection
# - ToggleBlockSelection
# - ToggleSemanticSelection
# Toggle semantic selection based on `selection.semantic_escape_chars`.
# - CenterAroundViCursor
# Center view around vi mode cursor
#
# - Vi mode exclusive cursor motion actions:
#
# - Up
# One line up.
# - Down
# One line down.
# - Left
# One character left.
# - Right
# One character right.
# - First
# First column, or beginning of the line when already at the first column.
# - Last
# Last column, or beginning of the line when already at the last column.
# - FirstOccupied
# First non-empty cell in this terminal row, or first non-empty cell of
# the line when already at the first cell of the row.
# - High
# Top of the screen.
# - Middle
# Center of the screen.
# - Low
# Bottom of the screen.
# - SemanticLeft
# Start of the previous semantically separated word.
# - SemanticRight
# Start of the next semantically separated word.
# - SemanticLeftEnd
# End of the previous semantically separated word.
# - SemanticRightEnd
# End of the next semantically separated word.
# - WordLeft
# Start of the previous whitespace separated word.
# - WordRight
# Start of the next whitespace separated word.
# - WordLeftEnd
# End of the previous whitespace separated word.
# - WordRightEnd
# End of the next whitespace separated word.
# - Bracket
# Character matching the bracket at the cursor's location.
# - SearchNext
# Beginning of the next match.
# - SearchPrevious
# Beginning of the previous match.
# - SearchStart
# Start of the match to the left of the vi mode cursor.
# - SearchEnd
# End of the match to the right of the vi mode cursor.
#
# - Search mode exclusive actions:
# - SearchFocusNext
# Move the focus to the next search match.
# - SearchFocusPrevious
# Move the focus to the previous search match.
# - SearchConfirm
# - SearchCancel
# - SearchClear
# Reset the search regex.
# - SearchDeleteWord
# Delete the last word in the search regex.
# - SearchHistoryPrevious
# Go to the previous regex in the search history.
# - SearchHistoryNext
# Go to the next regex in the search history.
#
# - macOS exclusive actions:
# - ToggleSimpleFullscreen
# Enter fullscreen without occupying another space.
#
# - Linux/BSD exclusive actions:
#
# - CopySelection
# Copy from the selection buffer.
# - PasteSelection
# Paste from the selection buffer.
#
# - `command`: Fork and execute a specified command plus arguments
#
# The `command` field must be a map containing a `program` string and an
# `args` array of command line parameter strings. For example:
# `{ program: "alacritty", args: ["-e", "vttest"] }`
#
# And optionally:
#
# - `mods`: Key modifiers to filter binding actions
#
# - Command
# - Control
# - Option
# - Super
# - Shift
# - Alt
#
# Multiple `mods` can be combined using `|` like this:
# `mods: Control|Shift`.
# Whitespace and capitalization are relevant and must match the example.
#
# - `mode`: Indicate a binding for only specific terminal reported modes
#
# This is mainly used to send applications the correct escape sequences
# when in different modes.
#
# - AppCursor
# - AppKeypad
# - Search
# - Alt
# - Vi
#
# A `~` operator can be used before a mode to apply the binding whenever
# the mode is *not* active, e.g. `~Alt`.
#
# Bindings are always filled by default, but will be replaced when a new
# binding with the same triggers is defined. To unset a default binding, it can
# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for
# a no-op if you do not wish to receive input characters for that binding.
#
# If the same trigger is assigned to multiple actions, all of them are executed
# in the order they were defined in.
#key_bindings:
#- { key: Paste, action: Paste }
#- { key: Copy, action: Copy }
#- { key: L, mods: Control, action: ClearLogNotice }
#- { key: L, mods: Control, mode: ~Vi|~Search, chars: "\x0c" }
#- { key: PageUp, mods: Shift, mode: ~Alt, action: ScrollPageUp }
#- { key: PageDown, mods: Shift, mode: ~Alt, action: ScrollPageDown }
#- { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop }
#- { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom }
# Vi Mode
#- { key: Space, mods: Shift|Control, mode: ~Search, action: ToggleViMode }
#- { key: Space, mods: Shift|Control, mode: Vi|~Search, action: ScrollToBottom }
#- { key: Escape, mode: Vi|~Search, action: ClearSelection }
#- { key: I, mode: Vi|~Search, action: ToggleViMode }
#- { key: I, mode: Vi|~Search, action: ScrollToBottom }
#- { key: C, mods: Control, mode: Vi|~Search, action: ToggleViMode }
#- { key: Y, mods: Control, mode: Vi|~Search, action: ScrollLineUp }
#- { key: E, mods: Control, mode: Vi|~Search, action: ScrollLineDown }
#- { key: G, mode: Vi|~Search, action: ScrollToTop }
#- { key: G, mods: Shift, mode: Vi|~Search, action: ScrollToBottom }
#- { key: B, mods: Control, mode: Vi|~Search, action: ScrollPageUp }
#- { key: F, mods: Control, mode: Vi|~Search, action: ScrollPageDown }
#- { key: U, mods: Control, mode: Vi|~Search, action: ScrollHalfPageUp }
#- { key: D, mods: Control, mode: Vi|~Search, action: ScrollHalfPageDown }
#- { key: Y, mode: Vi|~Search, action: Copy }
#- { key: Y, mode: Vi|~Search, action: ClearSelection }
#- { key: Copy, mode: Vi|~Search, action: ClearSelection }
#- { key: V, mode: Vi|~Search, action: ToggleNormalSelection }
#- { key: V, mods: Shift, mode: Vi|~Search, action: ToggleLineSelection }
#- { key: V, mods: Control, mode: Vi|~Search, action: ToggleBlockSelection }
#- { key: V, mods: Alt, mode: Vi|~Search, action: ToggleSemanticSelection }
#- { key: Return, mode: Vi|~Search, action: Open }
#- { key: Z, mode: Vi|~Search, action: CenterAroundViCursor }
#- { key: K, mode: Vi|~Search, action: Up }
#- { key: J, mode: Vi|~Search, action: Down }
#- { key: H, mode: Vi|~Search, action: Left }
#- { key: L, mode: Vi|~Search, action: Right }
#- { key: Up, mode: Vi|~Search, action: Up }
#- { key: Down, mode: Vi|~Search, action: Down }
#- { key: Left, mode: Vi|~Search, action: Left }
#- { key: Right, mode: Vi|~Search, action: Right }
#- { key: Key0, mode: Vi|~Search, action: First }
#- { key: Key4, mods: Shift, mode: Vi|~Search, action: Last }
#- { key: Key6, mods: Shift, mode: Vi|~Search, action: FirstOccupied }
#- { key: H, mods: Shift, mode: Vi|~Search, action: High }
#- { key: M, mods: Shift, mode: Vi|~Search, action: Middle }
#- { key: L, mods: Shift, mode: Vi|~Search, action: Low }
#- { key: B, mode: Vi|~Search, action: SemanticLeft }
#- { key: W, mode: Vi|~Search, action: SemanticRight }
#- { key: E, mode: Vi|~Search, action: SemanticRightEnd }
#- { key: B, mods: Shift, mode: Vi|~Search, action: WordLeft }
#- { key: W, mods: Shift, mode: Vi|~Search, action: WordRight }
#- { key: E, mods: Shift, mode: Vi|~Search, action: WordRightEnd }
#- { key: Key5, mods: Shift, mode: Vi|~Search, action: Bracket }
#- { key: Slash, mode: Vi|~Search, action: SearchForward }
#- { key: Slash, mods: Shift, mode: Vi|~Search, action: SearchBackward }
#- { key: N, mode: Vi|~Search, action: SearchNext }
#- { key: N, mods: Shift, mode: Vi|~Search, action: SearchPrevious }
# Search Mode
#- { key: Return, mode: Search|Vi, action: SearchConfirm }
#- { key: Escape, mode: Search, action: SearchCancel }
#- { key: C, mods: Control, mode: Search, action: SearchCancel }
#- { key: U, mods: Control, mode: Search, action: SearchClear }
#- { key: W, mods: Control, mode: Search, action: SearchDeleteWord }
#- { key: P, mods: Control, mode: Search, action: SearchHistoryPrevious }
#- { key: N, mods: Control, mode: Search, action: SearchHistoryNext }
#- { key: Up, mode: Search, action: SearchHistoryPrevious }
#- { key: Down, mode: Search, action: SearchHistoryNext }
#- { key: Return, mode: Search|~Vi, action: SearchFocusNext }
#- { key: Return, mods: Shift, mode: Search|~Vi, action: SearchFocusPrevious }
# (Windows, Linux, and BSD only)
#- { key: V, mods: Control|Shift, mode: ~Vi, action: Paste }
#- { key: C, mods: Control|Shift, action: Copy }
#- { key: F, mods: Control|Shift, mode: ~Search, action: SearchForward }
#- { key: B, mods: Control|Shift, mode: ~Search, action: SearchBackward }
#- { key: C, mods: Control|Shift, mode: Vi|~Search, action: ClearSelection }
#- { key: Insert, mods: Shift, action: PasteSelection }
#- { key: Key0, mods: Control, action: ResetFontSize }
#- { key: Equals, mods: Control, action: IncreaseFontSize }
#- { key: Plus, mods: Control, action: IncreaseFontSize }
#- { key: NumpadAdd, mods: Control, action: IncreaseFontSize }
#- { key: Minus, mods: Control, action: DecreaseFontSize }
#- { key: NumpadSubtract, mods: Control, action: DecreaseFontSize }
# (Windows only)
#- { key: Return, mods: Alt, action: ToggleFullscreen }
# (macOS only)
#- { key: K, mods: Command, mode: ~Vi|~Search, chars: "\x0c" }
#- { key: K, mods: Command, mode: ~Vi|~Search, action: ClearHistory }
#- { key: Key0, mods: Command, action: ResetFontSize }
#- { key: Equals, mods: Command, action: IncreaseFontSize }
#- { key: Plus, mods: Command, action: IncreaseFontSize }
#- { key: NumpadAdd, mods: Command, action: IncreaseFontSize }
#- { key: Minus, mods: Command, action: DecreaseFontSize }
#- { key: NumpadSubtract, mods: Command, action: DecreaseFontSize }
#- { key: V, mods: Command, action: Paste }
#- { key: C, mods: Command, action: Copy }
#- { key: C, mods: Command, mode: Vi|~Search, action: ClearSelection }
#- { key: H, mods: Command, action: Hide }
#- { key: H, mods: Command|Alt, action: HideOtherApplications }
#- { key: M, mods: Command, action: Minimize }
#- { key: Q, mods: Command, action: Quit }
#- { key: W, mods: Command, action: Quit }
#- { key: N, mods: Command, action: CreateNewWindow }
#- { key: F, mods: Command|Control, action: ToggleFullscreen }
#- { key: F, mods: Command, mode: ~Search, action: SearchForward }
#- { key: B, mods: Command, mode: ~Search, action: SearchBackward }
#debug:
# Display the time it takes to redraw each frame.
#render_timer: false
# Keep the log file after quitting Alacritty.
#persistent_logging: false
# Log level
#
# Values for `log_level`:
# - Off
# - Error
# - Warn
# - Info
# - Debug
# - Trace
#log_level: Warn
# Renderer override.
# - glsl3
# - gles2
# - gles2_pure
#renderer: None
# Print all received window events.
#print_events: false
# Highlight window damage information.
#highlight_damage: false
-10
View File
@@ -1,10 +0,0 @@
{ pkgs, ... }:
{
programs.alacritty = {
enable = true;
};
xdg.configFile."alacritty/alacritty.yml".source = ./alacritty.yml;
xdg.configFile."alacritty/theme_github_dark.yml".source = ./theme_github_dark.yml;
}
@@ -1,32 +0,0 @@
# github Alacritty Colors
colors:
# Default colors
primary:
background: '0x24292e'
foreground: '0xd1d5da'
# Normal colors
normal:
black: '0x586069'
red: '0xea4a5a'
green: '0x34d058'
yellow: '0xffea7f'
blue: '0x2188ff'
magenta: '0xb392f0'
cyan: '0x39c5cf'
white: '0xd1d5da'
# Bright colors
bright:
black: '0x959da5'
red: '0xf97583'
green: '0x85e89d'
yellow: '0xffea7f'
blue: '0x79b8ff'
magenta: '0xb392f0'
cyan: '0x56d4dd'
white: '0xfafbfc'
indexed_colors:
- { index: 16, color: '0xd18616' }
- { index: 17, color: '0xf97583' }
+10 -20
View File
@@ -1,23 +1,10 @@
# Install those apps using brew, instead of nix {pkgs, ...}: {
# because they are not available in nixpkgs with the support of darwin ##########################################################################
# ==> Brew Casks #
# jdk-mission-control # MacOS specific home configuration
# anki firefox iina openinterminal-lite #
# insomnia orbstack ##########################################################################
# clashx google-chrome programs.zsh = {
# google-cloud-sdk telegram wireshark
{pkgs, ...}:
{
# MacOS specific configuration
home.packages = with pkgs; [
mpv
discord
];
# stable version of vscode
programs.vscode = {
enable = true; enable = true;
}; };
@@ -32,6 +19,9 @@
# format in details: # format in details:
# https://www.ssh.com/academy/ssh/config # https://www.ssh.com/academy/ssh/config
extraConfig = '' extraConfig = ''
# a private key that is used during authentication will be added to ssh-agent if it is running
AddKeysToAgent yes
Host 192.168.* Host 192.168.*
# allow to securely use local SSH agent to authenticate on the remote machine. # 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` # It has the same effect as adding cli option `ssh -A user@host`
+6 -13
View File
@@ -1,25 +1,18 @@
{ pkgs, ... }: { username, ... }: {
{
imports = [ imports = [
../common/nushell ../base/desktop
../common/core.nix
../common/git.nix
../common/development.nix
../common/media.nix
../common/starship.nix
./alacritty
./core.nix ./core.nix
./nushell.nix
./rime-squirrel.nix
]; ];
# Home Manager needs a bit of information about you and the # Home Manager needs a bit of information about you and the
# paths it should manage. # paths it should manage.
home = { home = {
username = "admin"; username = username;
# set homeDirectory make build fail # set homeDirectory make build fail
homeDirectory = "/Users/admin"; homeDirectory = "/Users/${username}";
# This value determines the Home Manager release that your # This value determines the Home Manager release that your
# configuration is compatible with. This helps avoid breakage # configuration is compatible with. This helps avoid breakage
+18
View File
@@ -0,0 +1,18 @@
{config, ...}: {
# nix-darwin do not set PATH for nushell! so we need to do it manually
# this is a workaround to add nix's PATH to nushell
programs.nushell.extraConfig = ''
let-env PATH = ([
"${config.home.homeDirectory}/bin"
"${config.home.homeDirectory}/.local/bin"
"${config.home.homeDirectory}/go/bin"
"/usr/local/bin"
"${config.home.homeDirectory}/.nix-profile/bin"
"/etc/profiles/per-user/${config.home.username}/bin"
"/run/current-system/sw/bin"
"/nix/var/nix/profiles/default/bin"
($env.PATH | split row (char esep))
] | flatten)
'';
}
+17
View File
@@ -0,0 +1,17 @@
{
lib,
pkgs,
...
}: {
# remove existing rime data (squirrel)
home.activation.removeExistingRimeData = lib.hm.dag.entryBefore ["checkLinkTargets"] ''
rm -rf "~/Library/Rime/build/flypy.prism.bin"
'';
# Squirrel Input Method
home.file."Library/Rime" = {
# my custom squirrel data (flypy input method)
source = "${pkgs.flypy-squirrel}/share/rime-data";
recursive = true;
};
}
+6
View File
@@ -0,0 +1,6 @@
{
imports = [
./shell.nix
./system-tools.nix
];
}
@@ -1,6 +1,4 @@
{config, ...}: {config, ...}: let
let
d = config.xdg.dataHome; d = config.xdg.dataHome;
c = config.xdg.configHome; c = config.xdg.configHome;
cache = config.xdg.cacheHome; cache = config.xdg.cacheHome;
@@ -19,7 +17,6 @@ in rec {
# set default applications # set default applications
BROWSER = "firefox"; BROWSER = "firefox";
TERMINAL = "alacritty";
TERM = "xterm-256color"; TERM = "xterm-256color";
# enable scrolling in git diff # enable scrolling in git diff
+42
View File
@@ -0,0 +1,42 @@
{pkgs, ...}: {
# Linux Only Packages, not available on Darwin
home.packages = with pkgs; [
btop # replacement of htop/nmon
htop
nmon
iotop
iftop
# misc
libnotify
wireguard-tools # manage wireguard vpn manually, via wg-quick
# need to run `conda-install` before using it
# need to run `conda-shell` before using command `conda`
# conda is not available for MacOS
conda
# system call monitoring
strace # system call monitoring
ltrace # library call monitoring
lsof # list open files
# system tools
sysstat
lm_sensors # for `sensors` command
ethtool
pciutils # lspci
usbutils # lsusb
hdparm # for disk performance, command
dmidecode # a tool that reads information about your system's hardware from the BIOS according to the SMBIOS/DMI standard
];
# auto mount usb drives
services = {
udiskie.enable = true;
};
services = {
# syncthing.enable = true;
};
}
-730
View File
@@ -1,730 +0,0 @@
# Configuration for Alacritty, the GPU enhanced terminal emulator.
# Import additional configuration files
#
# Imports are loaded in order, skipping all missing files, with the importing
# file being loaded last. If a field is already present in a previous import, it
# will be replaced.
#
# All imports must either be absolute paths starting with `/`, or paths relative
# to the user's home directory starting with `~/`.
import:
# all alacritty themes can be found at
# https://github.com/alacritty/alacritty-theme
- ~/.config/alacritty/theme_github_dark.yml
# Any items in the `env` entry below will be added as
# environment variables. Some entries may override variables
# set by alacritty itself.
#env:
# TERM variable
#
# This value is used to set the `$TERM` environment variable for
# each instance of Alacritty. If it is not present, alacritty will
# check the local terminfo database and use `alacritty` if it is
# available, otherwise `xterm-256color` is used.
#TERM: alacritty
window:
# Window dimensions (changes require restart)
#
# Number of lines/columns (not pixels) in the terminal. Both lines and columns
# must be non-zero for this to take effect. The number of columns must be at
# least `2`, while using a value of `0` for columns and lines will fall back
# to the window manager's recommended size
#dimensions:
# columns: 0
# lines: 0
# Window position (changes require restart)
#
# Specified in number of pixels.
# If the position is not set, the window manager will handle the placement.
#position:
# x: 0
# y: 0
# Window padding (changes require restart)
#
# Blank space added around the window in pixels. This padding is scaled
# by DPI and the specified value is always added at both opposing sides.
padding:
x: 5
y: 5
# Spread additional padding evenly around the terminal content.
dynamic_padding: true
# Window decorations
#
# Values for `decorations`:
# - full: Borders and title bar
# - none: Neither borders nor title bar
#
# Values for `decorations` (macOS only):
# - transparent: Title bar, transparent background and title bar buttons
# - buttonless: Title bar, transparent background and no title bar buttons
#decorations: full
# Background opacity
#
# Window opacity as a floating point number from `0.0` to `1.0`.
# The value `0.0` is completely transparent and `1.0` is opaque.
opacity: 0.98
# Startup Mode (changes require restart)
#
# Values for `startup_mode`:
# - Windowed
# - Maximized
# - Fullscreen
#
# Values for `startup_mode` (macOS only):
# - SimpleFullscreen
startup_mode: Windowed
# Window title
title: Alacritty
# Allow terminal applications to change Alacritty's window title.
dynamic_title: true
# Window class (Linux/BSD only):
#class:
# Application instance name
#instance: Alacritty
# General application class
#general: Alacritty
# Decorations theme variant
#
# Override the variant of the System theme/GTK theme/Wayland client side
# decorations. Commonly supported values are `Dark`, `Light`, and `None` for
# auto pick-up. Set this to `None` to use the default theme variant.
#decorations_theme_variant: None
# Resize increments
#
# Prefer resizing window by discrete steps equal to cell dimensions.
#resize_increments: false
# Make `Option` key behave as `Alt` (macOS only):
# - OnlyLeft
# - OnlyRight
# - Both
# - None (default)
#option_as_alt: None
scrolling:
# Maximum number of lines in the scrollback buffer.
# Specifying '0' will disable scrolling.
history: 10000
# Scrolling distance multiplier.
#multiplier: 3
# Font configuration
font:
# Normal (roman) font face
bold:
family: JetBrainsMono Nerd Font
italic:
family: JetBrainsMono Nerd Font
normal:
family: JetBrainsMono Nerd Font
bold_italic:
# Font family
#
# If the bold italic family is not specified, it will fall back to the
# value specified for the normal font.
family: JetBrainsMono Nerd Font
# Point size
size: 12
# Offset is the extra space around each character. `offset.y` can be thought
# of as modifying the line spacing, and `offset.x` as modifying the letter
# spacing.
#offset:
# x: 0
# y: 0
# Glyph offset determines the locations of the glyphs within their cells with
# the default being at the bottom. Increasing `x` moves the glyph to the
# right, increasing `y` moves the glyph upward.
#glyph_offset:
# x: 0
# y: 0
# Use built-in font for box drawing characters.
#
# If `true`, Alacritty will use a custom built-in font for box drawing
# characters (Unicode points 2500 - 259f).
#
#builtin_box_drawing: true
# If `true`, bold text is drawn using the bright color variants.
#draw_bold_text_with_bright_colors: false
# Bell
#
# The bell is rung every time the BEL control character is received.
#bell:
# Visual Bell Animation
#
# Animation effect for flashing the screen when the visual bell is rung.
#
# Values for `animation`:
# - Ease
# - EaseOut
# - EaseOutSine
# - EaseOutQuad
# - EaseOutCubic
# - EaseOutQuart
# - EaseOutQuint
# - EaseOutExpo
# - EaseOutCirc
# - Linear
#animation: EaseOutExpo
# Duration of the visual bell flash in milliseconds. A `duration` of `0` will
# disable the visual bell animation.
#duration: 0
# Visual bell animation color.
#color: '#ffffff'
# Bell Command
#
# This program is executed whenever the bell is rung.
#
# When set to `command: None`, no command will be executed.
#
# Example:
# command:
# program: notify-send
# args: ["Hello, World!"]
#
#command: None
#selection:
# This string contains all characters that are used as separators for
# "semantic words" in Alacritty.
#semantic_escape_chars: ",│`|:\"' ()[]{}<>\t"
# When set to `true`, selected text will be copied to the primary clipboard.
#save_to_clipboard: false
#cursor:
# Cursor style
#style:
# Cursor shape
#
# Values for `shape`:
# - ▇ Block
# - _ Underline
# - | Beam
#shape: Block
# Cursor blinking state
#
# Values for `blinking`:
# - Never: Prevent the cursor from ever blinking
# - Off: Disable blinking by default
# - On: Enable blinking by default
# - Always: Force the cursor to always blink
#blinking: Off
# Vi mode cursor style
#
# If the vi mode cursor style is `None` or not specified, it will fall back to
# the style of the active value of the normal cursor.
#
# See `cursor.style` for available options.
#vi_mode_style: None
# Cursor blinking interval in milliseconds.
#blink_interval: 750
# Time after which cursor stops blinking, in seconds.
#
# Specifying '0' will disable timeout for blinking.
#blink_timeout: 5
# If this is `true`, the cursor will be rendered as a hollow box when the
# window is not focused.
#unfocused_hollow: true
# Thickness of the cursor relative to the cell width as floating point number
# from `0.0` to `1.0`.
#thickness: 0.15
# Live config reload (changes require restart)
live_config_reload: true
# Shell
#
# You can set `shell.program` to the path of your favorite shell, e.g.
# `/bin/fish`. Entries in `shell.args` are passed unmodified as arguments to the
# shell.
#
# Default:
# - (Linux/BSD/macOS) `$SHELL` or the user's login shell, if `$SHELL` is unset
# - (Windows) powershell
# shell:
# program: /bin/bash
# args:
# - --login
# Startup directory
#
# Directory the shell is started in. If this is unset, or `None`, the working
# directory of the parent process will be used.
#working_directory: None
# Offer IPC using `alacritty msg` (unix only)
#ipc_socket: true
#mouse:
# Click settings
#
# The `double_click` and `triple_click` settings control the time
# alacritty should wait for accepting multiple clicks as one double
# or triple click.
#double_click: { threshold: 300 }
#triple_click: { threshold: 300 }
# If this is `true`, the cursor is temporarily hidden when typing.
#hide_when_typing: false
# Hints
#
# Terminal hints can be used to find text or hyperlink in the visible part of
# the terminal and pipe it to other applications.
#hints:
# Keys used for the hint labels.
#alphabet: "jfkdls;ahgurieowpq"
# List with all available hints
#
# Each hint must have any of `regex` or `hyperlinks` field and either an
# `action` or a `command` field. The fields `mouse`, `binding` and
# `post_processing` are optional.
#
# The `hyperlinks` option will cause OSC 8 escape sequence hyperlinks to be
# highlighted.
#
# The fields `command`, `binding.key`, `binding.mods`, `binding.mode` and
# `mouse.mods` accept the same values as they do in the `key_bindings` section.
#
# The `mouse.enabled` field controls if the hint should be underlined while
# the mouse with all `mouse.mods` keys held or the vi mode cursor is above it.
#
# If the `post_processing` field is set to `true`, heuristics will be used to
# shorten the match if there are characters likely not to be part of the hint
# (e.g. a trailing `.`). This is most useful for URIs and applies only to
# `regex` matches.
#
# Values for `action`:
# - Copy
# Copy the hint's text to the clipboard.
# - Paste
# Paste the hint's text to the terminal or search.
# - Select
# Select the hint's text.
# - MoveViModeCursor
# Move the vi mode cursor to the beginning of the hint.
#enabled:
# - regex: "(ipfs:|ipns:|magnet:|mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)\
# [^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩`]+"
# hyperlinks: true
# command: xdg-open
# post_processing: true
# mouse:
# enabled: true
# mods: None
# binding:
# key: U
# mods: Control|Shift
# Mouse bindings
#
# Mouse bindings are specified as a list of objects, much like the key
# bindings further below.
#
# To trigger mouse bindings when an application running within Alacritty
# captures the mouse, the `Shift` modifier is automatically added as a
# requirement.
#
# Each mouse binding will specify a:
#
# - `mouse`:
#
# - Middle
# - Left
# - Right
# - Numeric identifier such as `5`
#
# - `action` (see key bindings for actions not exclusive to mouse mode)
#
# - Mouse exclusive actions:
#
# - ExpandSelection
# Expand the selection to the current mouse cursor location.
#
# And optionally:
#
# - `mods` (see key bindings)
#mouse_bindings:
# - { mouse: Right, action: ExpandSelection }
# - { mouse: Right, mods: Control, action: ExpandSelection }
# - { mouse: Middle, mode: ~Vi, action: PasteSelection }
# Key bindings
#
# Key bindings are specified as a list of objects. For example, this is the
# default paste binding:
#
# `- { key: V, mods: Control|Shift, action: Paste }`
#
# Each key binding will specify a:
#
# - `key`: Identifier of the key pressed
#
# - A-Z
# - F1-F24
# - Key0-Key9
#
# A full list with available key codes can be found here:
# https://docs.rs/winit/*/winit/event/enum.VirtualKeyCode.html#variants
#
# Instead of using the name of the keys, the `key` field also supports using
# the scancode of the desired key. Scancodes have to be specified as a
# decimal number. This command will allow you to display the hex scancodes
# for certain keys:
#
# `showkey --scancodes`.
#
# Then exactly one of:
#
# - `chars`: Send a byte sequence to the running application
#
# The `chars` field writes the specified string to the terminal. This makes
# it possible to pass escape sequences. To find escape codes for bindings
# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside
# of tmux. Note that applications use terminfo to map escape sequences back
# to keys. It is therefore required to update the terminfo when changing an
# escape sequence.
#
# - `action`: Execute a predefined action
#
# - ToggleViMode
# - SearchForward
# Start searching toward the right of the search origin.
# - SearchBackward
# Start searching toward the left of the search origin.
# - Copy
# - Paste
# - IncreaseFontSize
# - DecreaseFontSize
# - ResetFontSize
# - ScrollPageUp
# - ScrollPageDown
# - ScrollHalfPageUp
# - ScrollHalfPageDown
# - ScrollLineUp
# - ScrollLineDown
# - ScrollToTop
# - ScrollToBottom
# - ClearHistory
# Remove the terminal's scrollback history.
# - Hide
# Hide the Alacritty window.
# - Minimize
# Minimize the Alacritty window.
# - Quit
# Quit Alacritty.
# - ToggleFullscreen
# - ToggleMaximized
# - SpawnNewInstance
# Spawn a new instance of Alacritty.
# - CreateNewWindow
# Create a new Alacritty window from the current process.
# - ClearLogNotice
# Clear Alacritty's UI warning and error notice.
# - ClearSelection
# Remove the active selection.
# - ReceiveChar
# - None
#
# - Vi mode exclusive actions:
#
# - Open
# Perform the action of the first matching hint under the vi mode cursor
# with `mouse.enabled` set to `true`.
# - ToggleNormalSelection
# - ToggleLineSelection
# - ToggleBlockSelection
# - ToggleSemanticSelection
# Toggle semantic selection based on `selection.semantic_escape_chars`.
# - CenterAroundViCursor
# Center view around vi mode cursor
#
# - Vi mode exclusive cursor motion actions:
#
# - Up
# One line up.
# - Down
# One line down.
# - Left
# One character left.
# - Right
# One character right.
# - First
# First column, or beginning of the line when already at the first column.
# - Last
# Last column, or beginning of the line when already at the last column.
# - FirstOccupied
# First non-empty cell in this terminal row, or first non-empty cell of
# the line when already at the first cell of the row.
# - High
# Top of the screen.
# - Middle
# Center of the screen.
# - Low
# Bottom of the screen.
# - SemanticLeft
# Start of the previous semantically separated word.
# - SemanticRight
# Start of the next semantically separated word.
# - SemanticLeftEnd
# End of the previous semantically separated word.
# - SemanticRightEnd
# End of the next semantically separated word.
# - WordLeft
# Start of the previous whitespace separated word.
# - WordRight
# Start of the next whitespace separated word.
# - WordLeftEnd
# End of the previous whitespace separated word.
# - WordRightEnd
# End of the next whitespace separated word.
# - Bracket
# Character matching the bracket at the cursor's location.
# - SearchNext
# Beginning of the next match.
# - SearchPrevious
# Beginning of the previous match.
# - SearchStart
# Start of the match to the left of the vi mode cursor.
# - SearchEnd
# End of the match to the right of the vi mode cursor.
#
# - Search mode exclusive actions:
# - SearchFocusNext
# Move the focus to the next search match.
# - SearchFocusPrevious
# Move the focus to the previous search match.
# - SearchConfirm
# - SearchCancel
# - SearchClear
# Reset the search regex.
# - SearchDeleteWord
# Delete the last word in the search regex.
# - SearchHistoryPrevious
# Go to the previous regex in the search history.
# - SearchHistoryNext
# Go to the next regex in the search history.
#
# - macOS exclusive actions:
# - ToggleSimpleFullscreen
# Enter fullscreen without occupying another space.
#
# - Linux/BSD exclusive actions:
#
# - CopySelection
# Copy from the selection buffer.
# - PasteSelection
# Paste from the selection buffer.
#
# - `command`: Fork and execute a specified command plus arguments
#
# The `command` field must be a map containing a `program` string and an
# `args` array of command line parameter strings. For example:
# `{ program: "alacritty", args: ["-e", "vttest"] }`
#
# And optionally:
#
# - `mods`: Key modifiers to filter binding actions
#
# - Command
# - Control
# - Option
# - Super
# - Shift
# - Alt
#
# Multiple `mods` can be combined using `|` like this:
# `mods: Control|Shift`.
# Whitespace and capitalization are relevant and must match the example.
#
# - `mode`: Indicate a binding for only specific terminal reported modes
#
# This is mainly used to send applications the correct escape sequences
# when in different modes.
#
# - AppCursor
# - AppKeypad
# - Search
# - Alt
# - Vi
#
# A `~` operator can be used before a mode to apply the binding whenever
# the mode is *not* active, e.g. `~Alt`.
#
# Bindings are always filled by default, but will be replaced when a new
# binding with the same triggers is defined. To unset a default binding, it can
# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for
# a no-op if you do not wish to receive input characters for that binding.
#
# If the same trigger is assigned to multiple actions, all of them are executed
# in the order they were defined in.
#key_bindings:
#- { key: Paste, action: Paste }
#- { key: Copy, action: Copy }
#- { key: L, mods: Control, action: ClearLogNotice }
#- { key: L, mods: Control, mode: ~Vi|~Search, chars: "\x0c" }
#- { key: PageUp, mods: Shift, mode: ~Alt, action: ScrollPageUp }
#- { key: PageDown, mods: Shift, mode: ~Alt, action: ScrollPageDown }
#- { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop }
#- { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom }
# Vi Mode
#- { key: Space, mods: Shift|Control, mode: ~Search, action: ToggleViMode }
#- { key: Space, mods: Shift|Control, mode: Vi|~Search, action: ScrollToBottom }
#- { key: Escape, mode: Vi|~Search, action: ClearSelection }
#- { key: I, mode: Vi|~Search, action: ToggleViMode }
#- { key: I, mode: Vi|~Search, action: ScrollToBottom }
#- { key: C, mods: Control, mode: Vi|~Search, action: ToggleViMode }
#- { key: Y, mods: Control, mode: Vi|~Search, action: ScrollLineUp }
#- { key: E, mods: Control, mode: Vi|~Search, action: ScrollLineDown }
#- { key: G, mode: Vi|~Search, action: ScrollToTop }
#- { key: G, mods: Shift, mode: Vi|~Search, action: ScrollToBottom }
#- { key: B, mods: Control, mode: Vi|~Search, action: ScrollPageUp }
#- { key: F, mods: Control, mode: Vi|~Search, action: ScrollPageDown }
#- { key: U, mods: Control, mode: Vi|~Search, action: ScrollHalfPageUp }
#- { key: D, mods: Control, mode: Vi|~Search, action: ScrollHalfPageDown }
#- { key: Y, mode: Vi|~Search, action: Copy }
#- { key: Y, mode: Vi|~Search, action: ClearSelection }
#- { key: Copy, mode: Vi|~Search, action: ClearSelection }
#- { key: V, mode: Vi|~Search, action: ToggleNormalSelection }
#- { key: V, mods: Shift, mode: Vi|~Search, action: ToggleLineSelection }
#- { key: V, mods: Control, mode: Vi|~Search, action: ToggleBlockSelection }
#- { key: V, mods: Alt, mode: Vi|~Search, action: ToggleSemanticSelection }
#- { key: Return, mode: Vi|~Search, action: Open }
#- { key: Z, mode: Vi|~Search, action: CenterAroundViCursor }
#- { key: K, mode: Vi|~Search, action: Up }
#- { key: J, mode: Vi|~Search, action: Down }
#- { key: H, mode: Vi|~Search, action: Left }
#- { key: L, mode: Vi|~Search, action: Right }
#- { key: Up, mode: Vi|~Search, action: Up }
#- { key: Down, mode: Vi|~Search, action: Down }
#- { key: Left, mode: Vi|~Search, action: Left }
#- { key: Right, mode: Vi|~Search, action: Right }
#- { key: Key0, mode: Vi|~Search, action: First }
#- { key: Key4, mods: Shift, mode: Vi|~Search, action: Last }
#- { key: Key6, mods: Shift, mode: Vi|~Search, action: FirstOccupied }
#- { key: H, mods: Shift, mode: Vi|~Search, action: High }
#- { key: M, mods: Shift, mode: Vi|~Search, action: Middle }
#- { key: L, mods: Shift, mode: Vi|~Search, action: Low }
#- { key: B, mode: Vi|~Search, action: SemanticLeft }
#- { key: W, mode: Vi|~Search, action: SemanticRight }
#- { key: E, mode: Vi|~Search, action: SemanticRightEnd }
#- { key: B, mods: Shift, mode: Vi|~Search, action: WordLeft }
#- { key: W, mods: Shift, mode: Vi|~Search, action: WordRight }
#- { key: E, mods: Shift, mode: Vi|~Search, action: WordRightEnd }
#- { key: Key5, mods: Shift, mode: Vi|~Search, action: Bracket }
#- { key: Slash, mode: Vi|~Search, action: SearchForward }
#- { key: Slash, mods: Shift, mode: Vi|~Search, action: SearchBackward }
#- { key: N, mode: Vi|~Search, action: SearchNext }
#- { key: N, mods: Shift, mode: Vi|~Search, action: SearchPrevious }
# Search Mode
#- { key: Return, mode: Search|Vi, action: SearchConfirm }
#- { key: Escape, mode: Search, action: SearchCancel }
#- { key: C, mods: Control, mode: Search, action: SearchCancel }
#- { key: U, mods: Control, mode: Search, action: SearchClear }
#- { key: W, mods: Control, mode: Search, action: SearchDeleteWord }
#- { key: P, mods: Control, mode: Search, action: SearchHistoryPrevious }
#- { key: N, mods: Control, mode: Search, action: SearchHistoryNext }
#- { key: Up, mode: Search, action: SearchHistoryPrevious }
#- { key: Down, mode: Search, action: SearchHistoryNext }
#- { key: Return, mode: Search|~Vi, action: SearchFocusNext }
#- { key: Return, mods: Shift, mode: Search|~Vi, action: SearchFocusPrevious }
# (Windows, Linux, and BSD only)
#- { key: V, mods: Control|Shift, mode: ~Vi, action: Paste }
#- { key: C, mods: Control|Shift, action: Copy }
#- { key: F, mods: Control|Shift, mode: ~Search, action: SearchForward }
#- { key: B, mods: Control|Shift, mode: ~Search, action: SearchBackward }
#- { key: C, mods: Control|Shift, mode: Vi|~Search, action: ClearSelection }
#- { key: Insert, mods: Shift, action: PasteSelection }
#- { key: Key0, mods: Control, action: ResetFontSize }
#- { key: Equals, mods: Control, action: IncreaseFontSize }
#- { key: Plus, mods: Control, action: IncreaseFontSize }
#- { key: NumpadAdd, mods: Control, action: IncreaseFontSize }
#- { key: Minus, mods: Control, action: DecreaseFontSize }
#- { key: NumpadSubtract, mods: Control, action: DecreaseFontSize }
# (Windows only)
#- { key: Return, mods: Alt, action: ToggleFullscreen }
# (macOS only)
#- { key: K, mods: Command, mode: ~Vi|~Search, chars: "\x0c" }
#- { key: K, mods: Command, mode: ~Vi|~Search, action: ClearHistory }
#- { key: Key0, mods: Command, action: ResetFontSize }
#- { key: Equals, mods: Command, action: IncreaseFontSize }
#- { key: Plus, mods: Command, action: IncreaseFontSize }
#- { key: NumpadAdd, mods: Command, action: IncreaseFontSize }
#- { key: Minus, mods: Command, action: DecreaseFontSize }
#- { key: NumpadSubtract, mods: Command, action: DecreaseFontSize }
#- { key: V, mods: Command, action: Paste }
#- { key: C, mods: Command, action: Copy }
#- { key: C, mods: Command, mode: Vi|~Search, action: ClearSelection }
#- { key: H, mods: Command, action: Hide }
#- { key: H, mods: Command|Alt, action: HideOtherApplications }
#- { key: M, mods: Command, action: Minimize }
#- { key: Q, mods: Command, action: Quit }
#- { key: W, mods: Command, action: Quit }
#- { key: N, mods: Command, action: CreateNewWindow }
#- { key: F, mods: Command|Control, action: ToggleFullscreen }
#- { key: F, mods: Command, mode: ~Search, action: SearchForward }
#- { key: B, mods: Command, mode: ~Search, action: SearchBackward }
#debug:
# Display the time it takes to redraw each frame.
#render_timer: false
# Keep the log file after quitting Alacritty.
#persistent_logging: false
# Log level
#
# Values for `log_level`:
# - Off
# - Error
# - Warn
# - Info
# - Debug
# - Trace
#log_level: Warn
# Renderer override.
# - glsl3
# - gles2
# - gles2_pure
#renderer: None
# Print all received window events.
#print_events: false
# Highlight window damage information.
#highlight_damage: false
-10
View File
@@ -1,10 +0,0 @@
{ pkgs, ... }:
{
programs.alacritty = {
enable = true;
};
xdg.configFile."alacritty/alacritty.yml".source = ./alacritty.yml;
xdg.configFile."alacritty/theme_github_dark.yml".source = ./theme_github_dark.yml;
}
@@ -1,32 +0,0 @@
# github Alacritty Colors
colors:
# Default colors
primary:
background: '0x24292e'
foreground: '0xd1d5da'
# Normal colors
normal:
black: '0x586069'
red: '0xea4a5a'
green: '0x34d058'
yellow: '0xffea7f'
blue: '0x2188ff'
magenta: '0xb392f0'
cyan: '0x39c5cf'
white: '0xd1d5da'
# Bright colors
bright:
black: '0x959da5'
red: '0xf97583'
green: '0x85e89d'
yellow: '0xffea7f'
blue: '0x79b8ff'
magenta: '0xb392f0'
cyan: '0x56d4dd'
white: '0xfafbfc'
indexed_colors:
- { index: 16, color: '0xd18616' }
- { index: 17, color: '0xf97583' }
-36
View File
@@ -1,36 +0,0 @@
{config, pkgs, nil, ...}:
{
home.packages = with pkgs; [
nil.packages."${pkgs.system}".default # nix language server
# GUI IDE
insomnia # REST client
# need to run `conda-install` before using it
# need to run `conda-shell` before using command `conda`
# conda is not available for MacOS
conda
];
programs = {
# modern vim
neovim = {
enable = true;
extraConfig = ''
set number relativenumber
'';
};
direnv = {
enable = true;
nix-direnv.enable = true;
enableZshIntegration = true;
};
};
# GitHub CLI tool
programs.gh = {
enable = true;
};
}
-40
View File
@@ -1,40 +0,0 @@
{pkgs, config, ...}:
{
# Linux Only Packages, not available on Darwin
home.packages = with pkgs; [
btop # replacement of htop/nmon
htop
iotop
nmon
## networking tools
wireguard-tools # manage wireguard vpn manually, via wg-quick
iftop
# misc
libnotify
# system call monitoring
strace
ltrace # library call monitoring
lsof
# system tools
ethtool
sysstat
lm_sensors # for `sensors` command
cifs-utils # for mounting windows shares
];
# auto mount usb drives
services = {
udiskie.enable = true;
};
services = {
# syncthing.enable = true;
};
}
-90
View File
@@ -1,90 +0,0 @@
# XDG stands for "Cross-Desktop Group", with X used to mean "cross".
# It's a bunch of specifications from freedesktop.org intended to standardize desktops and
# other GUI applications on various systems (primarily Unix-like) to be interoperable:
# https://www.freedesktop.org/wiki/Specifications/
{config, pkgs, ...}:
{
home.packages = with pkgs; [
xdg-utils # provides cli tools such as `xdg-mime` `xdg-open`
xdg-user-dirs
];
xdg = {
enable = true;
cacheHome = config.home.homeDirectory + "/.local/cache";
# manage $XDG_CONFIG_HOME/mimeapps.list
# xdg search all desktop entries from $XDG_DATA_DIRS, check it by command:
# echo $XDG_DATA_DIRS
# the system-level desktop entries can be list by command:
# ls -l /run/current-system/sw/share/applications/
# the user-level desktop entries can be list by command(user ryan):
# ls /etc/profiles/per-user/ryan/share/applications/
mimeApps = {
enable = true;
defaultApplications =
let
browser = ["firefox.desktop"];
in
{
"application/json" = browser;
"application/pdf" = browser; # TODO: pdf viewer
"text/html" = browser;
"text/xml" = browser;
"application/xml" = browser;
"application/xhtml+xml" = browser;
"application/xhtml_xml" = browser;
"application/rdf+xml" = browser;
"application/rss+xml" = browser;
"application/x-extension-htm" = browser;
"application/x-extension-html" = browser;
"application/x-extension-shtml" = browser;
"application/x-extension-xht" = browser;
"application/x-extension-xhtml" = browser;
"x-scheme-handler/about" = browser;
"x-scheme-handler/ftp" = browser;
"x-scheme-handler/http" = browser;
"x-scheme-handler/https" = browser;
"x-scheme-handler/unknown" = browser;
"x-scheme-handler/discord" = ["discord.desktop"];
"x-scheme-handler/tg" = ["telegramdesktop.desktop"];
"audio/*" = ["mpv.desktop"];
"video/*" = ["mpv.dekstop"];
"image/*" = ["imv.desktop"];
};
associations.removed =
let
browser = ["google-chrome.desktop"];
in
{
"text/html" = browser;
"text/xml" = browser;
"application/xml" = browser;
"application/xhtml+xml" = browser;
"application/xhtml_xml" = browser;
"application/rdf+xml" = browser;
"application/rss+xml" = browser;
"image/gif" = browser;
"image/jpeg" = browser;
"image/png" = browser;
"image/webp" = browser;
"x-scheme-handler/http" = browser;
"x-scheme-handler/https" = browser;
"application/pdf" = browser;
};
};
userDirs = {
enable = true;
createDirectories = true;
extraConfig = {
XDG_SCREENSHOTS_DIR = "${config.xdg.userDirs.pictures}/Screenshots";
};
};
};
}
@@ -1,27 +1,19 @@
{ config, pkgs, ... }: { username, ... }: {
{
imports = [ imports = [
../common ../base/desktop
./hyprland
./base
./fcitx5 ./fcitx5
./desktop ./desktop
./common/alacritty ./hyprland
./common/development.nix
./common/shell.nix
./common/ssh.nix
./common/system-tools.nix
./common/xdg.nix
]; ];
# Home Manager needs a bit of information about you and the # Home Manager needs a bit of information about you and the
# paths it should manage. # paths it should manage.
home = { home = {
username = "ryan"; username = username;
homeDirectory = "/home/ryan"; homeDirectory = "/home/${username}";
# This value determines the Home Manager release that your # This value determines the Home Manager release that your
# configuration is compatible with. This helps avoid breakage # configuration is compatible with. This helps avoid breakage
@@ -1,27 +1,19 @@
{ config, pkgs, ... }: { username, ... }: {
{
imports = [ imports = [
../common ../base/desktop
./i3
./base
./fcitx5 ./fcitx5
./desktop ./desktop
./common/alacritty ./i3
./common/development.nix
./common/shell.nix
./common/ssh.nix
./common/system-tools.nix
./common/xdg.nix
]; ];
# Home Manager needs a bit of information about you and the # Home Manager needs a bit of information about you and the
# paths it should manage. # paths it should manage.
home = { home = {
username = "ryan"; username = username;
homeDirectory = "/home/ryan"; homeDirectory = "/home/${username}";
# This value determines the Home Manager release that your # This value determines the Home Manager release that your
# configuration is compatible with. This helps avoid breakage # configuration is compatible with. This helps avoid breakage
+1 -6
View File
@@ -1,9 +1,4 @@
{ {pkgs, ...}: {
pkgs,
config,
...
}:
{
home.packages = with pkgs; [ home.packages = with pkgs; [
# creative # creative
# blender # 3d modeling # blender # 3d modeling
+12 -4
View File
@@ -1,13 +1,16 @@
{ pkgs, ... }: {pkgs, ...}: {
{
imports = [ imports = [
./creative.nix ./creative.nix
./immutable-file.nix
./media.nix ./media.nix
./ssh.nix
./xdg.nix
]; ];
home.packages = with pkgs; [ home.packages = with pkgs; [
# networking # GUI apps
wireshark insomnia # REST client
wireshark # network analyzer
# e-book viewer(.epub/.mobi/...) # e-book viewer(.epub/.mobi/...)
# do not support .pdf # do not support .pdf
@@ -25,4 +28,9 @@
# misc # misc
flameshot flameshot
]; ];
# GitHub CLI tool
programs.gh = {
enable = true;
};
} }
+65
View File
@@ -0,0 +1,65 @@
{
config,
lib,
pkgs,
...
}:
##############################################################################################
#
# Provide a option `home.immutable-file`, it works like `home.file` but make the generated file immutable.
#
# Copy from https://github.com/iosmanthus/nixos-config/blob/349917b/modules/immutable-file.nix
#
# this module use the `chattr +i` to make the file immutable, `i` indicates `immutable`,
# it's a i-node flags only works on Linux.
#
# TODO not used yet, need to test it.
#
##############################################################################################
with lib; let
cfg = config.home.immutable-file;
immutableFileOpts = {...}: {
options = {
src = mkOption {
type = types.path;
};
dst = mkOption {
type = types.path;
};
};
};
mkImmutableFile = pkgs.writeScript "make_immutable_file" ''
# $1: dst
# $2: src
if [ ! -d "$(dirname $1)" ]; then
mkdir -p $1
fi
if [ -f $1 ]; then
sudo chattr -i $1
fi
sudo cp $2 $1
sudo chattr +i $1
'';
in {
options.home.immutable-file = mkOption {
type = with types; attrsOf (submodule immutableFileOpts);
default = {};
};
config = mkIf (cfg != {}) {
home.activation =
mapAttrs'
(name: {
src,
dst,
}:
nameValuePair
"make-immutable-${name}"
(lib.hm.dag.entryAfter ["writeBoundary"] ''
${mkImmutableFile} ${dst} ${src}
''))
cfg;
};
}
@@ -1,7 +1,4 @@
{ {pkgs, ...}: {
pkgs,
...
}: {
programs.ssh = { programs.ssh = {
enable = true; enable = true;
@@ -13,6 +10,9 @@
# format in details: # format in details:
# https://www.ssh.com/academy/ssh/config # https://www.ssh.com/academy/ssh/config
extraConfig = '' extraConfig = ''
# a private key that is used during authentication will be added to ssh-agent if it is running
AddKeysToAgent yes
Host 192.168.* Host 192.168.*
# allow to securely use local SSH agent to authenticate on the remote machine. # 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` # It has the same effect as adding cli option `ssh -A user@host`
@@ -29,6 +29,18 @@
# 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 yes
Host gtr5
HostName 192.168.5.172
Port 22
Host um560
HostName 192.168.5.173
Port 22
Host s500plus
HostName 192.168.5.174
Port 22
''; '';
# use ssh-agent so we only need to input passphrase once # use ssh-agent so we only need to input passphrase once
+79
View File
@@ -0,0 +1,79 @@
# XDG stands for "Cross-Desktop Group", with X used to mean "cross".
# It's a bunch of specifications from freedesktop.org intended to standardize desktops and
# other GUI applications on various systems (primarily Unix-like) to be interoperable:
# https://www.freedesktop.org/wiki/Specifications/
{
config,
pkgs,
...
}: {
home.packages = with pkgs; [
xdg-utils # provides cli tools such as `xdg-mime` `xdg-open`
xdg-user-dirs
];
xdg = {
enable = true;
cacheHome = config.home.homeDirectory + "/.local/cache";
# manage $XDG_CONFIG_HOME/mimeapps.list
# xdg search all desktop entries from $XDG_DATA_DIRS, check it by command:
# echo $XDG_DATA_DIRS
# the system-level desktop entries can be list by command:
# ls -l /run/current-system/sw/share/applications/
# the user-level desktop entries can be list by command(user ryan):
# ls /etc/profiles/per-user/ryan/share/applications/
mimeApps = {
enable = true;
defaultApplications = let
browser = ["firefox.desktop"];
in {
"application/json" = browser;
"application/pdf" = browser; # TODO: pdf viewer
"text/html" = browser;
"text/xml" = browser;
"application/xml" = browser;
"application/xhtml+xml" = browser;
"application/xhtml_xml" = browser;
"application/rdf+xml" = browser;
"application/rss+xml" = browser;
"application/x-extension-htm" = browser;
"application/x-extension-html" = browser;
"application/x-extension-shtml" = browser;
"application/x-extension-xht" = browser;
"application/x-extension-xhtml" = browser;
"x-scheme-handler/about" = browser;
"x-scheme-handler/ftp" = browser;
"x-scheme-handler/http" = browser;
"x-scheme-handler/https" = browser;
"x-scheme-handler/unknown" = browser;
"x-scheme-handler/discord" = ["discord.desktop"];
"x-scheme-handler/tg" = ["telegramdesktop.desktop"];
"audio/*" = ["mpv.desktop"];
"video/*" = ["mpv.dekstop"];
"image/*" = ["imv.desktop"];
"image/gif" = ["imv.desktop"];
"image/jpeg" = ["imv.desktop"];
"image/png" = ["imv.desktop"];
"image/webp" = ["imv.desktop"];
};
associations.removed =
{
# ......
};
};
userDirs = {
enable = true;
createDirectories = true;
extraConfig = {
XDG_SCREENSHOTS_DIR = "${config.xdg.userDirs.pictures}/Screenshots";
};
};
};
}
+10 -4
View File
@@ -1,9 +1,15 @@
{pkgs, config, lib, ... }: { {
pkgs,
config,
lib,
...
}: {
home.file.".config/fcitx5/profile".source = ./profile; home.file.".config/fcitx5/profile".source = ./profile;
home.file.".config/fcitx5/profile-bak".source = ./profile; # used for backup home.file.".config/fcitx5/profile-bak".source = ./profile; # used for backup
# fcitx5 每次切换输入法,就会修改 ~/.config/fcitx5/profile 文件,导致我用 hm 管理的配置被覆盖
# 解决方法是通过如下内置,每次 rebuild 前都先删除下 profile 文件 # every time fcitx5 switch input method, it will modify ~/.config/fcitx5/profile file,
# which will override my config managed by home-manager
# so we need to remove it before everytime we rebuild the config
home.activation.removeExistingFcitx5Profile = lib.hm.dag.entryBefore ["checkLinkTargets"] '' home.activation.removeExistingFcitx5Profile = lib.hm.dag.entryBefore ["checkLinkTargets"] ''
rm -f "${config.xdg.configHome}/fcitx5/profile" rm -f "${config.xdg.configHome}/fcitx5/profile"
''; '';
+12 -8
View File
@@ -1,13 +1,13 @@
{ {pkgs, ...}: {
pkgs,
config,
lib,
...
}: {
imports = [ imports = [
./wayland-apps.nix ./wayland-apps.nix
]; ];
# Only available on home-manager's master branch(2023/7/25)
# wayland.windowManager.hyprland = {
# enable = true;
# };
# hyprland configs, based on https://github.com/notwidow/hyprland # hyprland configs, based on https://github.com/notwidow/hyprland
home.file.".config/hypr" = { home.file.".config/hypr" = {
source = ./hypr-conf; source = ./hypr-conf;
@@ -21,6 +21,12 @@
home.file.".gtkrc-2.0".source = ./gtkrc-2.0; home.file.".gtkrc-2.0".source = ./gtkrc-2.0;
home.file.".config/hypr/wallpapers/wallpaper.png".source = ../wallpapers/wallpaper.png; home.file.".config/hypr/wallpapers/wallpaper.png".source = ../wallpapers/wallpaper.png;
# music player - mpd
home.file.".config/mpd" = {
source = ./mpd;
recursive = true;
};
# allow fontconfig to discover fonts and configurations installed through home.packages # allow fontconfig to discover fonts and configurations installed through home.packages
fonts.fontconfig.enable = true; fonts.fontconfig.enable = true;
@@ -50,6 +56,4 @@
package = pkgs.qogir-theme; package = pkgs.qogir-theme;
size = 64; size = 64;
}; };
} }
+2 -2
View File
@@ -1,4 +1,4 @@
## Hyprland configuration file for Archcraft ## Hyprland configuration file
#-- Output ---------------------------------------------------- #-- Output ----------------------------------------------------
# Configure your Display resolution, offset, scale and Monitors here, use `hyprctl monitors` to get the info. # Configure your Display resolution, offset, scale and Monitors here, use `hyprctl monitors` to get the info.
@@ -91,7 +91,7 @@ windowrule=size 100% 100%,wlogout
windowrule=animation slide,wlogout windowrule=animation slide,wlogout
#-- Keybindings ---------------------------------------------------- #-- Keybindings ----------------------------------------------------
$term = alacritty $term = kitty
$app_launcher = ~/.config/hypr/scripts/menu $app_launcher = ~/.config/hypr/scripts/menu
$volume = ~/.config/hypr/scripts/volume $volume = ~/.config/hypr/scripts/volume
$backlight = ~/.config/hypr/scripts/brightness $backlight = ~/.config/hypr/scripts/brightness
@@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
## Script To Manage Brightness For Archcraft (in Wayland). ## Script To Manage Brightness (in Wayland).
iDIR="$HOME/.config/hypr/mako/icons" iDIR="$HOME/.config/hypr/mako/icons"
@@ -2,7 +2,7 @@
## launch waybar with alt config ## launch waybar with alt config
CONFIG="$HOME/.config/hypr/waybar/config" CONFIG="$HOME/.config/hypr/waybar/config.json"
STYLE="$HOME/.config/hypr/waybar/style.css" STYLE="$HOME/.config/hypr/waybar/style.css"
if [[ ! $(pidof waybar) ]]; then if [[ ! $(pidof waybar) ]]; then
+1 -1
View File
@@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
## Script To Manage Speaker Volume For Archcraft (in Wayland). ## Script To Manage Speaker Volume(in Wayland).
iDIR="$HOME/.config/hypr/mako/icons" iDIR="$HOME/.config/hypr/mako/icons"
@@ -1,120 +0,0 @@
#!/usr/bin/env python
import subprocess
from pyquery import PyQuery # install using `pip install pyquery`
import json
# weather icons
weather_icons = {
"sunnyDay": "滛",
"clearNight": "望",
"cloudyFoggyDay": "",
"cloudyFoggyNight": "",
"rainyDay": "",
"rainyNight": "",
"snowyIcyDay": "",
"snowyIcyNight": "",
"severe": "",
"default": "",
}
# get location_id
# to get your own location_id, go to https://weather.com & search your location.
# once you choose your location, you can see the location_id in the URL(64 chars long hex string)
# Shenzen, Guangdong's location id: https://weather.com/en-IN/weather/today/l/7a4684e0789c881e79935986f2e9e5ab05b0104ac4310fd8818006dfb66092c3
location_id = "7a4684e0789c881e79935986f2e9e5ab05b0104ac4310fd8818006dfb66092c3"
# get html page
url = "https://weather.com/en-IN/weather/today/l/" + location_id
html_data = PyQuery(url=url)
# current temperature
temp = html_data("span[data-testid='TemperatureValue']").eq(0).text()
# print(temp)
# current status phrase
status = html_data("div[data-testid='wxPhrase']").text()
status = f"{status[:16]}.." if len(status) > 17 else status
# print(status)
# status code
status_code = html_data("#regionHeader").attr("class").split(" ")[2].split("-")[2]
# print(status_code)
# status icon
icon = (
weather_icons[status_code]
if status_code in weather_icons
else weather_icons["default"]
)
# print(icon)
# temperature feels like
temp_feel = html_data(
"div[data-testid='FeelsLikeSection'] > span[data-testid='TemperatureValue']"
).text()
temp_feel_text = f"Feels like {temp_feel}c"
# print(temp_feel_text)
# min-max temperature
temp_min = (
html_data("div[data-testid='wxData'] > span[data-testid='TemperatureValue']")
.eq(0)
.text()
)
temp_max = (
html_data("div[data-testid='wxData'] > span[data-testid='TemperatureValue']")
.eq(1)
.text()
)
temp_min_max = f" {temp_min}\t\t {temp_max}"
# print(temp_min_max)
# wind speed
wind_speed = html_data("span[data-testid='Wind']").text().split("\n")[1]
wind_text = f"煮 {wind_speed}"
# print(wind_text)
# humidity
humidity = html_data("span[data-testid='PercentageValue']").text()
humidity_text = f" {humidity}"
# print(humidity_text)
# visibility
visbility = html_data("span[data-testid='VisibilityValue']").text()
visbility_text = f" {visbility}"
# print(visbility_text)
# air quality index
air_quality_index = html_data("text[data-testid='DonutChartValue']").text()
# print(air_quality_index)
# hourly rain prediction
prediction = html_data("section[aria-label='Hourly Forecast']")(
"div[data-testid='SegmentPrecipPercentage'] > span"
).text()
prediction = prediction.replace("Chance of Rain", "")
prediction = f"\n\n  (hourly) {prediction}" if len(prediction) > 0 else prediction
# print(prediction)
# tooltip text
tooltip_text = str.format(
"\t\t{}\t\t\n{}\n{}\n{}\n\n{}\n{}\n{}{}",
f'<span size="xx-large">{temp}</span>',
f"<big>{icon}</big>",
f"<big>{status}</big>",
f"<small>{temp_feel_text}</small>",
f"<big>{temp_min_max}</big>",
f"{wind_text}\t{humidity_text}",
f"{visbility_text}\tAQI {air_quality_index}",
f"<i>{prediction}</i>",
)
# print waybar module data
out_data = {
"text": f"{icon} {temp}",
"alt": status,
"tooltip": tooltip_text,
"class": status_code,
}
print(json.dumps(out_data))
-222
View File
@@ -1,222 +0,0 @@
{
"name": "main-bar",
"id": "main-bar",
"layer": "top",
"mode": "dock",
"exclusive": true,
"passthrough": false,
"height": 32,
"spacing": 6,
"margin": 0,
"margin-top": 0,
"margin-bottom": 0,
"margin-left": 0,
"margin-right": 0,
"fixed-center": true,
"ipc": true,
"modules-left": [
"custom/menu",
"wlr/workspaces",
"cpu",
"memory",
"disk"
],
"modules-center": [
"mpd",
"tray"
],
"modules-right": [
"pulseaudio",
"custom/weather",
"network",
"battery",
"clock",
"custom/power"
],
// waybar-backlight
"backlight": {
"interval": 2,
"align": 0,
"rotate": 0,
//"device": "amdgpu_bl0",
"format": "{icon} {percent}%",
"format-icons": [
"",
"",
"",
""
],
// Commands to execute on events
"on-click": "",
"on-click-middle": "",
"on-click-right": "",
"on-update": "",
"on-scroll-up": "light -A 5%",
"on-scroll-down": "light -U 5%",
"smooth-scrolling-threshold": 1,
},
"wlr/workspaces": {
"format": "{icon}",
"on-click": "activate",
"all-outputs": true,
"format-icons": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "ﭮ",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "﮼",
"focused": "",
"default": ""
}
},
// waybar-battery
"battery": {
"interval": 60,
"align": 0,
"rotate": 0,
//"bat": "BAT1",
//"adapter": "ACAD",
"full-at": 100,
"design-capacity": false,
"states": {
"good": 95,
"warning": 30,
"critical": 15
},
"format": "{icon} {capacity}%",
"format-charging": " {capacity}%",
"format-plugged": " {capacity}%",
"format-full": "{icon} Full",
//"format-good": "",
"format-alt": "{icon} {time}",
"format-icons": [
"",
"",
"",
"",
""
],
"format-time": "{H}h {M}min",
"tooltip": true,
},
// waybar-clock
"clock": {
"interval": 60,
"align": 0,
"rotate": 0,
"tooltip-format": "<big>{:%B %Y}</big>\n<tt><small>{calendar}</small></tt>",
"format": " {:%H:%M}",
"format-alt": " {:%a %b %d, %G}"
},
// waybar-cpu
"cpu": {
"interval": 5,
"format": " LOAD: {usage}%",
},
// waybar-custom
"custom/menu": {
"format": "",
"tooltip": false,
"on-click": "$HOME/.config/hypr/scripts/menu",
},
"custom/power": {
"format": " ",
"tooltip": false,
"on-click": "$HOME/.config/hypr/scripts/wlogout",
},
// waybar-disk
"disk": {
"interval": 30,
"format": " FREE: {free}",
},
// waybar-memory
"memory": {
"interval": 10,
"format": " USED: {used:0.1f}G",
},
// waybar-mpd
"mpd": {
"interval": 2,
"unknown-tag": "N/A",
"format": "{stateIcon} {artist} - {title}",
"format-disconnected": " Disconnected",
"format-paused": "{stateIcon} {artist} - {title}",
"format-stopped": "Stopped ",
"state-icons": {
"paused": "",
"playing": ""
},
"tooltip-format": "MPD (connected)",
"tooltip-format-disconnected": "MPD (disconnected)",
// Commands to execute on events
"on-click": "mpc toggle",
"on-click-middle": "mpc prev",
"on-click-right": "mpc next",
"on-update": "",
"on-scroll-up": "mpc seek +00:00:01",
"on-scroll-down": "mpc seek -00:00:01",
"smooth-scrolling-threshold": 1,
},
// waybar-network
"network": {
"interval": 5,
//"interface": "wlan*", // (Optional) To force the use of this interface, set it for netspeed to work
"format-wifi": " {essid}",
"format-ethernet": " {ipaddr}/{cidr}",
"format-linked": " {ifname} (No IP)",
"format-disconnected": "睊 Disconnected",
"format-disabled": "睊 Disabled",
"format-alt": " {bandwidthUpBits} |  {bandwidthDownBits}",
"tooltip-format": " {ifname} via {gwaddr}",
},
// weather-custom
"custom/weather": {
// "format": "{}",
// "format-alt": "{alt}: {}",
"format-alt-click": "click-right",
"interval": 300,
"return-type": "json",
"exec": "~/.config/hypr/scripts/weather",
// "on-click": "xdg-open https://weather.com/en-IN/weather/today/l/$(location_id)"
},
// waybar-pulseaudio
"pulseaudio": {
//"format": "{volume}% {icon} {format_source}",
"format": "{icon} {volume}%",
"format-muted": " Mute",
"format-bluetooth": " {volume}% {format_source}",
"format-bluetooth-muted": " Mute",
"format-source": " {volume}%",
"format-source-muted": "",
"format-icons": {
"headphone": "",
"hands-free": "",
"headset": "",
"phone": "",
"portable": "",
"car": "",
"default": [
"",
"",
""
]
},
"scroll-step": 5.0,
// Commands to execute on events
"on-click": "amixer set Master toggle",
"on-click-right": "pavucontrol",
"smooth-scrolling-threshold": 1,
},
// waybar-tray
"tray": {
"icon-size": 16,
"spacing": 10
}
}
@@ -0,0 +1,163 @@
{
"position": "top",
"layer": "top",
"modules-left": [
"custom/launcher",
"temperature",
"wlr/workspaces"
],
"modules-center": [
"custom/playerctl"
],
"modules-right": [
"mpd",
"pulseaudio",
"backlight",
"memory",
"cpu",
"network",
"clock",
"custom/powermenu",
"tray"
],
"wlr/workspaces": {
"format": "{icon}",
"on-click": "activate",
"format-icons": {
"1": "",
"2": "",
"3": "",
"4": "",
"5": "",
"6": "",
"7": "",
"8": "",
"9": "",
"10": "",
"focused": "",
"default": ""
}
},
"clock": {
"interval": 60,
"align": 0,
"rotate": 0,
"tooltip-format": "<big>{:%B %Y}</big>\n<tt><small>{calendar}</small></tt>",
"format": " {:%H:%M}",
"format-alt": " {:%a %b %d, %G}"
},
"cpu": {
"format": "\udb80\udf5b {usage}%",
"interval": 1
},
"custom/launcher": {
"format": "\uf313 ",
"on-click": "$HOME/.config/hypr/scripts/menu",
"on-click-middle": "exec default_wall",
"on-click-right": "exec wallpaper_random",
"tooltip": false
},
"custom/powermenu": {
"format": "\uf011",
"on-click": "$HOME/.config/hypr/scripts/wlogout",
"tooltip": false
},
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "\uf06e",
"deactivated": "\uf070"
},
"tooltip": false
},
"memory": {
"format": "\udb83\udee0 {percentage}%",
"interval": 1,
"states": {
"warning": 85
}
},
"mpd": {
"interval": 2,
"unknown-tag": "N/A",
"format": "{stateIcon} {artist} - {title}",
"format-disconnected": " Disconnected",
"format-paused": "{stateIcon} {artist} - {title}",
"format-stopped": "Stopped ",
"state-icons": {
"paused": "",
"playing": ""
},
"tooltip-format": "MPD (connected)",
"tooltip-format-disconnected": "MPD (disconnected)",
// Commands to execute on events
"on-click": "mpc toggle",
"on-click-middle": "mpc prev",
"on-click-right": "mpc next",
"on-update": "",
"on-scroll-up": "mpc seek +00:00:01",
"on-scroll-down": "mpc seek -00:00:01",
"smooth-scrolling-threshold": 1
},
"custom/playerctl": {
"format": "{icon} <span>{}</span>",
"return-type": "json",
"max-length": 55,
"exec": "playerctl -a metadata --format '{\"text\": \" {{markup_escape(title)}}\", \"tooltip\": \"{{playerName}} : {{markup_escape(title)}}\", \"alt\": \"{{status}}\", \"class\": \"{{status}}\"}' -F",
"on-click-middle": "playerctl previous",
"on-click": "playerctl play-pause",
"on-click-right": "playerctl next",
"format-icons": {
"Paused": "<span foreground='#6dd9d9'></span>",
"Playing": "<span foreground='#82db97'></span>"
}
},
"network": {
"interval": 5,
//"interface": "wlan*", // (Optional) To force the use of this interface, set it for netspeed to work
"format-wifi": " {essid}",
"format-ethernet": " {ipaddr}/{cidr}",
"format-linked": " {ifname} (No IP)",
"format-disconnected": "睊 Disconnected",
"format-disabled": "睊 Disabled",
"format-alt": " {bandwidthUpBits} |  {bandwidthDownBits}",
"tooltip-format": " {ifname} via {gwaddr}",
},
"pulseaudio": {
//"format": "{volume}% {icon} {format_source}",
"format": "{icon} {volume}%",
"format-muted": " Mute",
"format-bluetooth": " {volume}% {format_source}",
"format-bluetooth-muted": " Mute",
"format-source": " {volume}%",
"format-source-muted": "",
"format-icons": {
"headphone": "",
"hands-free": "",
"headset": "",
"phone": "",
"portable": "",
"car": "",
"default": [
"",
"",
""
]
},
"scroll-step": 5.0,
// Commands to execute on events
"on-click": "amixer set Master toggle",
"on-click-right": "pavucontrol",
"smooth-scrolling-threshold": 1,
},
"temperature": {
"format": "\uf2c9 {temperatureC}\u00b0C",
"tooltip": false
},
"tray": {
"icon-size": 15,
"spacing": 5
}
}
+106 -184
View File
@@ -1,216 +1,138 @@
/** ********** Fonts ********** **/
* { * {
font-family: "JetBrains Mono", "Iosevka Nerd Font", archcraft, sans-serif; font-family: "JetBrainsMono Nerd Font";
font-size: 12px; font-size: 12pt;
} font-weight: bold;
border-radius: 8px;
/** ********** Waybar Window ********** **/
window#waybar {
background-color: #1e1e2e;
color: #1e1e2e;
border-bottom: 2px solid #313244;
transition-property: background-color; transition-property: background-color;
transition-duration: .5s; transition-duration: 0.5s;
} }
@keyframes blink_red {
window#waybar.hidden {
opacity: 0.5;
}
/** ********** Backlight ********** **/
#backlight {
background-color: #cba6f7;
}
/** ********** Battery ********** **/
#battery {
background-color: #f9e2af;
}
#battery.charging {
}
#battery.plugged {
}
@keyframes blink {
to { to {
color: #000000; background-color: rgb(242, 143, 173);
color: rgb(26, 24, 38);
} }
} }
.warning,
#battery.critical:not(.charging) { .critical,
background-color: #f38ba8; .urgent {
color: #f38ba8; animation-name: blink_red;
animation-name: blink; animation-duration: 1s;
animation-duration: 0.5s;
animation-timing-function: linear; animation-timing-function: linear;
animation-iteration-count: infinite; animation-iteration-count: infinite;
animation-direction: alternate; animation-direction: alternate;
} }
window#waybar {
/** ********** Clock ********** **/ background-color: transparent;
#clock {
background-color: #a6e3a1;
} }
window > box {
/** ********** CPU ********** **/ margin-left: 5px;
#cpu { margin-right: 5px;
background-color: #89dceb; margin-top: 5px;
background-color: #1e1e2a;
padding: 3px;
padding-left: 8px;
border: 2px none #33ccff;
} }
#workspaces {
/** ********** Memory ********** **/ padding-left: 0px;
#memory { padding-right: 4px;
background-color: #eba0ac;
} }
#workspaces button {
/** ********** Disk ********** **/ padding-top: 5px;
#disk { padding-bottom: 5px;
background-color: #b4befe; padding-left: 6px;
padding-right: 6px;
} }
#workspaces button.active {
/** ********** Tray ********** **/ background-color: rgb(181, 232, 224);
#tray { color: rgb(26, 24, 38);
background-color: #cdd6f4;
} }
#tray > .passive { #workspaces button.urgent {
-gtk-icon-effect: dim; color: rgb(26, 24, 38);
} }
#tray > .needs-attention { #workspaces button:hover {
-gtk-icon-effect: highlight; background-color: rgb(248, 189, 150);
color: rgb(26, 24, 38);
} }
#tray > .active { tooltip {
background: rgb(48, 45, 65);
} }
tooltip label {
/** ********** MPD ********** **/ color: rgb(217, 224, 238);
#mpd {
background-color: #94e2d5;
} }
#custom-launcher {
#mpd.disconnected { font-size: 20px;
background-color: #f38ba8; padding-left: 8px;
padding-right: 6px;
color: #7ebae4;
} }
#mpd.stopped {
background-color: #f5c2e7;
}
#mpd.playing {
background-color: #74c7ec;
}
#mpd.paused {
}
/** ********** Pulseaudio ********** **/
#pulseaudio {
background-color: #fab387;
}
#pulseaudio.bluetooth {
background-color: #f5c2e7;
}
#pulseaudio.muted {
background-color: #313244;
color: #cdd6f4;
}
/** ********** Network ********** **/
#network {
background-color: #89b4fa;
}
#network.disconnected,#network.disabled {
background-color: #313244;
color: #cdd6f4;
}
#network.linked {
}
#network.ethernet {
}
#network.wifi {
}
/** ********** Custom ********** **/
#custom-menu, #custom-power, #custom-weather, #custom-updater {
border-radius: 4px;
margin: 6px 0px;
padding: 2px 8px;
}
#custom-menu {
background-color: #f5c2e7;
margin-left: 6px;
padding: 2px 6px;
font-size: 16px;
}
#custom-power {
background-color: #f38ba8;
margin-right: 6px;
padding: 2px 8px;
font-size: 16px;
}
#custom-updater {
background-color: #e6ed7b;
margin-right: 6px;
padding: 2px 8px;
font-size: 12px;
}
/** Common style **/
#backlight,
#battery,
#clock,
#cpu,
#disk,
#mode, #mode,
#clock,
#memory, #memory,
#temperature,
#cpu,
#mpd, #mpd,
#tray, #custom-wall,
#temperature,
#backlight,
#pulseaudio, #pulseaudio,
#network,
#battery,
#custom-powermenu {
padding-left: 10px;
padding-right: 10px;
}
/* #mode { */
/* margin-left: 10px; */
/* background-color: rgb(248, 189, 150); */
/* color: rgb(26, 24, 38); */
/* } */
#memory {
color: rgb(181, 232, 224);
}
#cpu {
color: rgb(245, 194, 231);
}
#clock {
color: rgb(217, 224, 238);
}
/* #idle_inhibitor {
color: rgb(221, 182, 242);
}*/
#custom-wall {
color: #33ccff;
}
#temperature {
color: rgb(150, 205, 251);
}
#backlight {
color: rgb(248, 189, 150);
}
#pulseaudio {
color: rgb(245, 224, 220);
}
#network { #network {
border-radius: 4px; color: #abe9b3;
margin: 6px 0px;
padding: 2px 8px;
} }
#network.disconnected {
color: rgb(255, 255, 255);
/** ********** Weather ********** **/
#custom-weather {
background-color: #5d388b;
margin-right: 6px;
padding: 2px 8px;
font-size: 12px;
} }
#custom-powermenu {
#custom-weather.severe { color: rgb(242, 143, 173);
color: #eb937d; padding-right: 8px;
} }
#tray {
#custom-weather.sunnyDay { padding-right: 8px;
color: #c2ca76; padding-left: 10px;
} }
#mpd.paused {
#custom-weather.clearNight { color: #414868;
color: #2b2b2a; font-style: italic;
} }
#mpd.stopped {
#custom-weather.cloudyFoggyDay, #custom-weather.cloudyFoggyNight { background: transparent;
color: #c2ddda;
} }
#mpd {
#custom-weather.rainyDay, #custom-weather.rainyNight { color: #c0caf5;
color: #5aaca5;
}
#custom-weather.showyIcyDay, #custom-weather.snowyIcyNight {
color: #d6e7e5;
}
#custom-weather.default {
color: #dbd9d8;
} }
@@ -1,6 +1,6 @@
/** ********** Fonts ********** **/ /** ********** Fonts ********** **/
* { * {
font-family: "JetBrains Mono", "Iosevka Nerd Font", archcraft, sans-serif; font-family: "JetBrains Mono", "Iosevka Nerd Font", sans-serif;
font-size: 14px; font-size: 14px;
font-weight: bold; font-weight: bold;
} }
+1 -1
View File
@@ -1,6 +1,6 @@
/** ********** Fonts ********** **/ /** ********** Fonts ********** **/
* { * {
font-family: "JetBrains Mono", "Iosevka Nerd Font", archcraft, sans-serif; font-family: "JetBrains Mono", "Iosevka Nerd Font", sans-serif;
font-size: 12px; font-size: 12px;
} }
+17
View File
@@ -0,0 +1,17 @@
# 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"
+8 -19
View File
@@ -1,21 +1,10 @@
{ {pkgs, ...}: {
pkgs,
pkgs-stable,
...
}:
{
# TODO vscode & chrome both have wayland support, but they don't work with fcitx5, need to fix it. # TODO vscode & chrome both have wayland support, but they don't work with fcitx5, need to fix it.
programs = { programs = {
# source code: https://github.com/nix-community/home-manager/blob/master/modules/programs/chromium.nix # source code: https://github.com/nix-community/home-manager/blob/master/modules/programs/chromium.nix
google-chrome = { google-chrome = {
enable = true; enable = true;
# chrome wayland support was broken on nixos-unstable branch, so fallback to stable branch for now
# https://github.com/swaywm/sway/issues/7562
package = pkgs-stable.google-chrome;
commandLineArgs = [ commandLineArgs = [
# make it use GTK_IM_MODULE if it runs with Gtk4, so fcitx5 can work with it. # make it use GTK_IM_MODULE if it runs with Gtk4, so fcitx5 can work with it.
# (only supported by chromium/chrome at this time, not electron) # (only supported by chromium/chrome at this time, not electron)
@@ -31,18 +20,18 @@
firefox = { firefox = {
enable = true; enable = true;
enableGnomeExtensions = false; enableGnomeExtensions = false;
package = pkgs-stable.firefox-wayland; # firefox with wayland support # package = pkgs.firefox-wayland; # firefox with wayland support
}; };
vscode = { vscode = {
enable = true; enable = true;
# use the stable version # use the stable version
package = pkgs-stable.vscode.override { # package = pkgs.vscode.override {
commandLineArgs = [ # commandLineArgs = [
# make it use text-input-v1, which works for kwin 5.27 and weston # # make it use text-input-v1, which works for kwin 5.27 and weston
# "--enable-wayland-ime" # # "--enable-wayland-ime"
]; # ];
}; # };
# let vscode sync and update its configuration & extensions across devices, using github account. # let vscode sync and update its configuration & extensions across devices, using github account.
# userSettings = {}; # userSettings = {};
+2
View File
@@ -0,0 +1,2 @@
#!/usr/bin/env bash
xrandr --output DP-2 --brightness $@
+22 -24
View File
@@ -45,7 +45,7 @@ bindsym $mod+6 workspace $ws6
bindsym $mod+7 workspace $ws7 bindsym $mod+7 workspace $ws7
bindsym $mod+8 workspace $ws8 bindsym $mod+8 workspace $ws8
bindsym $mod+9 workspace $ws9 bindsym $mod+9 workspace $ws9
bindsym $mod+0 workspace $ws10 bindsym $mod+0 workspace $ws0
# switch to workspace with numpad keys # switch to workspace with numpad keys
bindcode $mod+87 workspace 1 bindcode $mod+87 workspace 1
@@ -57,7 +57,7 @@ bindcode $mod+85 workspace 6
bindcode $mod+79 workspace 7 bindcode $mod+79 workspace 7
bindcode $mod+80 workspace 8 bindcode $mod+80 workspace 8
bindcode $mod+81 workspace 9 bindcode $mod+81 workspace 9
bindcode $mod+90 workspace 10 bindcode $mod+90 workspace 0
# move focused container to workspace # move focused container to workspace
bindsym $mod+Shift+1 move container to workspace $ws1 bindsym $mod+Shift+1 move container to workspace $ws1
@@ -69,7 +69,7 @@ bindsym $mod+Shift+6 move container to workspace $ws6
bindsym $mod+Shift+7 move container to workspace $ws7 bindsym $mod+Shift+7 move container to workspace $ws7
bindsym $mod+Shift+8 move container to workspace $ws8 bindsym $mod+Shift+8 move container to workspace $ws8
bindsym $mod+Shift+9 move container to workspace $ws9 bindsym $mod+Shift+9 move container to workspace $ws9
bindsym $mod+Shift+0 move container to workspace $ws10 bindsym $mod+Shift+0 move container to workspace $ws0
# resize window (you can also use the mouse for that): # resize window (you can also use the mouse for that):
bindsym $mod+r mode "resize" bindsym $mod+r mode "resize"
@@ -80,7 +80,7 @@ bindsym $mod+r mode "resize"
###################################### ######################################
# start a terminal # start a terminal
bindsym $mod+Return exec alacritty bindsym $mod+Return exec kitty
# kill focused window # kill focused window
bindsym $mod+q kill bindsym $mod+q kill
@@ -100,12 +100,6 @@ bindsym $mod+Shift+c reload
# restart i3 inplace (preserves your layout/session, can be used to update i3) # restart i3 inplace (preserves your layout/session, can be used to update i3)
bindsym $mod+Shift+r restart bindsym $mod+Shift+r restart
# keybinding in fancy rofi (automated):
bindsym F1 exec ~/.config/i3/scripts/keyhint-2
# alternative
# keybinding list in editor:
# bindsym $mod+F1 exec xed ~/.config/i3/keybindings
# Backlight control # Backlight control
bindsym XF86MonBrightnessUp exec xbacklight +10 && notify-send "Brightness - $(xbacklight -get | cut -d '.' -f 1)%" bindsym XF86MonBrightnessUp exec xbacklight +10 && notify-send "Brightness - $(xbacklight -get | cut -d '.' -f 1)%"
bindsym XF86MonBrightnessDown exec xbacklight -10 && notify-send "Brightness - $(xbacklight -get | cut -d '.' -f 1)%" bindsym XF86MonBrightnessDown exec xbacklight -10 && notify-send "Brightness - $(xbacklight -get | cut -d '.' -f 1)%"
@@ -191,6 +185,9 @@ bindsym Print exec scrot ~/%Y-%m-%d-%T-screenshot.png && notify-send "Screenshot
bindsym $mod+Shift+p exec ~/.config/i3/scripts/power-profiles bindsym $mod+Shift+p exec ~/.config/i3/scripts/power-profiles
bindsym $mod+Shift+m exec ~/.config/i3/scripts/restore-idols-monitor.sh
########################################## ##########################################
# configuration for workspace behaviour: # # configuration for workspace behaviour: #
########################################## ##########################################
@@ -199,14 +196,15 @@ bindsym $mod+Shift+p exec ~/.config/i3/scripts/power-profiles
# We use variables to avoid repeating the names in multiple places. # We use variables to avoid repeating the names in multiple places.
set $ws1 "1: " set $ws1 "1: "
set $ws2 "2: " set $ws2 "2: "
set $ws3 "3:" # visual studio code
set $ws4 "4:" set $ws3 "3: "
set $ws5 "5:" set $ws4 "4: "
set $ws6 "6" set $ws5 "5: "
set $ws7 "7" set $ws6 "6: "
set $ws8 "8" set $ws7 "7: "
set $ws9 "9" set $ws8 "8:"
set $ws10 "10" set $ws9 "9:"
set $ws0 "10: "
# use workspaces on different displays: # use workspaces on different displays:
# where you have to replace VGA-0/HDMI-0 with the names for your displays # where you have to replace VGA-0/HDMI-0 with the names for your displays
@@ -215,14 +213,13 @@ workspace $ws1 output DP-2
workspace $ws6 output HDMI-0 workspace $ws6 output HDMI-0
# bind program to workspace and focus to them on startup: # bind program to workspace and focus to them on startup:
assign [class="Terminal"] $ws1 # assign [class="kitty"] $ws1
assign [class="(?i)firefox"] $ws2 assign [class="(?i)firefox"] $ws2
assign [class="Thunar"] $ws3 assign [class="Thunar"] $ws8
assign [class="thunderbird"] $ws4 assign [class="thunderbird"] $ws9
assign [class="TelegramDesktop"] $ws5 assign [class="TelegramDesktop"] $ws5
# automatic set focus new window if it opens on another workspace than the current: # automatic set focus new window if it opens on another workspace than the current:
for_window [class=Terminal] focus
for_window [class=(?i)firefox] focus for_window [class=(?i)firefox] focus
for_window [class=Thunar] focus for_window [class=Thunar] focus
for_window [class=Thunderbird] focus for_window [class=Thunderbird] focus
@@ -282,8 +279,9 @@ exec --no-startup-id flameshot
# https://github.com/nwg-piotr/autotiling # https://github.com/nwg-piotr/autotiling
exec_always --no-startup-id autotiling exec_always --no-startup-id autotiling
# Autostart apps as you like exec --no-startup-id i3-msg "workspace $ws2; exec firefox"
exec --no-startup-id sleep 1 && Terminal
exec --no-startup-id sleep 1 && ~/.config/i3/scripts/restore-idols-monitor.sh
################## ##################
# floating rules # # floating rules #
+19 -15
View File
@@ -1,37 +1,41 @@
{ {pkgs, ...}: {
pkgs, # i3 window manager's config, based on https://github.com/endeavouros-team/endeavouros-i3wm-setup
config,
lib,
...
}: {
# i3 配置,基于 https://github.com/endeavouros-team/endeavouros-i3wm-setup
# 直接从当前文件夹中读取配置文件作为配置内容
imports = [ imports = [
./x11-apps.nix ./x11-apps.nix
]; ];
home.file = {
# wallpaper, binary file # wallpaper, binary file
home.file.".config/i3/wallpaper.png".source = ../wallpapers/wallpaper.png; ".config/i3/wallpaper.png".source = ../wallpapers/wallpaper.png;
home.file.".config/i3/config".source = ./config; ".config/i3/config".source = ./config;
home.file.".config/i3/i3blocks.conf".source = ./i3blocks.conf; ".config/i3/i3blocks.conf".source = ./i3blocks.conf;
home.file.".config/i3/keybindings".source = ./keybindings; ".config/i3/scripts" = {
home.file.".config/i3/scripts" = {
source = ./scripts; source = ./scripts;
# copy the scripts directory recursively # copy the scripts directory recursively
recursive = true; recursive = true;
executable = true; # make all scripts executable executable = true; # make all scripts executable
}; };
".config/i3/layouts" = {
source = ./layouts;
recursive = true;
};
# rofi is a application launcher and dmenu replacement # rofi is a application launcher and dmenu replacement
home.file.".config/rofi" = { ".config/rofi" = {
source = ./rofi-conf; source = ./rofi-conf;
# copy the scripts directory recursively # copy the scripts directory recursively
recursive = true; recursive = true;
}; };
".local/bin/bright" = {
source = ./bin/bright;
executable = true;
};
# xrandr - set primary screen # xrandr - set primary screen
home.file.".screenlayout/monitor.sh".source = ./dual-monitor-4k-1080p.sh; ".screenlayout/monitor.sh".source = ./dual-monitor-4k-1080p.sh;
};
# allow fontconfig to discover fonts and configurations installed through home.packages # allow fontconfig to discover fonts and configurations installed through home.packages
fonts.fontconfig.enable = true; fonts.fontconfig.enable = true;
+1 -2
View File
@@ -18,7 +18,7 @@ markup=pango
[terminal] [terminal]
full_text=  full_text= 
color=#807dfe color=#807dfe
command=i3-msg -q exec alacritty command=i3-msg -q exec kitty
[browser] [browser]
full_text=  full_text= 
@@ -64,7 +64,6 @@ border_right=0
border_bottom=0 border_bottom=0
border_left=0 border_left=0
[cpu_stats] [cpu_stats]
command=(mpstat 1 1 | grep Average | awk '{ printf "%04.1f<span color=\"#ff5555\">%</span>", (100 - $12) }') && (sensors | grep 'Package id 0:\|Tdie' | grep ':[ ]*+[0-9]*.[0-9]*' -o | awk '{ printf "%s<span color=\"#ff5555\">°C</span>\n", $2 }') command=(mpstat 1 1 | grep Average | awk '{ printf "%04.1f<span color=\"#ff5555\">%</span>", (100 - $12) }') && (sensors | grep 'Package id 0:\|Tdie' | grep ':[ ]*+[0-9]*.[0-9]*' -o | awk '{ printf "%s<span color=\"#ff5555\">°C</span>\n", $2 }')
interval=2 interval=2
-106
View File
@@ -1,106 +0,0 @@
EndeavourOS i3wm Keybindings cheat sheet:
--> to update this run the following command:
wget --backups=1 https://raw.githubusercontent.com/endeavouros-team/endeavouros-i3wm-setup/main/.config/i3/keybindings -P ~/.config/i3/
All sources and updates are available at GitHub:
https://github.com/endeavouros-team/endeavouros-i3wm-setup
For reference consult our WIKI:
https://discovery.endeavouros.com/window-tiling-managers/i3-wm/
 = windows key
# start alacritty
+Return
# kill focused window
+q
# Application menu search by typing (fancy Rofi menu):
+d
# Window switcher menu (fancy Rofi menu):
+t
# fancy exit-menu on bottom right:
+Shift+e
# Lock the system
# lock with a picture or blurring the screen (options in config)
+l
# reload the configuration file
+Shift+c
# restart i3 inplace (preserves your layout/session, can be used to upgrade i3)
+Shift+r
# keybinding in fancy rofi (automated)
F1
# full keybinding list in editor:
+F1
# change window focus
+j focus left
+k focus down
+b focus up
+o focus right
# alternatively, you can use the cursor keys:
+Left focus left
+Down focus down
+Up focus up
+Right focus right
# move a focused window
+Shift+j move left
+Shift+k move down
+Shift+b move up
+Shift+o move right
# alternatively, you can use the cursor keys:
+Shift+Left move left
+Shift+Down move down
+Shift+Up move up
+Shift+Right move right
# split in horizontal orientation
+h split h
# split in vertical orientation
+v split v
# enter fullscreen mode for the focused container
+f fullscreen toggle
# change container layout (stacked, tabbed, toggle split)
+s layout stacking
+g layout tabbed
+e layout toggle split
# toggle tiling / floating
+Shift+space floating toggle
# change focus between tiling / floating windows
+space focus mode_toggle
# focus the parent container
+a focus parent
# focus the child container
#+d focus child
# resize floating window
+right mouse button
## Multimedia Keys
# Redirect sound to headphones
+p
## App shortcuts
+w starts Firefox
+n starts Thunar
 Button screenshot
+15
View File
@@ -0,0 +1,15 @@
# I3 Layouts
This directory contains the layouts for i3.
The are generated using the `i3-save-tree` command, and need to customized to make it work.
See the [i3 user guide](https://i3wm.org/docs/layout-saving.html) for more information.
## Idol's Monitor
the `idol-monitor.json` file contains the layout showing my nix distributed building monitor, it's a 2x2 grid of terminals running `btop`:
![](/_img/nix-distributed-building.webp)
the layout & btop are autostarted by i3.
+116
View File
@@ -0,0 +1,116 @@
// vim:ts=4:sw=4:et
{
// splitv split container with 2 children
"border": "pixel",
"floating": "auto_off",
"layout": "splitv",
"marks": [],
"percent": 0.5,
"type": "con",
"nodes": [
{
"border": "pixel",
"current_border_width": 2,
"floating": "auto_off",
"geometry": {
"height": 600,
"width": 800,
"x": 0,
"y": 0
},
"marks": [],
"name": "Alacritty",
"percent": 0.5,
"swallows": [
{
"class": "^Alacritty$",
"instance": "^Alacritty$",
"machine": "^ai$",
"title": "^ai$"
}
],
"type": "con"
},
{
"border": "pixel",
"current_border_width": 2,
"floating": "auto_off",
"geometry": {
"height": 600,
"width": 800,
"x": 0,
"y": 0
},
"marks": [],
"name": "Alacritty",
"percent": 0.5,
"swallows": [
{
"class": "^Alacritty$",
"instance": "^Alacritty$",
"machine": "^ai$",
"title": "^ruby$"
}
],
"type": "con"
}
]
}
{
// splitv split container with 2 children
"border": "pixel",
"floating": "auto_off",
"layout": "splitv",
"marks": [],
"percent": 0.5,
"type": "con",
"nodes": [
{
"border": "pixel",
"current_border_width": 2,
"floating": "auto_off",
"geometry": {
"height": 600,
"width": 800,
"x": 0,
"y": 0
},
"marks": [],
"name": "Alacritty",
"percent": 0.5,
"swallows": [
{
"class": "^Alacritty$",
"instance": "^Alacritty$",
"machine": "^ai$",
"title": "^aquamarine$"
}
],
"type": "con"
},
{
"border": "pixel",
"current_border_width": 2,
"floating": "auto_off",
"geometry": {
"height": 600,
"width": 800,
"x": 0,
"y": 0
},
"marks": [],
"name": "Alacritty",
"percent": 0.5,
"swallows": [
{
"class": "^Alacritty$",
"instance": "^Alacritty$",
"machine": "^ai$",
"title": "^kana$"
}
],
"type": "con"
}
]
}
Regular → Executable
View File
+18
View File
@@ -0,0 +1,18 @@
#!/usr/bin/env bash
#######################################################
#
# This script restores the layout of the idols monitor.
#
#######################################################
# load the ssh key for idols first
ssh-add ~/.ssh/ai-idols
# restore the layout of workspace 1
i3-msg "workspace 10: ; append_layout ~/.config/i3/layouts/idols-monitor.json"
# open applications, note that --command must be the last option
i3-msg -t command "exec alacritty --title 'ai' --command 'btop'"
i3-msg -t command "exec alacritty --title 'aquamarine' --command ssh -t ryan@aquamarine 'btop'"
i3-msg -t command "exec alacritty --title 'ruby' --command ssh -t ryan@ruby 'btop'"
i3-msg -t command "exec alacritty --title 'kana' --command ssh -t ryan@kana 'btop'"
+2 -6
View File
@@ -1,15 +1,11 @@
{ {pkgs, ...}: {
pkgs,
...
}: {
home.packages = with pkgs; [ home.packages = with pkgs; [
firefox firefox
xsel # for clipboard support in x11, required by tmux's clipboard support
]; ];
# TODO vscode & chrome both have wayland support, but they don't work with fcitx5, need to fix it. # TODO vscode & chrome both have wayland support, but they don't work with fcitx5, need to fix it.
programs = { programs = {
# source code: https://github.com/nix-community/home-manager/blob/master/modules/programs/chromium.nix # source code: https://github.com/nix-community/home-manager/blob/master/modules/programs/chromium.nix
google-chrome = { google-chrome = {
enable = true; enable = true;
+27
View File
@@ -0,0 +1,27 @@
{ username, ... }: {
imports = [
../base/server
./base
];
# Home Manager needs a bit of information about you and the
# paths it should manage.
home = {
username = username;
homeDirectory = "/home/${username}";
# This value determines the Home Manager release that your
# configuration is compatible with. This helps avoid breakage
# when a new Home Manager release introduces backwards
# incompatible changes.
#
# You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version
# changes in each release.
stateVersion = "22.11";
};
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 MiB

After

Width:  |  Height:  |  Size: 32 B

+1
View File
@@ -0,0 +1 @@
jiaocha_anime-girls_seagulls.jpg

Before

Width:  |  Height:  |  Size: 5.5 MiB

After

Width:  |  Height:  |  Size: 32 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 765 KiB

+31 -7
View File
@@ -1,10 +1,34 @@
# My MacBook Pro - Computer for Business { username, ... } @ args:
{ pkgs, ... } @ args: #############################################################
#
{ # Harmonica - my MacBook Pro 2020 13-inch, mainly for business.
#
#############################################################
let
hostname = "harmonica";
in {
imports = [ imports = [
../../modules/darwin/core.nix ../../modules/darwin
../../secrets/darwin.nix
]; ];
nixpkgs.overlays = import ../../overlays args;
networking.hostName = hostname;
networking.computerName = hostname;
system.defaults.smb.NetBIOSName = hostname;
# Define a user account. Don't forget to set a password with passwd.
users.users."${username}" = {
home = "/Users/${username}";
description = username;
# set user's default shell back to zsh
# `chsh -s /bin/zsh`
# DO NOT change the system's default shell to nushell! it will break some apps!
# It's better to change only starship/alacritty/vscode's shell to nushell!
};
nix.settings.trusted-users = [username];
} }

Some files were not shown because too many files have changed in this diff Show More