Compare commits

...

270 Commits

Author SHA1 Message Date
Ryan Yin d51025fc6b feat: using claude-code with kimi k2 2025-07-17 15:29:04 +08:00
Ryan Yin 737b892bad flake.lock: Update
Flake lock file updates:

• Updated input 'mysecrets':
    'git+ssh://git@github.com/ryan4yin/nix-secrets.git?ref=refs/heads/main&rev=a914c8281a8ad1df332cfcaf9a1024ecb7ccd9d3&shallow=1' (2025-07-12)
  → 'git+ssh://git@github.com/ryan4yin/nix-secrets.git?ref=refs/heads/main&rev=a231913597362c15c71fd9212cef5092ae85a64c&shallow=1' (2025-07-16)
2025-07-17 15:29:04 +08:00
Ryan Yin 2e8ec1406e fix(home/darwin): aerospace - clash-verge 2025-07-17 13:09:14 +08:00
Ryan Yin c231ba66f8 chore: nushell do not use history.txt now 2025-07-16 23:00:23 +08:00
Ryan Yin 2af4b221a7 chore: persistent cache & uv's env 2025-07-16 22:53:59 +08:00
Ryan Yin 29372222e4 feat: add pipx & uv for python 2025-07-16 22:44:17 +08:00
Ryan Yin 653f1586c3 fix: persistent claude-code & gemini-cli's state 2025-07-16 22:34:47 +08:00
Ryan Yin 99cd3f8936 chore: remove gemini, install it via npm instead 2025-07-16 22:25:15 +08:00
Ryan Yin f51f364cfa feat(home/linux/base): make npm install -g <pkg> happey 2025-07-16 22:25:15 +08:00
Ryan Yin ec6211ff5c chore: minor refactor 2025-07-16 22:25:15 +08:00
Ryan Yin 7b5c7064e0 feat: hyprland - touchpad for macbook 2025-07-15 16:22:24 +08:00
Ryan Yin a30535af6a feat: apple-silicon - try to use m2's gpu 2025-07-15 14:47:42 +08:00
Ryan Yin 28dee2775c fix: wechat - input method 2025-07-15 10:12:52 +08:00
Ryan Yin 173aa199e1 chore: hyprland - add wechat into windowrules 2025-07-15 10:02:04 +08:00
Ryan Yin f9456a3861 chore: hyprland - adjust window rules 2025-07-15 09:53:10 +08:00
Ryan Yin c715b34439 chore: aerospace - adjust window rules 2025-07-15 09:42:00 +08:00
Ryan Yin 20685f8927 Merge pull request #195 from ryan4yin/apple-silicon
feat: remove x86_64-darwin, add new nixos host on macbook pro m2
2025-07-13 10:53:43 +08:00
Ryan Yin bccf7db486 fix: foot - disable dpi-aware 2025-07-13 04:08:10 +08:00
Ryan Yin c612aa73de fix: shoukei - monitor scale 2025-07-13 04:03:56 +08:00
Ryan Yin cdb8eb26be chore: update flake.lock 2025-07-13 03:56:24 +08:00
Ryan Yin 50451d9da9 fix: shoukei - filter packages that do not support aarch64 2025-07-13 02:49:36 +08:00
Ryan Yin ae0158b226 fix: shoukei - allowUnsupportedSstem 2025-07-13 02:42:32 +08:00
Ryan Yin fde384a626 fix: shoukei - asahi-fwextract 2025-07-13 02:37:56 +08:00
Ryan Yin 710ddc3263 fix: shoukei - filter packages that do not support aarch64 2025-07-13 02:33:52 +08:00
Ryan Yin 264611e334 fix: shoukei - hardening 2025-07-13 02:12:24 +08:00
Ryan Yin cc82892eb7 fix: enable steam only on x86_64 platform 2025-07-13 02:02:30 +08:00
Ryan Yin e6f0569fd3 flake.lock: Update
Flake lock file updates:

• Updated input 'mysecrets':
    'git+ssh://git@github.com/ryan4yin/nix-secrets.git?ref=refs/heads/main&rev=6339faf0195d803c9ff4a2df6f6810be8101bf96&shallow=1' (2025-06-07)
  → 'git+ssh://git@github.com/ryan4yin/nix-secrets.git?ref=refs/heads/main&rev=a914c8281a8ad1df332cfcaf9a1024ecb7ccd9d3&shallow=1' (2025-07-12)
2025-07-13 01:51:06 +08:00
Ryan Yin 8528c6e573 fix: shoukei - hardcode nameservers 2025-07-13 01:28:10 +08:00
Ryan Yin a6d54395d3 fix: nixos-installer - enable sshd 2025-07-13 01:25:37 +08:00
Ryan Yin 323aaf0ac0 fix: preserve iwd's data 2025-07-13 00:56:09 +08:00
Ryan Yin 3561426a11 fix: docs & /boot 2025-07-13 00:52:53 +08:00
Ryan Yin 9dcafa8cc9 fix: nixos-installer - peripheralFirmwareDirectory 2025-07-13 00:22:11 +08:00
Ryan Yin c55b1c6712 fix: nixos-installer - disable canTouchEfiVariables, add iwd 2025-07-12 23:59:38 +08:00
Ryan Yin 635e38c275 fix: nixos-installer - missing nixos-apple-silicon 2025-07-12 23:52:12 +08:00
Ryan Yin a1014361a3 fix: nixos-installer - attribute 'age' missing 2025-07-12 23:47:48 +08:00
Ryan Yin db82d2d8c5 feat: remove x86_64-darwin, add new nixos host on macbook pro m2 2025-07-12 23:30:52 +08:00
Ryan Yin 77a792710a docs: outputs 2025-07-12 16:55:41 +08:00
Ryan Yin ba8b99105b docs: macOS 2025-07-12 16:54:43 +08:00
Ryan Yin 0c7e43a21b feat: add sandboxed wechat (#196) 2025-07-12 16:49:45 +08:00
Ryan Yin 9d0a3df9f9 docs: nushell config.nu 2025-07-12 15:44:00 +08:00
Ryan Yin f6a5d75f4f Merge pull request #203 from ryan4yin/catppuccin
refactor: theme - catppuccin-mocha
2025-07-12 15:31:17 +08:00
Ryan Yin 649e10525e fix: zellij - theme 2025-07-12 15:28:42 +08:00
Ryan Yin 5f68f9281f fix: zellij 2025-07-12 15:28:05 +08:00
Ryan Yin 5e311c6e42 fix: Error installing file '.config/mako/config' outside $HOME 2025-07-12 15:17:59 +08:00
Ryan Yin c8a790f2cf fix: Error installing file '.config/mako/config' outside $HOME 2025-07-12 15:08:36 +08:00
Ryan Yin fcbbfefedc feat: justfile - commit-lock-file 2025-07-11 14:40:33 +08:00
Ryan Yin 716c8baf65 flake.lock: Update
Flake lock file updates:

• Updated input 'ghostty':
    'github:ghostty-org/ghostty/8e14d262752ef02fdf5838eea5157cf46b668615?narHash=sha256-v9OPz%2BSCTSDCgdxrRQqukWsEWkJ4pNuZN20t766rt2E%3D' (2025-07-03)
  → 'github:ghostty-org/ghostty/4aa28988a6ddd9aa8b3402e4bab05ad02a0c12c6?narHash=sha256-6Fiy%2Bicid2rKXL9oKcRd3zuITSwtdnShqCPp0Evt3fM%3D' (2025-07-11)
• Updated input 'home-manager':
    'github:nix-community/home-manager/83f978812c37511ef2ffaf75ffa72160483f738a?narHash=sha256-3q35cq6BPuwIRL3IoVKYPc72r3OleeuRyf4YAPjEqzA%3D' (2025-07-04)
  → 'github:nix-community/home-manager/fab659b346c0d4252208434c3c4b3983a4b38fec?narHash=sha256-knafgng4gCjZIUMyAEWjxxdols6n/swkYnbWr%2BoF%2B1w%3D' (2025-07-11)
• Updated input 'nix-gaming':
    'github:fufexan/nix-gaming/d00203f8630983aadb57cfde60b481cd97d06659?narHash=sha256-IXBLUCMTKaMzbbs5SOqH7FEI9fRwOi3ZP6LKjttnO5o%3D' (2025-07-03)
  → 'github:fufexan/nix-gaming/62f976ed47de88323770646a9a92e4912d33585f?narHash=sha256-p2zkn8fdLvZ19MgAA5CdiuQWQ/gE3YNg1Nhbm4EAflI%3D' (2025-07-11)
• Updated input 'nix-gaming/flake-parts':
    'github:hercules-ci/flake-parts/9305fe4e5c2a6fcf5ba6a3ff155720fbe4076569?narHash=sha256-tYBdgS56eXYaWVW3fsnPQ/nFlgWi/Z2Ymhyu21zVM98%3D' (2025-06-08)
  → 'github:hercules-ci/flake-parts/77826244401ea9de6e3bac47c2db46005e1f30b5?narHash=sha256-Tyw1RjYEsp5scoigs1384gIg6e0GoBVjms4aXFfRssQ%3D' (2025-07-01)
• Updated input 'nix-gaming/flake-parts/nixpkgs-lib':
    'github:nix-community/nixpkgs.lib/656a64127e9d791a334452c6b6606d17539476e2?narHash=sha256-rQaysilft1aVMwF14xIdGS3sj1yHlI6oKQNBRTF40cc%3D' (2025-06-01)
  → 'github:nix-community/nixpkgs.lib/14a40a1d7fb9afa4739275ac642ed7301a9ba1ab?narHash=sha256-urW/Ylk9FIfvXfliA1ywh75yszAbiTEVgpPeinFyVZo%3D' (2025-06-29)
• Updated input 'nix-gaming/nixpkgs':
    'github:NixOS/nixpkgs/80d50fc87924c2a0d346372d242c27973cf8cdbf?narHash=sha256-3u6rEbIX9CN/5A5/mc3u0wIO1geZ0EhjvPBXmRDHqWM%3D' (2025-06-27)
  → 'github:NixOS/nixpkgs/c860cf0b3a0829f0f6cf344ca8de83a2bbfab428?narHash=sha256-4E7wWftF1ExK5ZEDzj41%2B9mVgxtuRV3wWCId7QAYMAU%3D' (2025-07-04)
• Updated input 'nixos-generators':
    'github:nix-community/nixos-generators/ee07ba0d36c38e9915c55d2ac5a8fb0f05f2afcc?narHash=sha256-Obh50J%2BO9jhUM/FgXtI3he/QRNiV9%2BJ53%2Bl%2BRlKSaAk%3D' (2025-05-19)
  → 'github:nix-community/nixos-generators/032decf9db65efed428afd2fa39d80f7089085eb?narHash=sha256-PeSkNMvkpEvts%2B9DjFiop1iT2JuBpyknmBUs0Un0a4I%3D' (2025-07-07)
• Updated input 'nixos-hardware':
    'github:NixOS/nixos-hardware/497ae1357f1ac97f1aea31a4cb74ad0d534ef41f?narHash=sha256-136MeWtckSHTN9Z2WRNRdZ8oRP3vyx3L8UxeBYE%2BJ9w%3D' (2025-07-02)
  → 'github:NixOS/nixos-hardware/7ced9122cff2163c6a0212b8d1ec8c33a1660806?narHash=sha256-gATnkOe37eeVwKKYCsL%2BOnS2gU4MmLuZFzzWCtaKLI8%3D' (2025-07-09)
• Updated input 'nixpak':
    'github:nixpak/nixpak/9361c8e7d5d43c64d60d2d858d2ed754f549b969?narHash=sha256-ejnxldFzqwnY791ycFOxqtPswYZ6dVtj2G4GfhSL4Fo%3D' (2025-07-03)
  → 'github:nixpak/nixpak/19942ded45bd73c74dbb44642406da0569f639a8?narHash=sha256-mbAHO0rZDBdSosV4LIk9s/3IH1ZhQY9ELixieo%2BiEns%3D' (2025-07-10)
• Updated input 'nixpkgs':
    'github:nixos/nixpkgs/3016b4b15d13f3089db8a41ef937b13a9e33a8df?narHash=sha256-P/SQmKDu06x8yv7i0s8bvnnuJYkxVGBWLWHaU%2Btt4YY%3D' (2025-06-30)
  → 'github:nixos/nixpkgs/9807714d6944a957c2e036f84b0ff8caf9930bc0?narHash=sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X%2BxgOL0%3D' (2025-07-08)
• Updated input 'nixpkgs-darwin':
    'github:nixos/nixpkgs/d55716bb59b91ae9d1ced4b1ccdea7a442ecbfdb?narHash=sha256-QWJ%2BNQbMU%2BNcU2xiyo7SNox1fAuwksGlQhpzBl76g1I%3D' (2025-07-02)
  → 'github:nixos/nixpkgs/9b008d60392981ad674e04016d25619281550a9d?narHash=sha256-mgFxAPLWw0Kq%2BC8P3dRrZrOYEQXOtKuYVlo9xvPntt8%3D' (2025-07-08)
• Updated input 'nixpkgs-ollama':
    'github:nixos/nixpkgs/3016b4b15d13f3089db8a41ef937b13a9e33a8df?narHash=sha256-P/SQmKDu06x8yv7i0s8bvnnuJYkxVGBWLWHaU%2Btt4YY%3D' (2025-06-30)
  → 'github:nixos/nixpkgs/9807714d6944a957c2e036f84b0ff8caf9930bc0?narHash=sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X%2BxgOL0%3D' (2025-07-08)
• Updated input 'nixpkgs-stable':
    'github:nixos/nixpkgs/b43c397f6c213918d6cfe6e3550abfe79b5d1c51?narHash=sha256-1Cu92i1KSPbhPCKxoiVG5qnoRiKTgR5CcGSRyLpOd7Y%3D' (2025-06-29)
  → 'github:nixos/nixpkgs/88983d4b665fb491861005137ce2b11a9f89f203?narHash=sha256-7orTnNqkGGru8Je6Un6mq1T8YVVU/O5kyW4%2Bf9C1mZQ%3D' (2025-07-08)
• Updated input 'nixpkgs-unstable':
    'github:nixos/nixpkgs/3016b4b15d13f3089db8a41ef937b13a9e33a8df?narHash=sha256-P/SQmKDu06x8yv7i0s8bvnnuJYkxVGBWLWHaU%2Btt4YY%3D' (2025-06-30)
  → 'github:nixos/nixpkgs/9807714d6944a957c2e036f84b0ff8caf9930bc0?narHash=sha256-LwWRsENAZJKUdD3SpLluwDmdXY9F45ZEgCb0X%2BxgOL0%3D' (2025-07-08)
2025-07-11 14:40:25 +08:00
Ryan Yin 90d411b943 fix(darwin): homebrew renamed some casks 2025-07-04 17:48:52 +08:00
Ryan Yin 468e9483cf fix(darwin): revert nixpkgs-darwin, add clash-verge-rev 2025-07-04 17:42:53 +08:00
Ryan Yin c4a33c55aa feat: open ports for testing 2025-07-04 17:09:48 +08:00
Ryan Yin 1e937dc832 chore: udpate flake.lock 2025-07-04 10:06:47 +08:00
Ryan Yin 8af80214f5 feat: neo-tree.nvim - do not hide dotfiles 2025-07-02 21:18:09 +08:00
Ryan Yin a144093227 feat: allow to modify /etc/hosts for testing 2025-07-01 16:20:52 +08:00
Ryan Yin 0a05224ffe chore: neovim - update plugins 2025-07-01 16:19:38 +08:00
Ryan Yin f766a3b196 fix: neovim - neo-tree 2025-06-30 14:10:17 +08:00
Ryan Yin 58225d7978 feat: justfile - clean 2025-06-29 15:16:29 +08:00
Ryan Yin ffee47a2de chore: replace impermanence with preservation (#201) 2025-06-29 15:08:12 +08:00
Ryan Yin 0004bccc9d feat: hosts/k8s - fix k3s cidr (#200) 2025-06-29 15:00:53 +08:00
Ryan Yin aaabb5ed76 feat: hosts/k8s - replace impermanence with preservation (#199) 2025-06-29 14:56:08 +08:00
Ryan Yin dd008c3363 chore: hyprland - no_update_news=true 2025-06-29 14:01:33 +08:00
Ryan Yin 8690978d7e feat: replace impermanence with preservation (#198)
* feat: replace impermanence with preservation

* fix: This module cannot be used with scripted initrd.

* fix: permission for /var/lib/private

* chore: boot.initrd.systemd.enable

* docs: boot.initrd.luks.devices.<name>.fallbackToPassword is implied by systemd stage 1

* fix: typo
2025-06-29 13:02:36 +08:00
Ryan Yin 763167ce0d feat: replace docker with podman, fix justfile for nixpkgs-review (#197) 2025-06-29 10:32:32 +08:00
Ryan Yin 85039dd975 feat: justfile - commands for nixpkgs review 2025-06-28 15:18:34 +08:00
Ryan Yin 908d52365b chore: gemini-cli - update 2025-06-28 13:03:07 +08:00
Ryan Yin 0694dcad94 chore: update flake inputs 2025-06-28 12:23:17 +08:00
Ryan Yin 7d0da19a63 feat: idols-ai - persist aliyun's config 2025-06-28 11:47:59 +08:00
Ryan Yin 194b1db1d2 refactor: hosts/idols-ai/impermanence.nix 2025-06-28 11:46:09 +08:00
Ryan Yin cc0b099d63 feat: add gemini-cli 2025-06-27 00:39:20 +08:00
Ryan Yin 623e697343 fix: github cli 2025-06-23 15:54:06 +08:00
Ryan Yin 9aa0ff80ae feat: update flake.lock
fix: issues introduced by the update
chore: --use-remote-sudo is deprecated, use --sudo instead
2025-06-23 15:27:18 +08:00
Ryan Yin 4ec26c5e5f refactor: fonts (#194) 2025-06-22 20:13:50 +08:00
Ryan Yin 5716831d6c chore: fonts - remove unused fonts, add mono fonts for cjk
feat: more fontconfig parameters
2025-06-22 19:30:28 +08:00
Ryan Yin df06a1d7e4 fix: kmscon - show neo-tree icons
fix: darwin fonts

chore: fonts - add Sarasa Gothic
2025-06-22 17:40:59 +08:00
Ryan Yin 923fd7ae7d fix: firefox/chrome - render English's sigle quota correctly 2025-06-22 16:21:26 +08:00
Ryan Yin 970d3f9343 chore: kubectl-ai 2025-06-22 11:48:04 +08:00
Ryan Yin 5ec74c3ff5 fix: hyprland - float zoom workspace 2025-06-20 13:43:24 +08:00
Ryan Yin 17301d503c docs: hardening - more references 2025-06-19 20:45:11 +08:00
Ryan Yin 84a123b917 docs: hardening 2025-06-19 20:43:46 +08:00
Ryan Yin c8a714a05e chore: remove firejail 2025-06-19 20:01:33 +08:00
Ryan Yin 8584c3c98b fix: nixpaks - access gtk/hyprland portals 2025-06-19 00:14:19 +08:00
Ryan Yin 9849923180 refactor: nixpak apps 2025-06-19 00:13:49 +08:00
Ryan Yin 20194262f2 feat: nixpaks - add music/video dirs for firefox & qq 2025-06-19 00:04:58 +08:00
Ryan Yin 8ba75c5128 fix: nixpaks.firefox - browserpass extension 2025-06-19 00:03:39 +08:00
Ryan Yin 915af0c868 fix: hyprland - windowrule for zoom meeting 2025-06-18 13:08:31 +08:00
Ryan Yin 37813ce6f1 chore: neovim - Lazy Update 2025-06-16 21:39:43 +08:00
Ryan Yin 8e67a6d825 fix: neovim - neo-tree.nvim - hidden files 2025-06-16 21:39:22 +08:00
Ryan Yin 4c8b973e2c chore: nix flake update 2025-06-16 21:25:57 +08:00
Ryan Yin fb0f89d975 feat: fcitx5 - wayland support 2025-06-14 20:32:15 +08:00
Ryan Yin 710f547074 docs: fcitx5 rime-data 2025-06-14 20:28:13 +08:00
Ryan Yin 50feead9e8 feat: darwin - add a menu bar manager 2025-06-10 00:14:16 +08:00
Ryan Yin de1513587a feat: alacritty - do not show title bar & window title 2025-06-09 23:52:59 +08:00
Ryan Yin a86789c5b8 feat: kitty - do not show title bar & window title 2025-06-09 23:46:56 +08:00
Ryan Yin e46d101c9f feat: darwin - add cursor ai editor 2025-06-09 23:27:13 +08:00
Ryan Yin 217a624bc7 feat: darwin - use tailscale app instead of cli version 2025-06-09 22:05:21 +08:00
Ryan Yin 7087ef3024 docs: tailscale 2025-06-09 10:16:24 +08:00
Ryan Yin e84d88fdc9 fix: loki-operational - trail comma 2025-06-09 03:12:22 +08:00
Ryan Yin d450dc1704 chore: grafana-loki - add route=otlp_v1_logs 2025-06-09 03:10:03 +08:00
Ryan Yin 8a2ff48bbc chore: grafana-loki - remove promtail related charts 2025-06-09 03:06:36 +08:00
Ryan Yin d8d7010dc0 fix: loki-operational 2025-06-09 03:02:18 +08:00
Ryan Yin f03183e2d9 fix: loki-mixin - remove label - job (#193) 2025-06-09 02:57:00 +08:00
Ryan Yin c1959ee0b9 feat: grafana datasource - add loki 2025-06-08 20:05:25 +08:00
Ryan Yin a6ea7f5d77 chore: vmagent remote write via https, disable http access 2025-06-08 19:13:15 +08:00
Ryan Yin a37d99f069 chore: remove the unused loki buckets 2025-06-08 19:13:15 +08:00
Ryan Yin 7c2de23806 chore: minio bucket loki - add lifecycle rules 2025-06-08 19:13:15 +08:00
Ryan Yin e12afe7cea feat: infra - remove openobserve, add loki 2025-06-08 19:13:15 +08:00
Ryan Yin 77ed0378d1 feat: IPv6 (#192)
* feat: custom ipv6 routes for all hosts
* fix: ipv6 - k3s+cilium
2025-06-08 19:12:55 +08:00
Ryan Yin 10924e67e1 feat: avante.nvim - update providers 2025-06-07 16:09:32 +08:00
Ryan Yin 285662df1e feat: persistent joplin & cursor's config 2025-06-07 11:40:54 +08:00
Ryan Yin a2101bd74f chore: update nvim plugins 2025-06-07 11:05:17 +08:00
Ryan Yin 4fb61ddc59 fix: hyprland with nvidia 2025-06-07 11:04:55 +08:00
Ryan Yin a3e99c913f chore: idols-ai - disable hdr for all monitors 2025-06-07 09:50:50 +08:00
Ryan Yin d2a6f28043 feat: git - use iso format for date 2025-06-06 09:07:16 +08:00
Ryan Yin 04c3c88152 feat(modules/nixos/remote-desktop): enable tailscale & sunshine 2025-06-05 10:59:17 +08:00
Ryan Yin c4e268682a fix: google-chrome CVE 2025-06-05 10:59:17 +08:00
Ryan Yin c070abe60e feat: update all nixpkgs inputs 2025-06-05 10:59:17 +08:00
Ryan Yin f6b2e42776 chore(nixos): brew - use bfsu mirror 2025-06-05 10:49:44 +08:00
Ryan Yin 0c9ad09cf2 fix: idols-ai - persist work code 2025-06-03 17:21:18 +08:00
Ryan Yin c7e6ef3293 fix: idols-ai - disable dhcp 2025-06-03 17:06:58 +08:00
Ryan Yin 0eca8029f1 chore: persist gcloud's data 2025-06-03 16:42:23 +08:00
Ryan Yin 67609dfd9f fix: persist zoom's config 2025-06-03 15:38:29 +08:00
Ryan Yin 72403971ed feat: nixos desktop - add flatpak 2025-06-03 14:33:50 +08:00
Ryan Yin 72572a87d6 chore: persist zoom's data 2025-06-03 11:42:38 +08:00
Ryan Yin 39c98598d5 chore: use chrome by default 2025-06-03 11:38:41 +08:00
Ryan Yin 88cee1016d chore: adjust hypridle's timeout 2025-06-02 21:49:26 +08:00
Ryan Yin 7b5b23ce29 docs: IPv6AcceptRA 2025-06-02 17:41:18 +08:00
Ryan Yin fa2e7ae0a4 feat: idols-ai - set ipv6 routes & link-local address 2025-06-02 17:34:54 +08:00
Ryan Yin 34297e2cd6 fix: hyprdile - do not suspend the system due to issues with HDR+hyprland 2025-06-02 14:43:38 +08:00
Ryan Yin db711d5ff8 fix: nvim - update depends, remove img-clip.nvim due to performance issues 2025-06-02 14:17:12 +08:00
Ryan Yin 756ccca234 chore: hyprland - remove some unused keybindings 2025-06-02 11:26:10 +08:00
Ryan Yin ca627a1b28 feat: hyprland - launch my daily-used apps at startup 2025-06-02 10:59:04 +08:00
Ryan Yin bc36220606 fix: flameshot have issues on wayland with dual monitors, remove it 2025-06-01 22:23:30 +08:00
Ryan Yin c6113d6f28 feat: waybar - start via systemd, update config 2025-06-01 20:42:45 +08:00
Ryan Yin d8ba9671fc fix: hyprland - windowrules 2025-06-01 20:04:22 +08:00
Ryan Yin b065d3381f feat: hyprland - bind workspaces to monitors 2025-06-01 19:47:19 +08:00
Ryan Yin 3818f9dabf feat: gammastep - adjust temperature 2025-06-01 19:33:11 +08:00
Ryan Yin a97baf175c feat: gammastep - do not adjust brightness via gamma 2025-06-01 19:19:58 +08:00
Ryan Yin 49796cdc50 feat: idols-ai - dual monitor with hdr enabled 2025-06-01 19:10:52 +08:00
Ryan Yin fa9aaa6d27 feat(home/linux/gui/hyprland): hypridle & windowrules & keybindings 2025-06-01 14:42:20 +08:00
Ryan Yin 41be352b2c chore(home/linux/gui/hyprland): keybindings for audio/backlight 2025-06-01 10:56:07 +08:00
Ryan Yin 4c38a38848 chore: remove lisp 2025-06-01 10:22:47 +08:00
Ryan Yin 127a4362b5 chore: remove idea ide 2025-06-01 10:15:37 +08:00
Ryan Yin fcb1f200ed chore: remove duplicated config for foot terminal 2025-06-01 01:39:34 +08:00
Ryan Yin a17afea08c chore: remove cursor ai editor 2025-06-01 01:32:56 +08:00
Ryan Yin 4080bad9df chore(home/linux/gui/hyprland): remove scripts & unused packages, use hyprlock & hypridle 2025-06-01 01:10:07 +08:00
Ryan Yin 0342d55c4f chore(home/linux/gui/hyprland): remove script for brightness adjustment 2025-05-31 23:47:00 +08:00
Ryan Yin b612932b17 chore(home/linux/gui/hyprland): remove music player - mpd 2025-05-31 23:39:15 +08:00
Ryan Yin e53e7d80e4 refactor(home/linux/gui/hyprland): refactor hyprland config 2025-05-31 23:20:45 +08:00
Ryan Yin 8b2842026a chore: remove xorg server 2025-05-31 21:35:04 +08:00
Ryan Yin b1eede94f6 fix(home): Please remove all nixpkgs options when using home-manager.useGlobalPkgs 2025-05-31 20:33:17 +08:00
Ryan Yin cc1004bf29 chore: remove insecure packages 2025-05-31 12:40:18 +08:00
Ryan Yin fa21a9b7ec chore: update flake inputs, fix error: substituteAll has been removed. 2025-05-31 12:11:47 +08:00
Ryan Yin 927d97deed chore: comment out inputs for waydroid 2025-05-31 12:07:04 +08:00
Ryan Yin c88a7a6723 feat(home/linux/gui): zoom-us - support xdg-desktop-portal-hyprland 2025-05-31 12:03:03 +08:00
Ryan Yin 149f06c645 refactor(modules/nixos/desktop): xdg.nix 2025-05-31 11:41:49 +08:00
Ryan Yin fff0dc22c2 feat(home/linux/gui/base/xdg): adjust mimeApps 2025-05-31 11:31:53 +08:00
Ryan Yin a250432a59 feat: add zoom-us for meeting 2025-05-31 11:15:19 +08:00
Ryan Yin 3a41b2b2cf fix: wayland - xdgOpenUsePortal 2025-05-31 11:13:22 +08:00
Ryan Yin 2645d9e279 feat(home/linux/gui/base/fcitx5): default to en-us instead of rime 2025-05-31 11:07:49 +08:00
Ryan Yin c539962c96 fix: flameshot on hyprland 2025-05-30 21:52:25 +08:00
Ryan Yin 4a4427cf2d chore: update mysecrets 2025-05-29 17:51:31 +08:00
Ryan Yin 6090b28a98 fix: programs.home-manager.enable is useless when use hm as a nixos module 2025-05-29 17:48:10 +08:00
Ryan Yin 8dee9864fc feat: neovim - update avante.nvim & ollama 2025-05-29 17:42:59 +08:00
Ryan Yin 413cc67a4a chore: remove alias-for-work.bash 2025-05-29 17:41:44 +08:00
Ryan Yin f5f8b1ecc3 feat(hardening/nixpaks): adjust app's direcotry permission 2025-05-29 12:06:18 +08:00
Ryan Yin e370856b94 feat(home/base/tui/cloud): add terraform cli config file 2025-05-29 11:10:23 +08:00
Ryan Yin 60f57b6ea2 fix: zoxide not a directory - https://github.com/nix-community/home-manager/issues/6856 2025-05-22 10:20:45 +08:00
Ryan Yin e95476d7b4 fix: kubectl-ai version, remove broken app - gowin-eda-edu-ide 2025-05-22 10:20:09 +08:00
Ryan Yin 50c911ea2d Merge pull request #188 from ryan4yin/xdg-terminal-exec
feat(nixos): desktop - Add xdg-terminal-exec #185
2025-05-21 13:20:07 +08:00
Ryan Yin 978ebab16f Merge pull request #189 from ryan4yin/nixos-25.05
feat: bump to nixos 25.05
2025-05-21 13:12:59 +08:00
Ryan Yin e4d2eb35dc fix: revert stateVersion to 24.11 for some servers 2025-05-21 12:54:45 +08:00
Ryan Yin dc4a7d8827 fix(darwin): darwin-rebuild - unknown option 2025-05-21 12:54:29 +08:00
Ryan Yin c99e1378c5 fix(darwin): run darwin-rebuild using sudo 2025-05-21 12:49:25 +08:00
Ryan Yin 19faab32f7 fix(darwin): nix-darwin - activation option & zsh option 2025-05-21 12:49:25 +08:00
Ryan Yin 69e0572df1 fix(nixos): remove ventoy(insecure) & aseprite, fix warnings 2025-05-21 12:41:53 +08:00
Ryan Yin a2007fd88c feat: bump to nixos 25.05 2025-05-21 12:16:00 +08:00
Ryan Yin d66ca3680c feat(home/base): replace tldr with tealdeer, add more nu_scripts 2025-05-21 11:58:30 +08:00
Ryan Yin 4c474f399c feat(home/base/core/container): more kubectl plugins 2025-05-21 11:10:31 +08:00
Ryan Yin bee1ef06a4 fix(hosts/idols-ai): ssh key name 2025-05-20 11:14:56 +08:00
Ryan Yin 9649a79e75 feat(home/base/tui/zellij): update config 2025-05-20 11:14:56 +08:00
Ryan Yin e2a0d429de feat(darwin): aerospace - update config 2025-05-20 09:02:19 +08:00
Ryan Yin 822a17861a feat(nixos): desktop - Add xdg-terminal-exec #185 2025-05-17 08:54:45 +08:00
Ryan Yin 9919ac8811 chore(darwin): aerospace - adjust fallback behavior 2025-05-16 23:30:16 +08:00
Ryan Yin 26384a73ed refactor(ssh): system-level ssh known_hosts & ssh config 2025-05-16 00:28:40 +08:00
Ryan Yin b44d277072 feat(ssh): Using SSH over the HTTPS port for GitHub, refactor ssh config (#187) 2025-05-16 00:24:46 +08:00
Ryan Yin 43721fba8a chore(darwin): add lm-studio 2025-05-15 17:30:22 +08:00
Ryan Yin 9a2883f5de chore(darwin): aerospace - system settings 2025-05-14 21:50:35 +08:00
Ryan Yin 377b37ef0f chore(darwin): aerospace - joplin 2025-05-13 16:43:38 +08:00
Ryan Yin 0fe00c237b fix(darwin): aerospace - do not move security agent to other workspace 2025-05-13 16:12:19 +08:00
Ryan Yin 277ef1d04b fix: google gcloud sdk 2025-05-13 16:03:02 +08:00
Ryan Yin b0e3794734 chore(darwin): add gcloud 2025-05-13 15:57:13 +08:00
Ryan Yin e151d3b488 Merge pull request #186 from ryan4yin/darwin-frieren
feat(darwin): new host - frieren
2025-05-13 15:31:21 +08:00
Ryan Yin 2ba35fd07f feat(darwin): adjust aerospace 2025-05-13 14:20:33 +08:00
Ryan Yin 7e5e1a99df feat(neovim): update lock file 2025-05-13 14:00:42 +08:00
Ryan Yin db4811ed88 fix(darwin): rekey secrets 2025-05-13 13:44:06 +08:00
Ryan Yin 92a6a7ebc8 fix(darwin): homebrew/services was deprecated 2025-05-13 13:09:16 +08:00
Ryan Yin e13079f7a8 feat(darwin): new host - frieren 2025-05-13 13:07:47 +08:00
Ryan Yin 65e1ea4fc5 chore: darwin - add zoom 2025-05-01 18:19:15 +08:00
Ryan Yin 8c40436e41 feat(idols-ai): add ollama 2025-04-30 14:03:21 +08:00
Ryan Yin 25e1604cda feat: avante.nvim - add qwen3 2025-04-30 09:36:10 +08:00
Ryan Yin cbc5b55ec2 chore: update alias-for-work 2025-04-30 09:29:45 +08:00
Ryan Yin eeba466cda fix(kubevirt lab): secrets 2025-04-27 21:39:55 +08:00
Ryan Yin 15ec912368 feat: avante.nvim - more custom models 2025-04-27 18:17:37 +08:00
Ryan Yin 1c02730d1d fix(lib): k3s+multus-cni - k3s changes its path for cni plugin binaries 2025-04-27 09:23:15 +08:00
Ryan Yin dc7bac0025 feat: darwin - add joplin 2025-04-24 16:55:31 +08:00
Ryan Yin 8fff2bd556 chore: update secrets 2025-04-23 21:37:49 +08:00
Ryan Yin 5dc287dde7 chore: avante.nvim - add openrouter 2025-04-23 21:29:09 +08:00
Ryan Yin a60671a983 feat: avante.nvim - auto_suggestion 2025-04-20 12:29:37 +08:00
Ryan Yin 75081d1d5a fix: avante.nvim 2025-04-20 12:29:37 +08:00
Ryan Yin 15628b667a chore(home): upgrade python to python3.13 2025-04-19 22:30:39 +08:00
Ryan Yin 4465b0388e chore: zellij - do not show startup tips 2025-04-19 22:26:41 +08:00
Ryan Yin c872728eea fix: empty-directory does not have the meta.mainProgram attribute 2025-04-19 22:24:59 +08:00
Ryan Yin f1a3aa0e9c chore(darwin): remove ibkr 2025-04-19 22:12:24 +08:00
Ryan Yin 49ed072d25 feat: remove emacs 2025-04-19 21:56:26 +08:00
Ryan Yin aaf499a52c fix: can't use nixpkgs.config and nixpkgs.pkgs at the same time, and other renames 2025-04-19 21:21:27 +08:00
Ryan Yin 9ade06b235 feat: add avante.nvim via astrocommunity plugin 2025-04-15 23:35:20 +08:00
Ryan Yin dfb26c3b59 feat: nushell - update extraConfig 2025-04-13 19:42:55 +08:00
Ryan Yin 28b642bff1 fix: hyprland v0.48.0 - breaking changes - windowrulev2 2025-04-13 16:40:32 +08:00
Ryan Yin 49de321e32 fix: update nushell config 2025-04-13 16:37:44 +08:00
Ryan Yin 2315c7c1df fix: hyprland v0.48.0 - breaking changes 2025-04-13 16:11:56 +08:00
Ryan Yin f585ba721a chore: update neovim & nix cache mirror 2025-04-13 16:03:15 +08:00
Ryan Yin 47179e46ba fix: use blender-bin, update cache mirror, disable rustdesk & others. 2025-04-13 15:48:21 +08:00
Ryan Yin 6b2f5542da fix: obs-nvfbc is marked as broken 2025-04-13 14:28:11 +08:00
Ryan Yin 17184d7835 fix: Emacs 29 is removed due to CVEs which are fixed in Emacs 30 2025-04-13 14:26:32 +08:00
Ryan Yin 6e2b2e8dbb fix: anyrun home manager module 2025-04-13 14:24:15 +08:00
Ryan Yin dc24978eaf chore: udpate flake inputs 2025-04-13 14:17:34 +08:00
Ryan Yin 908656e5d4 feat: add cursor ai editor 2025-04-13 13:42:52 +08:00
Ryan Yin a69b60bf6e feat: add avante.nvim, remove copilot.lua 2025-04-13 11:21:40 +08:00
Ryan Yin 9d26022139 feat: enable remote desktop - sunshine 2025-03-01 08:47:47 +08:00
Ryan Yin cfdf12b356 fix: attribute 'nix-access-tokens' missing for homelab 2025-03-01 06:26:23 +08:00
Ryan Yin 417d7ad2d7 feat(modules/darwin): add proxy tool 2025-02-23 14:45:42 +08:00
Ryan Yin 891c70e045 Merge pull request #182 from DataEraserC/patch-3
fix(typo): fix typo in the comment of home/base/tui/editors/neovim/nvim/lua/lazy_setup.lua
2025-02-15 15:24:44 +08:00
Sacabambaspis 18485a5530 fix(typo): fix typo in the comment of home/base/tui/editors/neovim/nvim/lua/lazy_setup.lua 2025-02-15 15:09:13 +08:00
Ryan Yin 8ff415a55f feat: darwin - add app - ibkr 2025-01-31 01:04:46 +08:00
Ryan Yin 7e4c6de8cc Merge pull request #179 from ryan4yin/ghostty
feat: add ghostty
2025-01-29 14:40:48 +08:00
Ryan Yin 0cac8e1763 feat: ghostty - use nushell 2025-01-29 14:40:00 +08:00
Ryan Yin ec2d41742c fix: ghostty - darwin 2025-01-29 14:33:41 +08:00
Ryan Yin b30199c437 feat: add ghostty 2025-01-29 13:58:07 +08:00
Ryan Yin a3aa2db0f1 Reinit fern (#181)
* chore: update flake.lock, reinit macbook-fern

* fix: darwin - use XDG base directories, fix secrets

* fix(NixOS): update lanzaboote
2025-01-29 13:54:35 +08:00
Ryan Yin 3ad2a334c9 fix(NixOS): update lanzaboote 2025-01-29 13:51:43 +08:00
Ryan Yin 935c80ef5a fix: darwin - use XDG base directories, fix secrets 2025-01-27 13:15:14 +08:00
Ryan Yin 7c493445a2 polish: gpg's docs 2025-01-27 12:56:28 +08:00
Ryan Yin 922a59a68b chore: update flake.lock, reinit macbook-fern 2025-01-26 19:54:43 +08:00
Ryan Yin 7deed26cc5 chore: update flake.lock & fix issues (#180) 2025-01-22 11:42:23 +08:00
Ryan Yin 2a21d77f33 feat(home/base/gui): add zed-editor 2024-12-09 20:39:32 +08:00
Ryan Yin 113b764052 Merge pull request #178 from OpusNano/main
Correct typos in README.md
2024-12-07 21:56:57 +08:00
OpusNano df13f1b0c3 Correct typos in README.md
- Changed "checkout" to "check out."
- Corrected "hardwares" to "hardware."
- Fixed the typo "deplyment" to "deployment."
- Added a space in "ISO image(purest installation method)."
2024-12-07 14:43:07 +01:00
Ryan Yin 0a9697352b fix: darwin - nix-access-token 2024-11-29 23:48:42 +08:00
Ryan Yin 6fc0c5bcc2 fix: upgrade zellij to 0.41.2 to fix keybinding 2024-11-29 23:34:05 +08:00
Ryan Yin f0576ecc88 fix: nix-access-token - permission 2024-11-29 23:26:54 +08:00
Ryan Yin d5e6432efa fix: comment cava out 2024-11-29 22:08:46 +08:00
Ryan Yin 921df30ef0 fix: nerdfonts has been refactored 2024-11-28 21:47:20 +08:00
Ryan Yin ab5a154de8 chore: switch to nixos-unstable, update flake.lock 2024-11-28 21:14:57 +08:00
Ryan Yin 28b20d279e chore(home/darwin): proxy - mkOutOfStoreSymlink 2024-11-28 10:06:22 +08:00
Ryan Yin 071b91758e feat(darwin/aerospace): move-node-to-workspace & float 2024-11-28 10:01:56 +08:00
Ryan Yin 870ca80869 fix: typo 2024-11-27 16:24:24 +08:00
Ryan Yin 366aef4d2c fix: EDITOR, replace neofetch with fastfetch 2024-11-26 09:51:42 +08:00
Ryan Yin 1955875498 docs(EDITOR): by default, do not load neovim's user config 2024-11-25 20:18:32 +08:00
Ryan Yin 102ec54f82 security(EDITOR): by default, do not load neovim's user config 2024-11-25 20:17:45 +08:00
Ryan Yin cc44f41584 chore: nvim - lazy-lock.json 2024-11-25 16:21:36 +08:00
Ryan Yin d82119183c feat(justfile): list services by pattern systemd-* 2024-11-25 09:31:40 +08:00
Ryan Yin 1cd6c0b124 fix(tmpfiles rule): do not remove the contents of the directory 2024-11-25 09:22:25 +08:00
Ryan Yin 595f76e120 feat(home/base/tui/editors): replace rsync by config.lib.file.mkOutOfStoreSymlink 2024-11-22 18:55:25 +08:00
Ryan Yin 961d24c80a fix: neovim lsp for python 2024-11-22 15:11:39 +08:00
Ryan Yin 4ed9432280 fix: pip mirror url 2024-11-22 15:01:03 +08:00
Ryan Yin 3daf799be2 fix(darwin): errors after bump version 2024-11-22 14:03:29 +08:00
Ryan Yin 0683ef0a13 chore: bump nixpkgs to 24.11 2024-11-22 13:58:51 +08:00
Ryan Yin 97f1a6a950 chore: update some mirrors for both nix & homebrew 2024-11-22 13:55:47 +08:00
Ryan Yin 4503964146 fix(secrets/nixos): assertion 2024-11-17 21:31:53 +08:00
Ryan Yin 2eb37b34ea chore(neovim): ruff_lsp & bufls is deprecated 2024-11-16 00:36:38 +08:00
Ryan Yin c768073783 feat: persist qq's data 2024-11-14 00:08:16 +08:00
267 changed files with 15695 additions and 5386 deletions
+1
View File
@@ -1,3 +1,4 @@
.Trash-1000/
result result
result/ result/
.direnv/ .direnv/
+53 -68
View File
@@ -1,7 +1,7 @@
# just is a command runner, Justfile is very similar to Makefile, but simpler. # just is a command runner, Justfile is very similar to Makefile, but simpler.
# Use nushell for shell commands # Use nushell for shell commands
# To usage this justfile, you need to enter a shell with just & nushell installed: # To use this justfile, you need to enter a shell with just & nushell installed:
# #
# nix shell nixpkgs#just nixpkgs#nushell # nix shell nixpkgs#just nixpkgs#nushell
set shell := ["nu", "-c"] set shell := ["nu", "-c"]
@@ -26,13 +26,13 @@ test:
# Update all the flake inputs # Update all the flake inputs
[group('nix')] [group('nix')]
up: up:
nix flake update nix flake update --commit-lock-file
# Update specific input # Update specific input
# Usage: just upp nixpkgs # Usage: just upp nixpkgs
[group('nix')] [group('nix')]
upp input: upp input:
nix flake update {{input}} nix flake update {{input}} --commit-lock-file
# List all generations of the system profile # List all generations of the system profile
[group('nix')] [group('nix')]
@@ -48,7 +48,10 @@ repl:
# on darwin, you may need to switch to root user to run this command # on darwin, you may need to switch to root user to run this command
[group('nix')] [group('nix')]
clean: clean:
# Wipe out NixOS's history
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
# Wipe out home-manager's history
nix profile wipe-history --profile $"($env.XDG_STATE_HOME)/nix/profiles/home-manager" --older-than 7d
# Garbage collect all unused nix store entries # Garbage collect all unused nix store entries
[group('nix')] [group('nix')]
@@ -94,6 +97,11 @@ verify-store:
repair-store *paths: repair-store *paths:
nix store repair {{paths}} nix store repair {{paths}}
# Update all Nixpkgs inputs
[group('nix')]
up-nix:
nix flake update nixpkgs nixpkgs-stable nixpkgs-unstable nixpkgs-darwin nixpkgs-ollama
############################################################################ ############################################################################
# #
# NixOS Desktop related commands # NixOS Desktop related commands
@@ -116,7 +124,7 @@ s-hypr mode="default":
############################################################################ ############################################################################
# #
# Darwin related commands, harmonica is my macbook pro's hostname # Darwin related commands
# #
############################################################################ ############################################################################
@@ -133,24 +141,24 @@ darwin-rollback:
use {{utils_nu}} *; use {{utils_nu}} *;
darwin-rollback darwin-rollback
# Deploy to harmonica(macOS host)
[macos]
[group('desktop')]
ha mode="default":
#!/usr/bin/env nu
use {{utils_nu}} *;
darwin-build "harmonica" {{mode}};
darwin-switch "harmonica" {{mode}}
# Depoly to fern(macOS host) # Depoly to fern(macOS host)
[macos] [macos]
[group('desktop')] [group('desktop')]
fe mode="default": darwin-set-proxy fe mode="default":
#!/usr/bin/env nu #!/usr/bin/env nu
use {{utils_nu}} *; use {{utils_nu}} *;
darwin-build "fern" {{mode}}; darwin-build "fern" {{mode}};
darwin-switch "fern" {{mode}} darwin-switch "fern" {{mode}}
# Depoly to frieren(macOS host)
[macos]
[group('desktop')]
fr mode="default":
#!/usr/bin/env nu
use {{utils_nu}} *;
darwin-build "frieren" {{mode}};
darwin-switch "frieren" {{mode}}
# Reset launchpad to force it to reindex Applications # Reset launchpad to force it to reindex Applications
[macos] [macos]
[group('desktop')] [group('desktop')]
@@ -317,60 +325,6 @@ k3s-prod:
k3s-test: k3s-test:
colmena apply --on '@k3s-test-*' --verbose --show-trace colmena apply --on '@k3s-test-*' --verbose --show-trace
############################################################################
#
# Neovim related commands
#
############################################################################
[group('neovim')]
nvim-test:
rm -rf $"($env.HOME)/.config/nvim"
rsync -avz --copy-links --chmod=D2755,F744 home/base/tui/editors/neovim/nvim/ $"($env.HOME)/.config/nvim/"
[group('neovim')]
nvim-clean:
rm -rf $"($env.HOME)/.config/nvim"
# =================================================
# Emacs related commands
# =================================================
[group('emacs')]
emacs-test:
rm -rf $"($env.HOME)/.config/doom"
rsync -avz --copy-links --chmod=D2755,F744 home/base/tui/editors/emacs/doom/ $"($env.HOME)/.config/doom/"
doom clean
doom sync
[group('emacs')]
emacs-clean:
rm -rf $"($env.HOME)/.config/doom/"
[group('emacs')]
emacs-purge:
doom purge
doom clean
doom sync
[linux]
[group('emacs')]
emacs-reload:
doom sync
systemctl --user restart emacs.service
systemctl --user status emacs.service
emacs-plist-path := "~/Library/LaunchAgents/org.nix-community.home.emacs.plist"
[macos]
[group('emacs')]
emacs-reload:
doom sync
launchctl unload {{emacs-plist-path}}
launchctl load {{emacs-plist-path}}
tail -f ~/Library/Logs/emacs-daemon.stderr.log
# ================================================= # =================================================
# #
# Other useful commands # Other useful commands
@@ -415,3 +369,34 @@ list-inactive:
[group('services')] [group('services')]
list-failed: list-failed:
systemctl list-units -all --state=failed systemctl list-units -all --state=failed
[linux]
[group('services')]
list-systemd:
systemctl list-units systemd-*
# =================================================
#
# Nixpkgs Review via Github Action
# https://github.com/ryan4yin/nixpkgs-review-gha
#
# =================================================
# Run nixpkgs-review for PR
[linux]
[group('nixpkgs')]
pkg-review pr:
gh workflow run review.yml --repo ryan4yin/nixpkgs-review-gha -f x86_64-darwin=no -f post-result=true -f pr={{pr}}
# Run package tests for PR
[linux]
[group('nixpkgs')]
pkg-test pr pname:
gh workflow run review.yml --repo ryan4yin/nixpkgs-review-gha -f x86_64-darwin=no -f post-result=true -f pr={{pr}} -f extra-args="-p {{pname}}.passthru.tests"
# View the summary of a workflow
[linux]
[group('nixpkgs')]
pkg-summary:
gh workflow view review.yml --repo ryan4yin/nixpkgs-review-gha
+13 -30
View File
@@ -8,7 +8,7 @@
<a href="https://github.com/ryan4yin/nix-config/stargazers"> <a href="https://github.com/ryan4yin/nix-config/stargazers">
<img alt="Stargazers" src="https://img.shields.io/github/stars/ryan4yin/nix-config?style=for-the-badge&logo=starship&color=C9CBFF&logoColor=D9E0EE&labelColor=302D41"></a> <img alt="Stargazers" src="https://img.shields.io/github/stars/ryan4yin/nix-config?style=for-the-badge&logo=starship&color=C9CBFF&logoColor=D9E0EE&labelColor=302D41"></a>
<a href="https://nixos.org/"> <a href="https://nixos.org/">
<img src="https://img.shields.io/badge/NixOS-24.05-informational.svg?style=for-the-badge&logo=nixos&color=F2CDCD&logoColor=D9E0EE&labelColor=302D41"></a> <img src="https://img.shields.io/badge/NixOS-25.05-informational.svg?style=for-the-badge&logo=nixos&color=F2CDCD&logoColor=D9E0EE&labelColor=302D41"></a>
<a href="https://github.com/ryan4yin/nixos-and-flakes-book"> <a href="https://github.com/ryan4yin/nixos-and-flakes-book">
<img src="https://img.shields.io/static/v1?label=Nix Flakes&message=learning&style=for-the-badge&logo=nixos&color=DDB6F2&logoColor=D9E0EE&labelColor=302D41"></a> <img src="https://img.shields.io/static/v1?label=Nix Flakes&message=learning&style=for-the-badge&logo=nixos&color=DDB6F2&logoColor=D9E0EE&labelColor=302D41"></a>
</a> </a>
@@ -17,7 +17,7 @@
> My configuration is becoming more and more complex, and **it will be difficult for beginners to > My configuration is becoming more and more complex, and **it will be difficult for beginners to
> read**. If you are new to NixOS and want to know how I use NixOS, I would recommend you to take a > read**. If you are new to NixOS and want to know how I use NixOS, I would recommend you to take a
> look at the [ryan4yin/nix-config/releases](https://github.com/ryan4yin/nix-config/releases) first, > look at the [ryan4yin/nix-config/releases](https://github.com/ryan4yin/nix-config/releases) first,
> **checkout to some simpler older versions, such as > **check out to some simpler older versions, such as
> [i3-kickstarter](https://github.com/ryan4yin/nix-config/tree/i3-kickstarter), which will be much > [i3-kickstarter](https://github.com/ryan4yin/nix-config/tree/i3-kickstarter), which will be much
> easier to understand**. > easier to understand**.
@@ -38,13 +38,13 @@ Virtual Machine from this flake.
Nix allows for easy-to-manage, collaborative, reproducible deployments. This means that once Nix allows for easy-to-manage, collaborative, reproducible deployments. This means that once
something is setup and configured once, it works (almost) forever. If someone else shares their something is setup and configured once, it works (almost) forever. If someone else shares their
configuration, anyone else can just use it (if you really understand what you're copying/refering configuration, anyone else can just use it (if you really understand what you're copying/referring
now). now).
As for Flakes, refer to As for Flakes, refer to
[Introduction to Flakes - NixOS & Nix Flakes Book](https://nixos-and-flakes.thiscute.world/nixos-with-flakes/introduction-to-flakes) [Introduction to Flakes - NixOS & Nix Flakes Book](https://nixos-and-flakes.thiscute.world/nixos-with-flakes/introduction-to-flakes)
**Want to know NixOS & Flaks in detail? Looking for a beginner-friendly tutorial or best practices? **Want to know NixOS & Flakes in detail? Looking for a beginner-friendly tutorial or best practices?
You don't have to go through the pain I've experienced again! Check out my You don't have to go through the pain I've experienced again! Check out my
[NixOS & Nix Flakes Book - 🛠️ ❤️ An unofficial & opinionated :book: for beginners](https://github.com/ryan4yin/nixos-and-flakes-book)!** [NixOS & Nix Flakes Book - 🛠️ ❤️ An unofficial & opinionated :book: for beginners](https://github.com/ryan4yin/nixos-and-flakes-book)!**
@@ -68,34 +68,27 @@ You don't have to go through the pain I've experienced again! Check out my
| **System resource monitor** | [Btop][Btop] | | **System resource monitor** | [Btop][Btop] |
| **File Manager** | [Yazi][Yazi] + [thunar][thunar] | | **File Manager** | [Yazi][Yazi] + [thunar][thunar] |
| **Shell** | [Nushell][Nushell] + [Starship][Starship] | | **Shell** | [Nushell][Nushell] + [Starship][Starship] |
| **Music Player** | [mpd][mpd], [ncmpcpp][ncmpcpp], [mpc][mpc] |
| **Media Player** | [mpv][mpv] | | **Media Player** | [mpv][mpv] |
| **Text Editor** | [Neovim][Neovim] + [DoomEmacs][DoomEmacs] | | **Text Editor** | [Neovim][Neovim] |
| **Fonts** | [Nerd fonts][Nerd fonts] | | **Fonts** | [Nerd fonts][Nerd fonts] |
| **Image Viewer** | [imv][imv] | | **Image Viewer** | [imv][imv] |
| **Screenshot Software** | [flameshot][flameshot] + [grim][grim] | | **Screenshot Software** | [hyprshot][hyprshot] |
| **Screen Recording** | [OBS][OBS] | | **Screen Recording** | [OBS][OBS] |
| **Filesystem & Encryption** | tmpfs on `/`, [Btrfs][Btrfs] subvolumes on a [LUKS][LUKS] encrypted partition for persistent, unlock via passphrase | | **Filesystem & Encryption** | tmpfs on `/`, [Btrfs][Btrfs] subvolumes on a [LUKS][LUKS] encrypted partition for persistent, unlock via passphrase |
| **Secure Boot** | [lanzaboote][lanzaboote] | | **Secure Boot** | [lanzaboote][lanzaboote] |
Wallpapers: https://github.com/ryan4yin/wallpapers Wallpapers: https://github.com/ryan4yin/wallpapers
## Hyprland + AstroNvim + DoomEmacs ## Hyprland + AstroNvim
![](./_img/hyprland_2023-07-29_1.webp) ![](./_img/hyprland_2023-07-29_1.webp)
![](./_img/hyprland_2023-07-29_2.webp) ![](./_img/hyprland_2023-07-29_2.webp)
![](./_img/emacs-2024-01-07.webp)
## Neovim ## Neovim
See [./home/base/tui/editors/neovim/](./home/base/tui/editors/neovim/) for details. See [./home/base/tui/editors/neovim/](./home/base/tui/editors/neovim/) for details.
## Emacs
See [./home/base/tui/editors/emacs/](./home/base/tui/editors/emacs/) for details.
## Secrets Management ## Secrets Management
See [./secrets](./secrets) for details. See [./secrets](./secrets) for details.
@@ -107,13 +100,13 @@ See [./secrets](./secrets) for details.
> It will not succeed.** This flake contains my hardware configuration(such as > It will not succeed.** This flake contains my hardware configuration(such as
> [hardware-configuration.nix](hosts/idols-ai/hardware-configuration.nix), > [hardware-configuration.nix](hosts/idols-ai/hardware-configuration.nix),
> [Nvidia Support](https://github.com/ryan4yin/nix-config/blob/v0.1.1/hosts/idols-ai/default.nix#L77-L91), > [Nvidia Support](https://github.com/ryan4yin/nix-config/blob/v0.1.1/hosts/idols-ai/default.nix#L77-L91),
> etc.) which is not suitable for your hardwares, and requires my private secrets repository > etc.) which is not suitable for your hardware, and requires my private secrets repository
> [ryan4yin/nix-secrets](https://github.com/ryan4yin/nix-config/tree/main/secrets) to deploy. You > [ryan4yin/nix-secrets](https://github.com/ryan4yin/nix-config/tree/main/secrets) to deploy. You
> may use this repo as a reference to build your own configuration. > may use this repo as a reference to build your own configuration.
For NixOS: For NixOS:
> To deploy this flake from NixOS's official ISO image(purest installation method), please refer to > To deploy this flake from NixOS's official ISO image (purest installation method), please refer to
> [./nixos-installer/](./nixos-installer/) > [./nixos-installer/](./nixos-installer/)
> Need to restart the machine when switching between `wayland` and `xorg`. > Need to restart the machine when switching between `wayland` and `xorg`.
@@ -136,18 +129,14 @@ For macOS:
# 1. install nix & homebrew manually. # 1. install nix & homebrew manually.
# 2. prepare the deployment environment with essential packages available # 2. prepare the deployment environment with essential packages available
nix-shell -p just nushell nix-shell -p just nushell
# 3. comment home-manager's code in lib/macosSystem.nix to speed up the first deplyment. # 3. comment home-manager's code in lib/macosSystem.nix to speed up the first deployment.
# 4. comment out the proxy settings in scripts/darwin_set_proxy.py if the proxy is not ready yet. # 4. comment out the proxy settings in scripts/darwin_set_proxy.py if the proxy is not ready yet.
# 4. deploy harmonica's configuration(macOS Intel)
just ha
# deploy fern's configuration(Apple Silicon) # deploy fern's configuration(Apple Silicon)
just fe just fe
# deploy with details # deploy with details
just ha debug just fe debug
# just fe debug
``` ```
> [What y'all will need when Nix drives you to drink.](https://www.youtube.com/watch?v=Eni9PPPPBpg) > [What y'all will need when Nix drives you to drink.](https://www.youtube.com/watch?v=Eni9PPPPBpg)
@@ -178,6 +167,7 @@ Other dotfiles that inspired me:
journey. journey.
- [HeinzDev/Hyprland-dotfiles](https://github.com/HeinzDev/Hyprland-dotfiles): Refer to the waybar - [HeinzDev/Hyprland-dotfiles](https://github.com/HeinzDev/Hyprland-dotfiles): Refer to the waybar
configuration here. configuration here.
- [Zeioth/zeioth-hyprland-config](https://github.com/Zeioth/zeioth-hyprland-config)
- [linuxmobile/kaku](https://github.com/linuxmobile/kaku) - [linuxmobile/kaku](https://github.com/linuxmobile/kaku)
- Neovim/AstroNvim - Neovim/AstroNvim
- [maxbrunet/dotfiles](https://github.com/maxbrunet/dotfiles): astronvim with nix flakes. - [maxbrunet/dotfiles](https://github.com/maxbrunet/dotfiles): astronvim with nix flakes.
@@ -199,19 +189,12 @@ Other dotfiles that inspired me:
[Zellij]: https://github.com/zellij-org/zellij [Zellij]: https://github.com/zellij-org/zellij
[Neovim]: https://github.com/neovim/neovim [Neovim]: https://github.com/neovim/neovim
[AstroNvim]: https://github.com/AstroNvim/AstroNvim [AstroNvim]: https://github.com/AstroNvim/AstroNvim
[DoomEmacs]: https://github.com/doomemacs/doomemacs [Hyprshot]: https://github.com/Gustash/Hyprshot
[flameshot]: https://github.com/flameshot-org/flameshot
[grim]: https://github.com/emersion/grim
[flameshot]: https://github.com/flameshot-org/flameshot
[imv]: https://sr.ht/~exec64/imv/ [imv]: https://sr.ht/~exec64/imv/
[OBS]: https://obsproject.com [OBS]: https://obsproject.com
[Mako]: https://github.com/emersion/mako [Mako]: https://github.com/emersion/mako
[Nerd fonts]: https://github.com/ryanoasis/nerd-fonts [Nerd fonts]: https://github.com/ryanoasis/nerd-fonts
[catppuccin]: https://github.com/catppuccin/catppuccin [catppuccin]: https://github.com/catppuccin/catppuccin
[mpd]: https://github.com/MusicPlayerDaemon/MPD
[ncmpcpp]: https://github.com/ncmpcpp/ncmpcpp
[mpc]: https://github.com/MusicPlayerDaemon/mpc
[Netease-cloud-music-gtk]: https://github.com/gmg137/netease-cloud-music-gtk
[NetworkManager]: https://wiki.gnome.org/Projects/NetworkManager [NetworkManager]: https://wiki.gnome.org/Projects/NetworkManager
[wl-clipboard]: https://github.com/bugaevc/wl-clipboard [wl-clipboard]: https://github.com/bugaevc/wl-clipboard
[GDM]: https://wiki.archlinux.org/title/GDM [GDM]: https://wiki.archlinux.org/title/GDM
Generated
+315 -1042
View File
File diff suppressed because it is too large Load Diff
+58 -22
View File
@@ -35,21 +35,24 @@
# Official NixOS package source, using nixos's unstable branch by default # Official NixOS package source, using nixos's unstable branch by default
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable-small"; # nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable-small";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.05"; nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-25.05";
nixpkgs-ollama.url = "github:nixos/nixpkgs/nixos-unstable";
# for macos # for macos
nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-24.05-darwin"; # nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-25.05-darwin";
nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-unstable";
nix-darwin = { nix-darwin = {
url = "github:lnl7/nix-darwin"; url = "github:lnl7/nix-darwin";
inputs.nixpkgs.follows = "nixpkgs-darwin"; inputs.nixpkgs.follows = "nixpkgs-darwin";
}; };
nixos-hardware.url = "github:NixOS/nixos-hardware/master";
# home-manager, used for managing user configuration # home-manager, used for managing user configuration
home-manager = { home-manager = {
url = "github:nix-community/home-manager/master"; url = "github:nix-community/home-manager/master";
# url = "github:nix-community/home-manager/release-24.05"; # url = "github:nix-community/home-manager/release-25.05";
# The `follows` keyword in inputs is used for inheritance. # The `follows` keyword in inputs is used for inheritance.
# Here, `inputs.nixpkgs` of home-manager is kept consistent with the `inputs.nixpkgs` of the current flake, # Here, `inputs.nixpkgs` of home-manager is kept consistent with the `inputs.nixpkgs` of the current flake,
@@ -57,12 +60,20 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
lanzaboote = { # https://github.com/catppuccin/nix
url = "github:nix-community/lanzaboote/v0.4.1"; catppuccin = {
url = "github:catppuccin/nix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
impermanence.url = "github:nix-community/impermanence"; lanzaboote = {
url = "github:nix-community/lanzaboote/v0.4.2";
inputs.nixpkgs.follows = "nixpkgs";
};
preservation = {
url = "github:nix-community/preservation";
};
# community wayland nixpkgs # community wayland nixpkgs
# nixpkgs-wayland.url = "github:nix-community/nixpkgs-wayland"; # nixpkgs-wayland.url = "github:nix-community/nixpkgs-wayland";
@@ -79,17 +90,20 @@
}; };
# secrets management # secrets management
agenix = { agenix = {
# lock with git commit at 0.15.0 # lock with git commit at May 18, 2025
# url = "github:ryantm/agenix/564595d0ad4be7277e07fa63b5a991b3c645655d"; url = "github:ryantm/agenix/4835b1dc898959d8547a871ef484930675cb47f1";
# replaced with a type-safe reimplementation to get a better error message and less bugs. # replaced with a type-safe reimplementation to get a better error message and less bugs.
url = "github:ryan4yin/ragenix"; # url = "github:ryan4yin/ragenix";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
nix-gaming.url = "github:fufexan/nix-gaming"; nix-gaming = {
url = "github:fufexan/nix-gaming";
inputs.nixpkgs.follows = "nixpkgs";
};
disko = { disko = {
url = "github:nix-community/disko/v1.6.1"; url = "github:nix-community/disko/v1.11.0";
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
@@ -99,7 +113,10 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
nuenv.url = "github:DeterminateSystems/nuenv"; nuenv = {
url = "github:DeterminateSystems/nuenv";
inputs.nixpkgs.follows = "nixpkgs";
};
haumea = { haumea = {
url = "github:nix-community/haumea/v0.2.2"; url = "github:nix-community/haumea/v0.2.2";
@@ -111,14 +128,23 @@
inputs.nixpkgs.follows = "nixpkgs"; inputs.nixpkgs.follows = "nixpkgs";
}; };
######################## Some non-flake repositories ######################################### ghostty = {
url = "github:ghostty-org/ghostty";
# doom-emacs is a configuration framework for GNU Emacs.
doomemacs = {
url = "github:doomemacs/doomemacs";
flake = false;
}; };
blender-bin = {
url = "github:edolstra/nix-warez?dir=blender";
inputs.nixpkgs.follows = "nixpkgs";
};
nixos-apple-silicon = {
# 2025-07-04
url = "github:nix-community/nixos-apple-silicon/eba4b40c816e5aff8951ae231ac237e8aab8ec1d";
inputs.nixpkgs.follows = "nixpkgs";
};
######################## Some non-flake repositories #########################################
polybar-themes = { polybar-themes = {
url = "github:adi1090x/polybar-themes"; url = "github:adi1090x/polybar-themes";
flake = false; flake = false;
@@ -133,13 +159,23 @@
flake = false; flake = false;
}; };
my-asahi-firmware = {
url = "git+ssh://git@github.com/ryan4yin/asahi-firmware.git?shallow=1";
flake = false;
};
# my wallpapers # my wallpapers
wallpapers = { wallpapers = {
url = "github:ryan4yin/wallpapers"; url = "github:ryan4yin/wallpapers";
flake = false; flake = false;
}; };
nur-ryan4yin.url = "github:ryan4yin/nur-packages"; nur-ryan4yin = {
nur-ataraxiasjel.url = "github:AtaraxiaSjel/nur"; url = "github:ryan4yin/nur-packages";
inputs.nixpkgs.follows = "nixpkgs";
};
# for waydroid
# nur-ataraxiasjel.url = "github:AtaraxiaSjel/nur";
}; };
} }
+16 -20
View File
@@ -7,10 +7,10 @@
- **System Level**: Protect critical files from being accessed by untrusted applications. - **System Level**: Protect critical files from being accessed by untrusted applications.
1. Such as browser cookies, SSH keys, etc. 1. Such as browser cookies, SSH keys, etc.
- **Per-App Level**: Prevent untrusted applications(such as closed-source apps) from: - **Per-App Level**: Prevent untrusted applications(such as closed-source apps) from:
1. Accessing files they shouldn't. 1. Accessing files they shouldn't.
- Such as a malicious application accessing your browser's cookies, SSH Keys, etc. - Such as a malicious application accessing your browser's cookies, SSH Keys, etc.
1. Accessing the network when they don't need to. 1. Accessing the network when they don't need to.
1. Accessing hardware devices they don't need. 1. Accessing hardware devices they don't need.
## Current Status ## Current Status
@@ -18,10 +18,8 @@
- [ ] AppArmor - [ ] AppArmor
- [ ] Kernel & System Hardening - [ ] Kernel & System Hardening
1. **Per-App Level**: 1. **Per-App Level**:
- Nixpak (Bubblewrap) - Nixpak (Bubblewrap, running at user-level)
- [x] QQ - Firejail (a SUID program, meaning it's running as root)
- [x] Firefox
- [ ] Firejail (risk? not enabled yet)
## Kernel Hardening ## Kernel Hardening
@@ -32,26 +30,27 @@
- NixOS Profile: - NixOS Profile:
https://github.com/NixOS/nixpkgs/blob/nixos-unstable/nixos/modules/profiles/hardened.nix https://github.com/NixOS/nixpkgs/blob/nixos-unstable/nixos/modules/profiles/hardened.nix
- Apparmor: [roddhjav/apparmor.d)](https://github.com/roddhjav/apparmor.d) - Apparmor: [roddhjav/apparmor.d](https://github.com/roddhjav/apparmor.d)
- https://gitlab.com/apparmor/apparmor/-/wikis/Documentation - https://gitlab.com/apparmor/apparmor/-/wikis/Documentation
- AppArmor.d is a set of over 1500 AppArmor profiles whose aim is to confine most Linux based - AppArmor.d is a set of over 1500 AppArmor profiles whose aim is to confine most Linux based
applications and processes. applications and processes.
- Nix Package: - But all the profiles of AppArmor assume a FHS filesystem, which caused all apparmor policies
[roddhjav-apparmor-rules](https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/ro/roddhjav-apparmor-rules/package.nix#L33) takes no effect on NixOS.
- https://github.com/NixOS/nixpkgs/issues/331645 - Apparmor on NixOS Roadmap:
- https://github.com/LordGrimmauld/aa-alias-manager - https://discourse.nixos.org/t/apparmor-on-nixos-roadmap/57217
- https://github.com/LordGrimmauld/aa-alias-manager
- SELinux: too complex, not recommended for personal use. - SELinux: too complex, not recommended for personal use.
## Application Sandboxing ## Application Sandboxing
- [Bubblewrap](https://github.com/containers/bubblewrap):
[nixpak](https://github.com/nixpak/nixpak), more secure than firejail, but no batteries included.
- NixOS's FHSEnv is implemented using bubblewrap by default.
- [Firejail](https://github.com/netblue30/firejail/tree/master/etc): A SUID security sandbox with - [Firejail](https://github.com/netblue30/firejail/tree/master/etc): A SUID security sandbox with
hundreds of security profiles for many common applications in the default installation. hundreds of security profiles for many common applications in the default installation.
- https://wiki.nixos.org/wiki/Firejail - https://wiki.nixos.org/wiki/Firejail
- Firejail needs SUID to work, which is considered a security risk - - Firejail needs SUID to work, which is considered a security risk -
[Does firejail improve the security of my system?](https://github.com/netblue30/firejail/discussions/4601) [Does firejail improve the security of my system?](https://github.com/netblue30/firejail/discussions/4601)
- [Bubblewrap](https://github.com/containers/bubblewrap):
[nixpak](https://github.com/nixpak/nixpak), more secure than firejail, but no batteries included.
- NixOS's FHSEnv is implemented using bubblewrap by default.
- [Systemd/Hardening](https://wiki.nixos.org/wiki/Systemd/Hardening): Systemd also provides some - [Systemd/Hardening](https://wiki.nixos.org/wiki/Systemd/Hardening): Systemd also provides some
sandboxing features. sandboxing features.
@@ -67,8 +66,6 @@ provide a much higher level of security.
- [Harden your NixOS workstation - dataswamp](https://dataswamp.org/~solene/2022-01-13-nixos-hardened.html) - [Harden your NixOS workstation - dataswamp](https://dataswamp.org/~solene/2022-01-13-nixos-hardened.html)
- [Linux Insecurities - Madaidans](https://madaidans-insecurities.github.io/linux.html) - [Linux Insecurities - Madaidans](https://madaidans-insecurities.github.io/linux.html)
- [Sandboxing all programs by default - NixOS Discourse](https://discourse.nixos.org/t/sandboxing-all-programs-by-default/7792) - [Sandboxing all programs by default - NixOS Discourse](https://discourse.nixos.org/t/sandboxing-all-programs-by-default/7792)
- [在 Firejail 中运行 Steam](https://imbearchild.cyou/archives/2021/11/steam-in-firejail/)
- [Firejail - Arch Linux Wiki](https://wiki.archlinux.org/title/Firejail)
- [Paranoid NixOS Setup - xeiaso](https://xeiaso.net/blog/paranoid-nixos-2021-07-18/) - [Paranoid NixOS Setup - xeiaso](https://xeiaso.net/blog/paranoid-nixos-2021-07-18/)
- [nix-mineral](https://github.com/cynicsketch/nix-mineral): NixOS module for convenient system - [nix-mineral](https://github.com/cynicsketch/nix-mineral): NixOS module for convenient system
hardening. hardening.
@@ -80,8 +77,7 @@ provide a much higher level of security.
- firejail configs: - firejail configs:
- https://github.com/stelcodes/nixos-config/blob/f8967c82a5e5f3d128eb1aaf7498b5f918f719ec/packages/overlay.nix#L261 - https://github.com/stelcodes/nixos-config/blob/f8967c82a5e5f3d128eb1aaf7498b5f918f719ec/packages/overlay.nix#L261
- apparmor configs: - apparmor configs:
- https://github.com/sukhmancs/nixos-configs/blob/7fcf737c506ad843113cd5b94796b49d4d4dfad2/modules/shared/security/apparmor/default.nix#L8
- https://github.com/zramctl/dotfiles/blob/4fe177f6984154960942bb47d5a375098ec6ed6a/modules/nixos/security/apparmor.nix#L4 - https://github.com/zramctl/dotfiles/blob/4fe177f6984154960942bb47d5a375098ec6ed6a/modules/nixos/security/apparmor.nix#L4
- https://git.grimmauld.de/Grimmauld/grimm-nixos-laptop/src/branch/main/hardening
- Others: - Others:
- Directly via `buildFHSUserEnvBubblewrap`: - Directly via `buildFHSUserEnvBubblewrap`:
https://github.com/xddxdd/nur-packages/blob/master/pkgs/uncategorized/wechat-uos/default.nix
+9
View File
@@ -0,0 +1,9 @@
{
nixpkgs.overlays = [
(_: super: {
bwraps = {
wechat = super.callPackage ./wechat.nix {};
};
})
];
}
+98
View File
@@ -0,0 +1,98 @@
# - wechat's flatpak manifest: https://github.com/flathub/com.tencent.WeChat/blob/master/com.tencent.WeChat.yaml
# Refer:
# - Flatpak manifest's docs:
# - https://docs.flatpak.org/en/latest/manifests.html
# - https://docs.flatpak.org/en/latest/sandbox-permissions.html
#
# TODO Since appimageTools.wrapAppImage do not support overriding, I have to pack this package myself.
# https://github.com/NixOS/nixpkgs/pull/358977
{
appimageTools,
fetchurl,
stdenvNoCC,
}: let
pname = "wechat";
# https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/we/wechat/package.nix
sources = {
aarch64-linux = {
version = "4.0.1.11";
src = fetchurl {
url = "https://web.archive.org/web/20250512112413if_/https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_arm64.AppImage";
hash = "sha256-Rg+FWNgOPC02ILUskQqQmlz1qNb9AMdvLcRWv7NQhGk=";
};
};
x86_64-linux = {
version = "4.0.1.11";
src = fetchurl {
url = "https://web.archive.org/web/20250512110825if_/https://dldir1v6.qq.com/weixin/Universal/Linux/WeChatLinux_x86_64.AppImage";
hash = "sha256-gBWcNQ1o1AZfNsmu1Vi1Kilqv3YbR+wqOod4XYAeVKo=";
};
};
};
inherit (stdenvNoCC.hostPlatform) system;
inherit (sources.${system} or (throw "Unsupported system: ${system}")) version src;
# https://github.com/NixOS/nixpkgs/blob/master/pkgs/by-name/we/wechat/linux.nix
appimageContents = appimageTools.extract {
inherit pname version src;
postExtract = ''
patchelf --replace-needed libtiff.so.5 libtiff.so $out/opt/wechat/wechat
'';
};
in
appimageTools.wrapAppImage {
inherit pname version;
src = appimageContents;
extraInstallCommands = ''
mkdir -p $out/share/applications
cp ${appimageContents}/wechat.desktop $out/share/applications/
mkdir -p $out/share/pixmaps
cp ${appimageContents}/wechat.png $out/share/pixmaps/
substituteInPlace $out/share/applications/wechat.desktop --replace-fail AppRun wechat
'';
# Add these root paths to FHS sandbox to prevent WeChat from accessing them by default
# Adapted from https://aur.archlinux.org/cgit/aur.git/tree/wechat-universal.sh?h=wechat-universal-bwrap
extraPreBwrapCmds = ''
XDG_DOCUMENTS_DIR="''${XDG_DOCUMENTS_DIR:-$(xdg-user-dir DOCUMENTS)}"
if [[ -z "''${XDG_DOCUMENTS_DIR}" ]]; then
echo 'Error: Failed to get XDG_DOCUMENTS_DIR, refuse to continue'
exit 1
fi
WECHAT_DATA_DIR="''${XDG_DOCUMENTS_DIR}/WeChat_Data"
# Using ''${WECHAT_DATA_DIR} as Wechat Data folder
WECHAT_HOME_DIR="''${WECHAT_DATA_DIR}/home"
WECHAT_FILES_DIR="''${WECHAT_DATA_DIR}/xwechat_files"
mkdir -p "''${WECHAT_FILES_DIR}"
mkdir -p "''${WECHAT_HOME_DIR}"
ln -snf "''${WECHAT_FILES_DIR}" "''${WECHAT_HOME_DIR}/xwechat_files"
'';
extraBwrapArgs = [
"--tmpfs /home"
"--tmpfs /root"
# format: --bind <host-path> <sandbox-path>
"--bind \${WECHAT_HOME_DIR} \${HOME}"
"--bind \${WECHAT_FILES_DIR} \${WECHAT_FILES_DIR}"
"--chdir \${HOME}"
# wechat-universal only supports xcb
"--setenv QT_QPA_PLATFORM xcb"
"--setenv QT_AUTO_SCREEN_SCALE_FACTOR 1"
# use fcitx as IME
"--setenv QT_IM_MODULE fcitx"
"--setenv GTK_IM_MODULE fcitx"
];
chdirToPwd = false;
unshareNet = false;
unshareIpc = true;
unsharePid = true;
unshareUts = true;
unshareCgroup = true;
privateTmp = true;
}
-71
View File
@@ -1,71 +0,0 @@
{pkgs, ...}: let
firejailWrapper = import ./firejailWrapper.nix pkgs;
in {
programs.firejail.enable = true;
# Add firejailed Apps into nixsuper, and reference them in home-manager or other nixos modules
nixpkgs.overlays = [
(_: super: {
firejailed = {
steam = firejailWrapper {
name = "steam-firejailed";
executable = "${super.steam}/bin/steam";
profile = "${super.firejail}/etc/firejail/steam.profile";
};
steam-run = firejailWrapper {
name = "steam-run-firejailed";
executable = "${super.steam}/bin/steam-run";
profile = "${super.firejail}/etc/firejail/steam.profile";
};
# firefox = firejailWrapper {
# name = "firefox-firejailed";
# executable = "${super.lib.getBin super.firefox-wayland}/bin/firefox";
# profile = "${super.firejail}/etc/firejail/firefox.profile";
# };
# chromium = firejailWrapper {
# name = "chromium-firejailed";
# executable = "${super.lib.getBin super.ungoogled-chromium}/bin/chromium";
# profile = "${super.firejail}/etc/firejail/chromium.profile";
# };
mpv = firejailWrapper {
executable = "${super.lib.getBin super.mpv}/bin/mpv";
profile = "${super.firejail}/etc/firejail/mpv.profile";
};
imv = firejailWrapper {
executable = "${super.lib.getBin super.imv}/bin/imv";
profile = "${super.firejail}/etc/firejail/imv.profile";
};
zathura = firejailWrapper {
executable = "${super.lib.getBin super.zathura}/bin/zathura";
profile = "${super.firejail}/etc/firejail/zathura.profile";
};
slack = firejailWrapper {
executable = "${super.lib.getBin super.slack}/bin/slack";
profile = "${super.firejail}/etc/firejail/slack.profile";
};
telegram-desktop = firejailWrapper {
executable = "${super.lib.getBin super.tdesktop}/bin/telegram-desktop";
profile = "${super.firejail}/etc/firejail/telegram-desktop.profile";
};
brave = firejailWrapper {
executable = "${super.lib.getBin super.brave}/bin/brave";
profile = "${super.firejail}/etc/firejail/brave.profile";
};
qutebrowser = firejailWrapper {
executable = "${super.lib.getBin super.qutebrowser}/bin/qutebrowser";
profile = "${super.firejail}/etc/firejail/qutebrowser.profile";
};
thunar = firejailWrapper {
executable = "${super.lib.getBin super.xfce.thunar}/bin/thunar";
profile = "${super.firejail}/etc/firejail/thunar.profile";
};
vscodium = firejailWrapper {
executable = "${super.lib.getBin super.vscodium}/bin/vscodium";
profile = "${super.firejail}/etc/firejail/vscodium.profile";
};
};
})
];
}
-35
View File
@@ -1,35 +0,0 @@
# https://www.reddit.com/r/NixOS/comments/1b56jdx/simple_nix_function_for_wrapping_executables_with/
pkgs: {
name ? "firejail-wrapper",
executable,
desktop ? null,
profile ? null,
extraArgs ? [],
}:
pkgs.runCommand name
{
preferLocalBuild = true;
allowSubstitutes = false;
meta.priority = -1; # take precedence over non-firejailed versions
}
(
let
firejailArgs = pkgs.lib.concatStringsSep " " (
extraArgs ++ (pkgs.lib.optional (profile != null) "--profile=${toString profile}")
);
in
''
command_path="$out/bin/$(basename ${executable})-jailed"
mkdir -p $out/bin
mkdir -p $out/share/applications
cat <<'_EOF' >"$command_path"
#! ${pkgs.runtimeShell} -e
exec /run/wrappers/bin/firejail ${firejailArgs} -- ${toString executable} "\$@"
_EOF
chmod 0755 "$command_path"
''
+ pkgs.lib.optionalString (desktop != null) ''
substitute ${desktop} $out/share/applications/$(basename ${desktop}) \
--replace ${executable} "$command_path"
''
)
+2 -2
View File
@@ -22,8 +22,8 @@ in {
qq = wrapper super ./qq.nix; qq = wrapper super ./qq.nix;
qq-desktop-item = super.callPackage ./qq-desktop-item.nix {}; qq-desktop-item = super.callPackage ./qq-desktop-item.nix {};
wechat-uos = wrapper super ./wechat-uos.nix; wechat = wrapper super ./wechat.nix;
wechat-uos-desktop-item = super.callPackage ./wechat-uos-desktop-item.nix {}; wechat-desktop-item = super.callPackage ./wechat-desktop-item.nix {};
firefox = wrapper super ./firefox.nix; firefox = wrapper super ./firefox.nix;
firefox-desktop-item = super.callPackage ./firefox-desktop-item.nix {}; firefox-desktop-item = super.callPackage ./firefox-desktop-item.nix {};
+18 -10
View File
@@ -34,6 +34,15 @@ mkNixPak {
"org.mozilla.firefox_beta.*" = "own"; # firefox beta "org.mozilla.firefox_beta.*" = "own"; # firefox beta
"org.mpris.MediaPlayer2.firefox.*" = "own"; "org.mpris.MediaPlayer2.firefox.*" = "own";
"org.freedesktop.NetworkManager" = "talk"; "org.freedesktop.NetworkManager" = "talk";
"org.gnome.Shell.Screencast" = "talk";
# System tray icon
"org.freedesktop.Notifications" = "talk";
"org.kde.StatusNotifierWatcher" = "talk";
# File Manager
"org.freedesktop.FileManager1" = "talk";
# Uses legacy StatusNotifier implementation
"org.kde.*" = "own";
}; };
bubblewrap = { bubblewrap = {
@@ -45,16 +54,21 @@ mkNixPak {
# NOTE: sloth.mkdir is used to create the directory if it does not exist! # NOTE: sloth.mkdir is used to create the directory if it does not exist!
(sloth.mkdir (sloth.concat' sloth.homeDir "/.mozilla")) (sloth.mkdir (sloth.concat' sloth.homeDir "/.mozilla"))
sloth.xdgDocumentsDir
sloth.xdgDownloadDir sloth.xdgDownloadDir
# ================ for externsions =============================== sloth.xdgMusicDir
# required by https://github.com/browserpass/browserpass-extension sloth.xdgVideosDir
(sloth.concat' sloth.homeDir "/.local/share/password-store") # pass
]; ];
bind.ro = [ bind.ro = [
# To actually make Firefox run
"/sys/bus/pci" "/sys/bus/pci"
["${config.app.package}/lib/firefox" "/app/etc/firefox"] ["${config.app.package}/lib/firefox" "/app/etc/firefox"]
# ================ for browserpass extension ===============================
"/etc/gnupg"
(sloth.concat' sloth.homeDir "/.gnupg") # gpg's config
(sloth.concat' sloth.homeDir "/.local/share/password-store") # my secrets
(sloth.concat' sloth.runtimeDir "/gnupg") # for access gpg-agent socket
# Unsure # Unsure
(sloth.concat' sloth.xdgConfigHome "/dconf") (sloth.concat' sloth.xdgConfigHome "/dconf")
]; ];
@@ -64,12 +78,6 @@ mkNixPak {
wayland = true; wayland = true;
pipewire = true; pipewire = true;
}; };
bind.dev = [
"/dev/shm" # Shared Memory
];
tmpfs = [
"/tmp"
];
}; };
}; };
} }
+10 -1
View File
@@ -18,8 +18,11 @@ in {
"org.gtk.vfs.*" = "talk"; "org.gtk.vfs.*" = "talk";
"org.gtk.vfs" = "talk"; "org.gtk.vfs" = "talk";
"ca.desrt.dconf" = "talk"; "ca.desrt.dconf" = "talk";
"org.freedesktop.portal.*" = "talk";
"org.a11y.Bus" = "talk"; "org.a11y.Bus" = "talk";
# for default portal & gtk/hyprland's portal
"org.freedesktop.portal.*" = "talk";
"org.freedesktop.impl.portal.desktop.*" = "talk";
}; };
# https://github.com/nixpak/nixpak/blob/master/modules/gpu.nix # https://github.com/nixpak/nixpak/blob/master/modules/gpu.nix
# 1. bind readonly - /run/opengl-driver # 1. bind readonly - /run/opengl-driver
@@ -72,6 +75,8 @@ in {
"/etc/static/egl" "/etc/static/egl"
]; ];
bind.dev = [ bind.dev = [
"/dev/shm" # Shared Memory
# seems required when using nvidia as primary gpu # seems required when using nvidia as primary gpu
"/dev/nvidia0" "/dev/nvidia0"
"/dev/nvidiactl" "/dev/nvidiactl"
@@ -79,6 +84,10 @@ in {
"/dev/nvidia-uvm" "/dev/nvidia-uvm"
]; ];
tmpfs = [
"/tmp"
];
env = { env = {
XDG_DATA_DIRS = lib.mkForce (lib.makeSearchPath "share" [ XDG_DATA_DIRS = lib.mkForce (lib.makeSearchPath "share" [
iconTheme iconTheme
+1 -1
View File
@@ -5,7 +5,7 @@
makeDesktopItem { makeDesktopItem {
name = "qq"; name = "qq";
desktopName = "QQ"; desktopName = "QQ";
exec = "qq %U"; exec = "${qq}/bin/qq %U";
terminal = false; terminal = false;
# To find the icon name(nushell): # To find the icon name(nushell):
# let p = NIXPKGS_ALLOW_UNFREE=1 nix eval --impure nixpkgs#qq.outPath | str trim --char '"' # let p = NIXPKGS_ALLOW_UNFREE=1 nix eval --impure nixpkgs#qq.outPath | str trim --char '"'
+10 -7
View File
@@ -30,8 +30,13 @@ mkNixPak {
# ls -al /etc/profiles/per-user/ryan/share/dbus-1/services/ # ls -al /etc/profiles/per-user/ryan/share/dbus-1/services/
dbus.policies = { dbus.policies = {
"org.gnome.Shell.Screencast" = "talk"; "org.gnome.Shell.Screencast" = "talk";
# System tray icon
"org.freedesktop.Notifications" = "talk"; "org.freedesktop.Notifications" = "talk";
"org.kde.StatusNotifierWatcher" = "talk"; "org.kde.StatusNotifierWatcher" = "talk";
# File Manager
"org.freedesktop.FileManager1" = "talk";
# Uses legacy StatusNotifier implementation
"org.kde.*" = "own";
}; };
bubblewrap = { bubblewrap = {
# To trace all the home files QQ accesses, you can use the following nushell command: # To trace all the home files QQ accesses, you can use the following nushell command:
@@ -41,19 +46,17 @@ mkNixPak {
# given the read write permission to the following directories. # given the read write permission to the following directories.
# NOTE: sloth.mkdir is used to create the directory if it does not exist! # NOTE: sloth.mkdir is used to create the directory if it does not exist!
(sloth.mkdir (sloth.concat [sloth.xdgConfigHome "/QQ"])) (sloth.mkdir (sloth.concat [sloth.xdgConfigHome "/QQ"]))
(sloth.mkdir (sloth.concat [sloth.xdgDownloadDir "/QQ"]))
sloth.xdgDocumentsDir
sloth.xdgDownloadDir
sloth.xdgMusicDir
sloth.xdgVideosDir
]; ];
sockets = { sockets = {
x11 = false; x11 = false;
wayland = true; wayland = true;
pipewire = true; pipewire = true;
}; };
bind.dev = [
"/dev/shm" # Shared Memory
];
tmpfs = [
"/tmp"
];
}; };
}; };
} }
@@ -1,17 +0,0 @@
{
makeDesktopItem,
wechat-uos,
}:
makeDesktopItem {
name = "wechat";
desktopName = "WeChat";
exec = "wechat-uos %U";
terminal = false;
# To find the icon name(nushell):
# let p = NIXPKGS_ALLOW_UNFREE=1 nix eval --impure nixpkgs#wechat-uos.outPath | str trim --char '"'
# tree $"($p)/share/icons"
icon = "${wechat-uos}/share/icons/hicolor/256x256/apps/com.tencent.wechat.png";
type = "Application";
categories = ["Network"];
comment = "Wechat boxed";
}
-73
View File
@@ -1,73 +0,0 @@
# TODO: wechat-uos is running in FHS sandbox by default, it's problematic
# to wrap it again via flatpak. We need to find a way to fix it.
# https://github.com/NixOS/nixpkgs/blob/nixos-unstable/pkgs/by-name/we/wechat-uos/package.nix
# Refer:
# - Flatpak manifest's docs:
# - https://docs.flatpak.org/en/latest/manifests.html
# - https://docs.flatpak.org/en/latest/sandbox-permissions.html
# - wechat-uos's flatpak manifest: https://github.com/flathub/com.tencent.WeChat/blob/master/com.tencent.WeChat.yaml
{
lib,
pkgs,
mkNixPak,
...
}:
mkNixPak {
config = {sloth, ...}: {
app = {
package = pkgs.wechat-uos;
binPath = "bin/wechat-uos";
};
flatpak.appId = "com.tencent.WeChat";
imports = [
./modules/gui-base.nix
./modules/network.nix
];
# list all dbus services:
# ls -al /run/current-system/sw/share/dbus-1/services/
# ls -al /etc/profiles/per-user/ryan/share/dbus-1/services/
dbus.policies = {
"org.gnome.Shell.Screencast" = "talk";
# System tray icon
"org.freedesktop.Notifications" = "talk";
"org.kde.StatusNotifierWatcher" = "talk";
# File Manager
"org.freedesktop.FileManager1" = "talk";
# Uses legacy StatusNotifier implementation
"org.kde.*" = "own";
};
bubblewrap = {
# To trace all the home files QQ accesses, you can use the following nushell command:
# just trace-access wechat-uos
# See the Justfile in the root of this repository for more information.
bind.rw = [
# given the read write permission to the following directories.
# NOTE: sloth.mkdir is used to create the directory if it does not exist!
(sloth.mkdir (sloth.concat [sloth.homeDir "/.xwechat"]))
(sloth.mkdir (sloth.concat [sloth.xdgDocumentsDir "/xwechat_files"]))
(sloth.mkdir (sloth.concat [sloth.xdgDocumentsDir "/WeChat_Data/"]))
(sloth.mkdir (sloth.concat [sloth.xdgDownloadDir "/WeChat"]))
];
sockets = {
x11 = false;
wayland = true;
pipewire = true;
};
bind.dev = [
"/dev/shm" # Shared Memory
];
tmpfs = [
"/tmp"
];
env = {
# Hidpi scale
"QT_AUTO_SCREEN_SCALE_FACTOR" = "1";
# Only supports xcb
"QT_QPA_PLATFORM" = "kcb";
};
};
};
}
-8
View File
@@ -1,16 +1,8 @@
{ {
pkgs,
nur-ryan4yin,
...
}: {
# https://github.com/catppuccin/btop/blob/main/themes/catppuccin_mocha.theme
xdg.configFile."btop/themes".source = "${nur-ryan4yin.packages.${pkgs.system}.catppuccin-btop}/themes";
# replacement of htop/nmon # replacement of htop/nmon
programs.btop = { programs.btop = {
enable = true; enable = true;
settings = { settings = {
color_theme = "catppuccin_mocha";
theme_background = false; # make btop transparent theme_background = false; # make btop transparent
}; };
}; };
-51
View File
@@ -1,51 +0,0 @@
{
pkgs,
pkgs-unstable,
nur-ryan4yin,
...
}: {
home.packages = with pkgs; [
docker-compose
dive # explore docker layers
lazydocker # Docker terminal UI.
skopeo # copy/sync images between registries and local storage
go-containerregistry # provides `crane` & `gcrane`, it's similar to skopeo
kubectl
kubectx
kubebuilder
istioctl
clusterctl # for kubernetes cluster-api
kubevirt # virtctl
kubernetes-helm
fluxcd
argocd
ko # build go project to container image
];
programs = {
k9s = {
enable = true;
# https://k9scli.io/topics/aliases/
# aliases = {};
settings = {
skin = "catppuccino-mocha";
};
skins.catppuccin-mocha = let
skin_file = "${nur-ryan4yin.packages.${pkgs.system}.catppuccin-k9s}/dist/mocha.yml"; # theme - catppuccin mocha
skin_attr = builtins.fromJSON (
builtins.readFile
# replace 'base: &base "#1e1e2e"' with 'base: &base "default"'
# to make fg/bg color transparent. "default" means transparent in k9s skin.
(pkgs.runCommandNoCC "get-skin-json" {} ''
cat ${skin_file} \
| sed -E 's@(base: &base ).+@\1 "default"@g' \
| ${pkgs.yj}/bin/yj > $out
'')
);
in
skin_attr;
};
};
}
+69 -88
View File
@@ -1,11 +1,6 @@
{ {pkgs, ...}: {
pkgs,
nur-ryan4yin,
...
}: {
home.packages = with pkgs; [ home.packages = with pkgs; [
# Misc # Misc
tldr
cowsay cowsay
gnupg gnupg
gnumake gnumake
@@ -26,8 +21,6 @@
sad # CLI search and replace, just like sed, but with diff preview. sad # CLI search and replace, just like sed, but with diff preview.
yq-go # yaml processor https://github.com/mikefarah/yq yq-go # yaml processor https://github.com/mikefarah/yq
just # a command runner like make, but simpler just # a command runner like make, but simpler
delta # A viewer for git and diff output
lazygit # Git terminal UI.
hyperfine # command-line benchmarking tool hyperfine # command-line benchmarking tool
gping # ping, but with a graph(TUI) gping # ping, but with a graph(TUI)
doggo # DNS client for humans doggo # DNS client for humans
@@ -54,87 +47,75 @@
ncdu # analyzer your disk usage Interactively, via TUI(replacement of `du`) ncdu # analyzer your disk usage Interactively, via TUI(replacement of `du`)
]; ];
programs = { # A modern replacement for ls
# A modern replacement for ls # useful in bash/zsh prompt, not in nushell.
# useful in bash/zsh prompt, not in nushell. programs.eza = {
eza = { enable = true;
enable = true; # do not enable aliases in nushell!
# do not enable aliases in nushell! enableNushellIntegration = false;
enableNushellIntegration = false; git = true;
git = true; icons = "auto";
icons = "auto"; };
};
# a cat(1) clone with syntax highlighting and Git integration. # a cat(1) clone with syntax highlighting and Git integration.
bat = { programs.bat = {
enable = true; enable = true;
config = { config = {
pager = "less -FR"; pager = "less -FR";
theme = "catppuccin-mocha";
};
themes = {
# https://raw.githubusercontent.com/catppuccin/bat/main/Catppuccin-mocha.tmTheme
catppuccin-mocha = {
src = nur-ryan4yin.packages.${pkgs.system}.catppuccin-bat;
file = "Catppuccin-mocha.tmTheme";
};
};
};
# A command-line fuzzy finder
fzf = {
enable = true;
# https://github.com/catppuccin/fzf
# catppuccin-mocha
colors = {
"bg+" = "#313244";
"bg" = "#1e1e2e";
"spinner" = "#f5e0dc";
"hl" = "#f38ba8";
"fg" = "#cdd6f4";
"header" = "#f38ba8";
"info" = "#cba6f7";
"pointer" = "#f5e0dc";
"marker" = "#f5e0dc";
"fg+" = "#cdd6f4";
"prompt" = "#cba6f7";
"hl+" = "#f38ba8";
};
};
# zoxide is a smarter cd command, inspired by z and autojump.
# It remembers which directories you use most frequently,
# so you can "jump" to them in just a few keystrokes.
# zoxide works on all major shells.
#
# z foo # cd into highest ranked directory matching foo
# z foo bar # cd into highest ranked directory matching foo and bar
# z foo / # cd into a subdirectory starting with foo
#
# z ~/foo # z also works like a regular cd command
# z foo/ # cd into relative path
# z .. # cd one level up
# z - # cd into previous directory
#
# zi foo # cd with interactive selection (using fzf)
#
# z foo<SPACE><TAB> # show interactive completions (zoxide v0.8.0+, bash 4.4+/fish/zsh only)
zoxide = {
enable = true;
enableBashIntegration = true;
enableZshIntegration = true;
enableNushellIntegration = true;
};
# Atuin replaces your existing shell history with a SQLite database,
# and records additional context for your commands.
# Additionally, it provides optional and fully encrypted
# synchronisation of your history between machines, via an Atuin server.
atuin = {
enable = true;
enableBashIntegration = true;
enableZshIntegration = true;
enableNushellIntegration = true;
}; };
}; };
# A command-line fuzzy finder
programs.fzf.enable = true;
# very fast version of tldr in Rust
programs.tealdeer = {
enable = true;
enableAutoUpdates = true;
settings = {
display = {
compact = false;
use_pager = true;
};
updates = {
auto_update = false;
auto_update_interval_hours = 720;
};
};
};
# zoxide is a smarter cd command, inspired by z and autojump.
# It remembers which directories you use most frequently,
# so you can "jump" to them in just a few keystrokes.
# zoxide works on all major shells.
#
# z foo # cd into highest ranked directory matching foo
# z foo bar # cd into highest ranked directory matching foo and bar
# z foo / # cd into a subdirectory starting with foo
#
# z ~/foo # z also works like a regular cd command
# z foo/ # cd into relative path
# z .. # cd one level up
# z - # cd into previous directory
#
# zi foo # cd with interactive selection (using fzf)
#
# z foo<SPACE><TAB> # show interactive completions (zoxide v0.8.0+, bash 4.4+/fish/zsh only)
programs.zoxide = {
enable = true;
enableBashIntegration = true;
enableZshIntegration = true;
enableNushellIntegration = true;
};
# Atuin replaces your existing shell history with a SQLite database,
# and records additional context for your commands.
# Additionally, it provides optional and fully encrypted
# synchronisation of your history between machines, via an Atuin server.
programs.atuin = {
enable = true;
enableBashIntegration = true;
enableZshIntegration = true;
enableNushellIntegration = true;
};
} }
@@ -3,7 +3,6 @@
neovim = { neovim = {
enable = true; enable = true;
defaultEditor = true;
viAlias = true; viAlias = true;
vimAlias = true; vimAlias = true;
}; };
+29 -3
View File
@@ -13,8 +13,27 @@
rm -f ${config.home.homeDirectory}/.gitconfig rm -f ${config.home.homeDirectory}/.gitconfig
''; '';
home.packages = with pkgs; [ # GitHub CLI tool
]; # https://cli.github.com/manual/
programs.gh = {
enable = true;
settings = {
git_protocol = "ssh";
prompt = "enabled";
aliases = {
co = "pr checkout";
pv = "pr view";
};
};
hosts = {
"github.com" = {
"users" = {
"ryan4yin" = null;
};
"user" = "ryan4yin";
};
};
};
programs.git = { programs.git = {
enable = true; enable = true;
@@ -36,6 +55,7 @@
trim.bases = "develop,master,main"; # for git-trim trim.bases = "develop,master,main"; # for git-trim
push.autoSetupRemote = true; push.autoSetupRemote = true;
pull.rebase = true; pull.rebase = true;
log.date = "iso"; # use iso format for date
# replace https with ssh # replace https with ssh
url = { url = {
@@ -56,7 +76,7 @@
# signByDefault = true; # signByDefault = true;
# }; # };
# A syntax-highlighting pager in Rust(2019 ~ Now) # A syntax-highlighting pager for git, diff, grep, and blame output
delta = { delta = {
enable = true; enable = true;
options = { options = {
@@ -96,4 +116,10 @@
foreach = "submodule foreach"; foreach = "submodule foreach";
}; };
}; };
# Git terminal UI (written in go).
programs.lazygit.enable = true;
# Yet another Git TUI (written in rust).
programs.gitui.enable = true;
} }
+9
View File
@@ -0,0 +1,9 @@
{config, ...}: {
# make `npm install -g <pkg>` happey
#
# mainly used to install npm packages that updates frequently
# such as gemini-cli, claude-code, etc.
home.file.".npmrc".text = ''
prefix=${config.home.homeDirectory}/.npm
'';
}
+7 -1
View File
@@ -2,10 +2,16 @@ _: {
# use mirror for pip install # use mirror for pip install
xdg.configFile."pip/pip.conf".text = '' xdg.configFile."pip/pip.conf".text = ''
[global] [global]
index-url = https://mirrors.ustc.edu.cn/pypi/web/simple index-url = https://mirror.nju.edu.cn/pypi/web/simple
format = columns format = columns
''; '';
# xdg.configFile."pip/pip.conf".text = ''
# [global]
# index-url = https://mirror.nju.edu.cn/pypi/web/simple
# format = columns
# '';
# xdg.configFile."pip/pip.conf".text = '' # xdg.configFile."pip/pip.conf".text = ''
# [global] # [global]
# index-url = https://mirrors.bfsu.edu.cn/pypi/web/simple # index-url = https://mirrors.bfsu.edu.cn/pypi/web/simple
+165 -136
View File
@@ -1,146 +1,175 @@
# Nushell Config File # Based on the default config generated by:
# ```
# config nu --default
# ```
# #
# version = 0.81.1 # Nushell Config File Documentation
#
# Warning: This file is intended for documentation purposes only and
# is not intended to be used as an actual configuration file as-is.
#
# version = "0.103.0"
#
# A `config.nu` file is used to override default Nushell settings,
# define (or import) custom commands, or run any other startup tasks.
# See https://www.nushell.sh/book/configuration.html
#
# Nushell sets "sensible defaults" for most configuration settings, so
# the user's `config.nu` only needs to override these defaults if
# desired.
#
# This file serves as simple "in-shell" documentation for these
# settings, or you can view a more complete discussion online at:
# https://nushell.sh/book/configuration
#
# You can pretty-print and page this file using:
# config nu --doc | nu-highlight | less -R
# let's define some colors # $env.config
# -----------
# The $env.config environment variable is a record containing most Nushell
# configuration settings. Keep in mind that, as a record, setting it to a
# new record will remove any keys which aren't in the new record. Nushell
# will then automatically merge in the internal defaults for missing keys.
#
# The same holds true for keys in the $env.config which are also records
# or lists.
#
# For this reason, settings are typically changed by updating the value of
# a particular key. Merging a new config record is also possible. See the
# Configuration chapter of the book for more information.
# https://github.com/catppuccin/i3/blob/main/themes/catppuccin-mocha
let rosewater = "#f5e0dc"
let flamingo = "#f2cdcd"
let pink = "#f5c2e7"
let mauve = "#cba6f7"
let red = "#f38ba8"
let maroon = "#eba0ac"
let peach = "#fab387"
let green = "#a6e3a1"
let teal = "#94e2d5"
let sky = "#89dceb"
let sapphire = "#74c7ec"
let blue = "#89b4fa"
let lavender = "#b4befe"
let text = "#cdd6f4"
let subtext1 = "#bac2de"
let subtext0 = "#a6adc8"
let overlay2 = "#9399b2"
let overlay1 = "#7f849c"
let overlay0 = "#6c7086"
let surface2 = "#585b70"
let surface1 = "#45475a"
let surface0 = "#313244"
let base = "#1e1e2e"
let mantle = "#181825"
let crust = "#11111b"
# we're creating a theme here that uses the colors we defined above. $env.config.history.file_format = "sqlite"
$env.config.history.max_size = 5_000_000
let catppuccin_theme = { # isolation (bool):
separator: $overlay2 # `true`: New history from other currently-open Nushell sessions is not
leading_trailing_space_bg: $surface2 # seen when scrolling through the history using PrevHistory (typically
header: $red # the Up key) or NextHistory (Down key)
date: $pink # `false`: All commands entered in other Nushell sessions will be mixed with
filesize: $green # those from the current shell.
row_index: $text # Note: Older history items (from before the current shell was started) are
bool: $peach # always shown.
int: $red # This setting only applies to SQLite-backed history
duration: $sky $env.config.history.isolation = true
range: $sapphire
float: $lavender
string: $text
nothing: $overlay1
binary: $subtext1
cellpath: $subtext0
hints: dark_gray
shape_garbage: { fg: $overlay2 bg: $red attr: b} # ----------------------
shape_bool: $maroon # Miscellaneous Settings
shape_int: { fg: $pink attr: b} # ----------------------
shape_float: { fg: $pink attr: b}
shape_range: { fg: $overlay0 attr: b}
shape_internalcall: { fg: $maroon attr: b}
shape_external: $mauve
shape_externalarg: { fg: $red attr: b}
shape_literal: $flamingo
shape_operator: $rosewater
shape_signature: { fg: $red attr: b}
shape_string: $red
shape_filepath: $peach
shape_globpattern: { fg: $teal attr: b}
shape_variable: $pink
shape_flag: { fg: $mauve attr: b}
shape_custom: {attr: b}
}
# The default config record. This is where much of your global configuration is setup. # show_banner (bool): Enable or disable the welcome banner at startup
$env.config = { $env.config.show_banner = false
color_config: $catppuccin_theme # <-- this is the theme
use_ansi_coloring: true
# true or false to enable or disable the welcome banner at startup # rm.always_trash (bool):
show_banner: false # true: rm behaves as if the --trash/-t option is specified
# false: rm behaves as if the --permanent/-p option is specified (default)
$env.config.rm.always_trash = true
table: { # recursion_limit (int): how many times a command can call itself recursively
mode: rounded # basic, compact, compact_double, light, thin, with_love, rounded, reinforced, heavy, none, other # before an error will be generated.
index_mode: always # "always" show indexes, "never" show indexes, "auto" = show indexes when a table has "index" column $env.config.recursion_limit = 50
show_empty: true # show 'empty list' and 'empty record' placeholders for command output
trim: { # ---------------------------
methodology: wrapping # wrapping or truncating # Commandline Editor Settings
wrapping_try_keep_words: true # A strategy used by the 'wrapping' methodology # ---------------------------
truncating_suffix: "..." # A suffix used by the 'truncating' methodology
} # edit_mode (string) "vi" or "emacs" sets the editing behavior of Reedline
} $env.config.edit_mode = "vi"
# Command that will be used to edit the current line buffer with Ctrl+O.
# If unset, uses $env.VISUAL and then $env.EDITOR
#
$env.config.buffer_editor = ["nvim", "--clean"]
# cursor_shape_* (string)
# -----------------------
# The following variables accept a string from the following selections:
# "block", "underscore", "line", "blink_block", "blink_underscore", "blink_line", or "inherit"
# "inherit" skips setting cursor shape and uses the current terminal setting.
$env.config.cursor_shape.emacs = "inherit" # Cursor shape in emacs mode
$env.config.cursor_shape.vi_insert = "block" # Cursor shape in vi-insert mode
$env.config.cursor_shape.vi_normal = "underscore" # Cursor shape in normal vi mode
# --------------------
# Terminal Integration
# --------------------
# Nushell can output a number of escape codes to enable advanced features in Terminal Emulators
# that support them. Settings in this section enable or disable these features in Nushell.
# Features aren't supported by your Terminal can be disabled. Features can also be disabled,
# of course, if there is a conflict between the Nushell and Terminal's implementation.
# use_kitty_protocol (bool):
# A keyboard enhancement protocol supported by the Kitty Terminal. Additional keybindings are
# available when using this protocol in a supported terminal. For example, without this protocol,
# Ctrl+I is interpreted as the Tab Key. With this protocol, Ctrl+I and Tab can be mapped separately.
$env.config.use_kitty_protocol = false
# osc2 (bool):
# When true, the current directory and running command are shown in the terminal tab/window title.
# Also abbreviates the directory name by prepending ~ to the home directory and its subdirectories.
$env.config.shell_integration.osc2 = true
# osc7 (bool):
# Nushell will report the current directory to the terminal using OSC 7. This is useful when
# spawning new tabs in the same directory.
$env.config.shell_integration.osc7 = true
# osc9_9 (bool):
# Enables/Disables OSC 9;9 support, originally a ConEmu terminal feature. This is an
# alternative to OSC 7 which also communicates the current path to the terminal.
$env.config.shell_integration.osc9_9 = false
# osc8 (bool):
# When true, the `ls` command will generate clickable links that can be launched in another
# application by the terminal.
# Note: This setting replaces the now deprecated `ls.clickable_links`
$env.config.shell_integration.osc8 = true
# osc133 (bool):
# true/false to enable/disable OSC 133 support, a set of several escape sequences which
# report the (1) starting location of the prompt, (2) ending location of the prompt,
# (3) starting location of the command output, and (4) the exit code of the command.
# originating with Final Term. These sequences report information regarding the prompt
# location as well as command status to the terminal. This enables advanced features in
# some terminals, including the ability to provide separate background colors for the
# command vs. the output, collapsible output, or keybindings to scroll between prompts.
$env.config.shell_integration.osc133 = true
# osc633 (bool):
# true/false to enable/disable OSC 633, an extension to OSC 133 for Visual Studio Code
$env.config.shell_integration.osc633 = true
# NU_LIB_DIRS
# -----------
# Directories in this constant are searched by the
# `use` and `source` commands.
#
# By default, the `scripts` subdirectory of the default configuration
# directory is included:
const NU_LIB_DIRS = [
($nu.default-config-dir | path join 'scripts') # add <nushell-config-dir>/scripts
($nu.data-dir | path join 'completions') # default home for nushell completions
]
# NU_PLUGIN_DIRS
# --------------
# Directories to search for plugin binaries when calling add.
# By default, the `plugins` subdirectory of the default configuration
# directory is included:
const NU_PLUGIN_DIRS = [
($nu.default-config-dir | path join 'plugins') # add <nushell-config-dir>/plugins
]
# As with NU_LIB_DIRS, an $env.NU_PLUGIN_DIRS is searched after the constant version
# The `path add` function from the Standard Library also provides
# a convenience method for prepending to the path:
use std/util "path add"
path add "~/.local/bin"
# You can remove duplicate directories from the path using:
$env.PATH = ($env.PATH | uniq)
completions: {
case_sensitive: false # set to true to enable case-sensitive completions
quick: true # set this to false to prevent auto-selecting completions when only one remains
partial: true # set this to false to prevent partial filling of the prompt
algorithm: "prefix" # prefix or fuzzy
external: {
enable: true # set to false to prevent nushell looking into $env.PATH to find more suggestions, `false` recommended for WSL users as this look up may be very slow
max_results: 100 # setting it lower can improve completion performance at the cost of omitting some options
completer: null # check 'carapace_completer' above as an example
}
}
filesize: {
metric: true # true => KB, MB, GB (ISO standard), false => KiB, MiB, GiB (Windows standard)
format: "auto" # b, kb, kib, mb, mib, gb, gib, tb, tib, pb, pib, eb, eib, zb, zib, auto
}
cursor_shape: {
emacs: line # block, underscore, line, blink_block, blink_underscore, blink_line (line is the default)
vi_insert: block # block, underscore, line , blink_block, blink_underscore, blink_line (block is the default)
vi_normal: underscore # block, underscore, line, blink_block, blink_underscore, blink_line (underscore is the default)
}
footer_mode: "auto" # always, never, number_of_rows, auto
float_precision: 2 # the precision for displaying floats in tables
# buffer_editor: "emacs" # command that will be used to edit the current line buffer with ctrl+o, if unset fallback to $env.EDITOR and $env.VISUAL
bracketed_paste: true # enable bracketed paste, currently useless on windows
edit_mode: emacs # emacs, vi
shell_integration: {
# osc2 abbreviates the path if in the home_dir, sets the tab/window title, shows the running command in the tab/window title
osc2: true
# osc7 is a way to communicate the path to the terminal, this is helpful for spawning new tabs in the same directory
osc7: true
# osc8 is also implemented as the deprecated setting ls.show_clickable_links, it shows clickable links in ls output if your terminal supports it. show_clickable_links is deprecated in favor of osc8
osc8: true
# osc9_9 is from ConEmu and is starting to get wider support. It's similar to osc7 in that it communicates the path to the terminal
osc9_9: false
# osc133 is several escapes invented by Final Term which include the supported ones below.
# 133;A - Mark prompt start
# 133;B - Mark prompt end
# 133;C - Mark pre-execution
# 133;D;exit - Mark execution finished with exit code
# This is used to enable terminals to know where the prompt is, the command is, where the command finishes, and where the output of the command is
osc133: true
# osc633 is closely related to osc133 but only exists in visual studio code (vscode) and supports their shell integration features
# 633;A - Mark prompt start
# 633;B - Mark prompt end
# 633;C - Mark pre-execution
# 633;D;exit - Mark execution finished with exit code
# 633;E - NOT IMPLEMENTED - Explicitly set the command line with an optional nonce
# 633;P;Cwd=<path> - Mark the current working directory and communicate it to the terminal
# and also helps with the run recent menu in vscode
osc633: true
# reset_application_mode is escape \x1b[?1l and was added to help ssh work better
reset_application_mode: true
}
render_right_prompt_on_last_line: false # true or false to enable or disable right prompt to be rendered on last line of the prompt.
}
+14 -16
View File
@@ -1,8 +1,4 @@
{ {config, ...}: let
config,
pkgs-unstable,
...
}: let
shellAliases = { shellAliases = {
k = "kubectl"; k = "kubectl";
@@ -13,22 +9,24 @@
localBin = "${config.home.homeDirectory}/.local/bin"; localBin = "${config.home.homeDirectory}/.local/bin";
goBin = "${config.home.homeDirectory}/go/bin"; goBin = "${config.home.homeDirectory}/go/bin";
rustBin = "${config.home.homeDirectory}/.cargo/bin"; rustBin = "${config.home.homeDirectory}/.cargo/bin";
npmBin = "${config.home.homeDirectory}/.npm/bin";
in { in {
# only works in bash/zsh, not nushell
home.shellAliases = shellAliases;
programs.nushell = {
enable = true;
package = pkgs-unstable.nushell;
configFile.source = ./config.nu;
inherit shellAliases;
};
programs.bash = { programs.bash = {
enable = true; enable = true;
enableCompletion = true; enableCompletion = true;
bashrcExtra = '' bashrcExtra = ''
export PATH="$PATH:${localBin}:${goBin}:${rustBin}" export PATH="$PATH:${localBin}:${goBin}:${rustBin}:${npmBin}"
''; '';
}; };
# NOTE: only works in bash/zsh, not nushell
home.shellAliases = shellAliases;
# NOTE: nushell will be launched in bash, so it can inherit all the eenvironment variables.
programs.nushell = {
enable = true;
# package = pkgs-unstable.nushell;
configFile.source = ./config.nu;
inherit shellAliases;
};
} }
+15 -23
View File
@@ -1,8 +1,4 @@
{ {
pkgs,
nur-ryan4yin,
...
}: {
programs.starship = { programs.starship = {
enable = true; enable = true;
@@ -10,24 +6,20 @@
enableZshIntegration = true; enableZshIntegration = true;
enableNushellIntegration = true; enableNushellIntegration = true;
settings = settings = {
{ character = {
character = { success_symbol = "[](bold green)";
success_symbol = "[](bold green)"; error_symbol = "[](bold red)";
error_symbol = "[](bold red)"; };
}; aws = {
aws = { symbol = "🅰 ";
symbol = "🅰 "; };
}; gcloud = {
gcloud = { # do not show the account/project's info
# do not show the account/project's info # to avoid the leak of sensitive information when sharing the terminal
# to avoid the leak of sensitive information when sharing the terminal format = "on [$symbol$active(\($region\))]($style) ";
format = "on [$symbol$active(\($region\))]($style) "; symbol = "🅶 ";
symbol = "🅶 "; };
}; };
palette = "catppuccin_mocha";
}
// builtins.fromTOML (builtins.readFile "${nur-ryan4yin.packages.${pkgs.system}.catppuccin-starship}/palettes/mocha.toml");
}; };
} }
+15
View File
@@ -0,0 +1,15 @@
{catppuccin, ...}: {
# https://github.com/catppuccin/nix
imports = [
catppuccin.homeModules.catppuccin
];
catppuccin = {
# The default `enable` value for all available programs.
enable = true;
# one of "latte", "frappe", "macchiato", "mocha"
flavor = "mocha";
# one of "blue", "flamingo", "green", "lavender", "maroon", "mauve", "peach", "pink", "red", "rosewater", "sapphire", "sky", "teal", "yellow"
accent = "pink";
};
}
+2 -9
View File
@@ -1,13 +1,8 @@
{ {pkgs, ...}: {
pkgs,
pkgs-unstable,
nur-ryan4yin,
...
}: {
# terminal file manager # terminal file manager
programs.yazi = { programs.yazi = {
enable = true; enable = true;
package = pkgs-unstable.yazi; package = pkgs.yazi;
# Changing working directory when exiting Yazi # Changing working directory when exiting Yazi
enableBashIntegration = true; enableBashIntegration = true;
enableNushellIntegration = true; enableNushellIntegration = true;
@@ -18,6 +13,4 @@
}; };
}; };
}; };
xdg.configFile."yazi/theme.toml".source = "${nur-ryan4yin.packages.${pkgs.system}.catppuccin-yazi}/mocha.toml";
} }
+14 -7
View File
@@ -1,10 +1,17 @@
{pkgs, ...}: { {pkgs, ...}: {
home.packages = with pkgs; [ home.packages = with pkgs;
mitmproxy # http/https proxy tool [
insomnia # REST client mitmproxy # http/https proxy tool
wireshark # network analyzer wireshark # network analyzer
# IDEs # IDEs
jetbrains.idea-community # jetbrains.idea-community
];
# AI cli tools
k8sgpt
kubectl-ai # an ai helper opensourced by google
]
++ (lib.optionals pkgs.stdenv.isx86_64 [
insomnia # REST client
]);
} }
+1 -1
View File
@@ -52,7 +52,7 @@ Error opening terminal: xterm-kitty.
NixOS preserve the `TERMINFO` and `TERMINFO_DIRS` environment variables, for `root` and the `wheel` NixOS preserve the `TERMINFO` and `TERMINFO_DIRS` environment variables, for `root` and the `wheel`
group: group:
[nixpkgs/nixos/modules/config/terminfo.nix](https://github.com/NixOS/nixpkgs/blob/nixos-24.05/nixos/modules/config/terminfo.nix#L18) [nixpkgs/nixos/modules/config/terminfo.nix](https://github.com/NixOS/nixpkgs/blob/nixos-25.05/nixos/modules/config/terminfo.nix#L18)
For nix-darwin, take a look at <https://github.com/LnL7/nix-darwin/wiki/Terminfo-issues> For nix-darwin, take a look at <https://github.com/LnL7/nix-darwin/wiki/Terminfo-issues>
@@ -1,65 +0,0 @@
[colors.primary]
background = "#1e1e2e"
foreground = "#cdd6f4"
dim_foreground = "#7f849c"
bright_foreground = "#cdd6f4"
[colors.cursor]
text = "#1e1e2e"
cursor = "#f5e0dc"
[colors.vi_mode_cursor]
text = "#1e1e2e"
cursor = "#b4befe"
[colors.search.matches]
foreground = "#1e1e2e"
background = "#a6adc8"
[colors.search.focused_match]
foreground = "#1e1e2e"
background = "#a6e3a1"
[colors.footer_bar]
foreground = "#1e1e2e"
background = "#a6adc8"
[colors.hints.start]
foreground = "#1e1e2e"
background = "#f9e2af"
[colors.hints.end]
foreground = "#1e1e2e"
background = "#a6adc8"
[colors.selection]
text = "#1e1e2e"
background = "#f5e0dc"
[colors.normal]
black = "#45475a"
red = "#f38ba8"
green = "#a6e3a1"
yellow = "#f9e2af"
blue = "#89b4fa"
magenta = "#f5c2e7"
cyan = "#94e2d5"
white = "#bac2de"
[colors.bright]
black = "#585b70"
red = "#f38ba8"
green = "#a6e3a1"
yellow = "#f9e2af"
blue = "#89b4fa"
magenta = "#f5c2e7"
cyan = "#94e2d5"
white = "#a6adc8"
[[colors.indexed_colors]]
index = 16
color = "#fab387"
[[colors.indexed_colors]]
index = 17
color = "#f5e0dc"
+19 -9
View File
@@ -26,26 +26,32 @@
{ {
programs.alacritty = { programs.alacritty = {
enable = true; enable = true;
package = pkgs-unstable.alacritty; # package = pkgs-unstable.alacritty;
# https://alacritty.org/config-alacritty.html # https://alacritty.org/config-alacritty.html
settings = { settings = {
general.import = [
./catppuccin-mocha.toml
];
window = { window = {
opacity = 0.93; opacity = 0.93;
startup_mode = "Maximized"; # Maximized window startup_mode = "Maximized"; # Maximized window
dynamic_title = true; dynamic_title = true;
option_as_alt = "Both"; # Option key acts as Alt on macOS option_as_alt = "Both"; # Option key acts as Alt on macOS
decorations = "None"; # Show neither borders nor title bar
}; };
scrolling = { scrolling = {
history = 10000; history = 10000;
}; };
font = { font = {
bold = {family = "JetBrainsMono Nerd Font";}; bold = {
italic = {family = "JetBrainsMono Nerd Font";}; family = "Maple Mono NF CN";
normal = {family = "JetBrainsMono Nerd Font";}; };
bold_italic = {family = "JetBrainsMono Nerd Font";}; italic = {
family = "Maple Mono NF CN";
};
normal = {
family = "Maple Mono NF CN";
};
bold_italic = {
family = "Maple Mono NF CN";
};
size = size =
if pkgs.stdenv.isDarwin if pkgs.stdenv.isDarwin
then 14 then 14
@@ -55,7 +61,11 @@
# Spawn a nushell in login mode via `bash` # Spawn a nushell in login mode via `bash`
shell = { shell = {
program = "${pkgs.bash}/bin/bash"; program = "${pkgs.bash}/bin/bash";
args = ["--login" "-c" "nu --login --interactive"]; args = [
"--login"
"-c"
"nu --login --interactive"
];
}; };
# Controls the ability to write to the system clipboard with the OSC 52 escape sequence. # Controls the ability to write to the system clipboard with the OSC 52 escape sequence.
# It's used by zellij to copy text to the system clipboard. # It's used by zellij to copy text to the system clipboard.
+12 -43
View File
@@ -2,12 +2,22 @@
programs.foot = { programs.foot = {
# foot is designed only for Linux # foot is designed only for Linux
enable = pkgs.stdenv.isLinux; enable = pkgs.stdenv.isLinux;
# foot can also be run in a server mode. In this mode, one process hosts multiple windows.
# All Wayland communication, VT parsing and rendering is done in the server process.
# New windows are opened by running footclient, which remains running until the terminal window is closed.
#
# Advantages to run foot in server mode including reduced memory footprint and startup time.
# The downside is a performance penalty. If one window is very busy with, for example, producing output,
# then other windows will suffer. Also, should the server process crash, all windows will be gone.
server.enable = true;
# https://man.archlinux.org/man/foot.ini.5 # https://man.archlinux.org/man/foot.ini.5
settings = { settings = {
main = { main = {
term = "foot"; # or "xterm-256color" for maximum compatibility term = "foot"; # or "xterm-256color" for maximum compatibility
font = "JetBrainsMono Nerd Font:size=14"; font = "Maple Mono NF CN:size=14";
dpi-aware = "yes"; dpi-aware = "no"; # scale via window manager instead
# Spawn a nushell in login mode via `bash` # Spawn a nushell in login mode via `bash`
shell = "${pkgs.bash}/bin/bash --login -c 'nu --login --interactive'"; shell = "${pkgs.bash}/bin/bash --login -c 'nu --login --interactive'";
@@ -16,47 +26,6 @@
mouse = { mouse = {
hide-when-typing = "yes"; hide-when-typing = "yes";
}; };
# https://github.com/catppuccin/foot/blob/main/themes/catppuccin-mocha.ini
cursor = {
color = "11111b f5e0dc";
};
colors = {
alpha = "0.93"; # background opacity
foreground = "cdd6f4";
background = "1e1e2e";
regular0 = "45475a";
regular1 = "f38ba8";
regular2 = "a6e3a1";
regular3 = "f9e2af";
regular4 = "89b4fa";
regular5 = "f5c2e7";
regular6 = "94e2d5";
regular7 = "bac2de";
bright0 = "585b70";
bright1 = "f38ba8";
bright2 = "a6e3a1";
bright3 = "f9e2af";
bright4 = "89b4fa";
bright5 = "f5c2e7";
bright6 = "94e2d5";
bright7 = "a6adc8";
"16" = "fab387";
"17" = "f5e0dc";
"selection-foreground" = "cdd6f4";
"selection-background" = "414356";
"search-box-no-match" = "11111b f38ba8";
"search-box-match" = "cdd6f4 313244";
"jump-labels" = "11111b fab387";
urls = "89b4fa";
};
}; };
}; };
} }
+39
View File
@@ -0,0 +1,39 @@
{
pkgs,
ghostty,
...
}:
###########################################################
#
# Ghostty Configuration
#
###########################################################
{
programs.ghostty = {
enable = true;
package =
if pkgs.stdenv.isDarwin
then pkgs.hello # pkgs.ghostty is currently broken on darwin
else pkgs.ghostty; # the stable version
# package = ghostty.packages.${pkgs.system}.default; # the latest version
enableBashIntegration = false;
installBatSyntax = false;
# installVimSyntax = true;
settings = {
font-family = "Maple Mono NF CN";
font-size = 13;
background-opacity = 0.93;
# only supported on macOS;
background-blur-radius = 10;
scrollback-limit = 20000;
# https://ghostty.org/docs/config/reference#command
# To resolve issues:
# 1. https://github.com/ryan4yin/nix-config/issues/26
# 2. https://github.com/ryan4yin/nix-config/issues/8
# Spawn a nushell in login mode via `bash`
command = "${pkgs.bash}/bin/bash --login -c 'nu --login --interactive'";
};
};
}
+5 -5
View File
@@ -16,12 +16,8 @@
{ {
programs.kitty = { programs.kitty = {
enable = true; enable = true;
# kitty has catppuccin theme built-in,
# all the built-in themes are packaged into an extra package named `kitty-themes`
# and it's installed by home-manager if `theme` is specified.
themeFile = "Catppuccin-Mocha";
font = { font = {
name = "JetBrainsMono Nerd Font"; name = "Maple Mono NF CN";
# use different font size on macOS # use different font size on macOS
size = size =
if pkgs.stdenv.isDarwin if pkgs.stdenv.isDarwin
@@ -36,6 +32,10 @@
}; };
settings = { settings = {
# do not show title bar & window title
hide_window_decorations = "titlebar-and-corners";
macos_show_window_title_in = "none";
background_opacity = "0.93"; background_opacity = "0.93";
macos_option_as_alt = true; # Option key acts as Alt on macOS macos_option_as_alt = true; # Option key acts as Alt on macOS
enable_audio_bell = false; enable_audio_bell = false;
+1 -4
View File
@@ -12,9 +12,6 @@
# You can update Home Manager without changing this value. See # You can update Home Manager without changing this value. See
# the Home Manager release notes for a list of state version # the Home Manager release notes for a list of state version
# changes in each release. # changes in each release.
stateVersion = "24.05"; stateVersion = "24.11";
}; };
# Let Home Manager install and manage itself.
programs.home-manager.enable = true;
} }
+6 -1
View File
@@ -3,6 +3,9 @@
pkgs, pkgs,
... ...
}: { }: {
# https://developer.hashicorp.com/terraform/cli/config/config-file
home.file.".terraformrc".source = ./terraformrc;
home.packages = with pkgs; [ home.packages = with pkgs; [
# infrastructure as code # infrastructure as code
# pulumi # pulumi
@@ -27,7 +30,9 @@
# digitalocean # digitalocean
doctl doctl
# google cloud # google cloud
google-cloud-sdk (google-cloud-sdk.withExtraComponents (with google-cloud-sdk.components; [
gke-gcloud-auth-plugin
]))
# cloud tools that nix do not have cache for. # cloud tools that nix do not have cache for.
terraform terraform
+2
View File
@@ -0,0 +1,2 @@
plugin_cache_dir = "$HOME/.terraform.d/plugin-cache"
disable_checkpoint = true
+39
View File
@@ -0,0 +1,39 @@
{
pkgs,
pkgs-unstable,
nur-ryan4yin,
...
}: {
home.packages = with pkgs; [
podman-compose
dive # explore docker layers
lazydocker # Docker terminal UI.
skopeo # copy/sync images between registries and local storage
go-containerregistry # provides `crane` & `gcrane`, it's similar to skopeo
kubectl
kubectx # kubectx & kubens
kubectl-view-secret # kubectl view-secret
kubectl-tree # kubectl tree
kubectl-node-shell # exec into node
kubepug # kubernetes pre upgrade checker
kubebuilder
istioctl
clusterctl # for kubernetes cluster-api
kubevirt # virtctl
kubernetes-helm
fluxcd
argocd
ko # build go project to container image
];
programs.k9s.enable = true;
catppuccin.k9s.transparent = true;
programs.kubecolor = {
enable = true;
enableAlias = true;
};
}
+4 -4
View File
@@ -18,8 +18,8 @@
colmena # nixos's remote deployment tool colmena # nixos's remote deployment tool
# db related # db related
pkgs-unstable.mycli mycli
pkgs-unstable.pgcli pgcli
mongosh mongosh
sqlite sqlite
@@ -27,10 +27,10 @@
minicom minicom
# ai related # ai related
pkgs-unstable.python312Packages.huggingface-hub # huggingface-cli python313Packages.huggingface-hub # huggingface-cli
# misc # misc
pkgs-unstable.devbox devbox
bfg-repo-cleaner # remove large files from git history bfg-repo-cleaner # remove large files from git history
k6 # load testing tool k6 # load testing tool
protobuf # protocol buffer compiler protobuf # protocol buffer compiler
+1 -2
View File
@@ -3,8 +3,7 @@
My editors: My editors:
1. Neovim 1. Neovim
2. Emacs 2. Helix
3. Helix
And `Zellij` for a smooth and stable terminal experience. And `Zellij` for a smooth and stable terminal experience.
@@ -11,8 +11,6 @@
Some plugins: Some plugins:
- Emacs
- [parinfer-rusT-mode](https://github.com/justinbarclay/parinfer-rust-mode)
- Neovim - Neovim
- [parinfer-rust](https://github.com/eraserhd/parinfer-rust) - [parinfer-rust](https://github.com/eraserhd/parinfer-rust)
- <https://github.com/Olical/conjure> - <https://github.com/Olical/conjure>
-230
View File
@@ -1,230 +0,0 @@
# Emacs Editor
## Why emacs?
1. Explore the unknown, just for fun!
2. Org Mode
3. Lisp Coding
4. A top-level tutorial for Emacs(Chinese): <https://nyk.ma/tags/emacs/>
5. A Beginner's Guide to Emacs(Chinese):
<https://github.com/emacs-tw/emacs-101-beginner-survival-guide>
## Screenshot
![](/_img/emacs-2024-01-07.webp)
## Useful Links
- Framework: <https://github.com/doomemacs/doomemacs>
- key bindings:
- source code:
<https://github.com/doomemacs/doomemacs/blob/master/modules/config/default/%2Bevil-bindings.el>
- docs: <https://github.com/doomemacs/doomemacs/blob/master/modules/editor/evil/README.org>
- module index: <https://github.com/doomemacs/doomemacs/blob/master/docs/modules.org>
- LSP Client: <https://github.com/manateelazycat/lsp-bridge>
- Emacs Wiki: <https://www.emacswiki.org/emacs/SiteMap>
- Awesome Emacs: <https://github.com/emacs-tw/awesome-emacs#lsp-client>
- Chinese(rime) support: <https://github.com/DogLooksGood/emacs-rime>
- modal editing:
- <https://github.com/emacs-evil/evil>: evil mode, enabled by default in doom-emacs.
- <https://github.com/meow-edit/meow>
## Install or Update
After deploying this nix flake, run the following command to install or update emacs:
```bash
doom sync
```
when in doubt, run `doom sync`!
## Testing
> via `Justfile` located at the root of this repo.
```bash
# testing
just emacs-test
just emacs-purge
just emacs-reload
# clear test data
just emacs-clean
```
## Limits
- It's too slow to start up and install(compile/build) packages.
- I have to use emacs in daemon/client mode to avoid this issue.
- It's too large in size, not suitable for servers.
- So vim/neovim is still the best choice for servers.
- Emacs's markdown-mode works not well with tables, see:
- https://github.com/jrblevin/markdown-mode/issues/380
- I use git command frequently, but doomemacs only autoupdates status of git diff / treemacs when
using magit.
- I have to learn magit to avoid this issue...
- GitHub's orgmode support is not well, Markdown is better for GitHub.
- Use markdown for repo's README.md, and use orgmode for my personal notes and docs only.
## Cheetsheet
Here is the cheetsheet related to my DoomEmacs configs. Please read vim's common cheetsheet at
[../README.md](../README.md) before reading the following.
### Basics
> Terminal(vterm) is useful in GUI mode, I use Zellij instead in terminal mode.
| Action | Shortcut |
| ---------------------- | ------------------------------------------------- |
| Popup Terminal(vterm) | `SPC + o + t` |
| Open Terminal | `SPC + o + T` |
| Open file tree sidebar | `SPC + o + p` |
| Frame fullscreen | `SPC + t + F` |
| Exit | `M-x C-c` |
| Execute Command | `M-x`(hold on `Alt`/`option`, and then press `x`) |
| Eval Lisp Code | `M-:`(hold on `Alt`/`option`, and then press `:`) |
### Window Navigation
| Action | Shortcut |
| ------------------------------------------ | --------------------------------------------------------------------- |
| Split a window vertically and horizontally | `SPC w v/s` |
| Move to a window in a specific direction | `Ctrl-w + h/j/k/l` |
| Move a window to a specific direction | `Ctrl-w + H/J/K/L` |
| Move to the next window | `SPC w w` |
| Close the current window | `SPC w q` |
| Rebalance all windows | `SPC w =` |
| Set window's width(columns) | `80 SPC w \|` (the Vertical line is escaped due to markdown's limits) |
| Set window's height | `30 SPC w _ ` |
### File Tree
- treemacs: <https://github.com/Alexander-Miller/treemacs/blob/master/src/elisp/treemacs-mode.el>
- treemacs-evil:
<https://github.com/Alexander-Miller/treemacs/blob/master/src/extra/treemacs-evil.el>
| Action | Shortcut |
| ------------------------------------- | --------- |
| Resize Treemacs's window | `>` & `<` |
| Extra Wide Window | `W` |
| Rename | `R` |
| Delete File/Direcoty | `d` |
| New File | `cf` |
| New Directory | `cd` |
| Go to parent | `u` |
| Run shell command in for current node | `!` |
| Refresh file tree | `gr` |
| Copy project-path into pasteboard | `yp` |
| Copy absolute-path into pasteboard | `ya` |
| Copy relative-path into pasteboard | `yr` |
| Copy file to another location | `yf` |
| Move file to another location | `m` |
| quit | `q` |
And bookmarks:
- Add bookmarks in treemacs: `b`
- Show Bookmark List: `SPC s m`
### Splitting and Buffers
| Action | Shortcut |
| ----------------------- | ----------------- |
| Buffer List | `<Space> + ,` |
| Save all buffers(Tab) | `<Space> + b + S` |
| Kill the current buffer | `<Space> + b + k` |
| Kill all buffers | `<Space> + b + K` |
### Editing and Formatting
| Action | Shortcut |
| ------------------------------------------ | ------------------- |
| Format Document | `<Space> + cf` |
| Code Actions | `<Space> + ca` |
| Rename | `<Space> + cr` |
| Opening LSP symbols | `<Space> + cS` |
| Show all LSP Errors | `<Space> + c + x/X` |
| Show infinite undo history(really useful!) | `<Space> + s + u` |
| Open filepath/URL at cursor | `gf` |
| Find files by keyword in path | `<Space> + <Space>` |
| Grep string in files (vertico + ripgrep) | `<Space> + sd` |
### Image Preview(GUI mode only)
Use `-`, `+` to resize the image, `r` to rotate the image.
### Search & replace
```bash
SPC s p foo C-; E C-c C-p :%s/foo/bar/g RET Z Z
```
1. `SPC s p`: search in project
1. `foo`: the keyword to search
1. `C-; E`: exports what youre looking at into a new buffer in grep-mode
1. `C-c C-p` to run wgrep-change-to-wgrep-mode to make the search results writable.
1. `:%s/foo/bar/g RET`: replace in the current buffer(just like neovim/vim)
1. `Z Z`: to write all the changes to their respective files
### Projects
> easily switch between projects without exit emacs!
| Action | Shortcut |
| -------------------------- | ------------- |
| Switch between projects | `SPC + p + p` |
| Browse the current project | `SPC + p + .` |
| Add new project | `SPC + p + a` |
### Workspaces
> Very useful when run emacs in daemon/client modes
| Action | Shortcut |
| --------------------------- | --------------------------- |
| Switch between workspaces | `M-1/2/3/...`(Alt-1/2/3/..) |
| New Workspace | `SPC + TAB + n` |
| New Named Workspace | `SPC + TAB + N` |
| Delete Workspace | `SPC + TAB + d` |
| Display Workspaces bar blow | `SPC + TAB + TAB` |
### Magit
> https://github.com/magit/magit
Magit is a powerful tool that make git operations easy and intuitive.
| Action | Shortcut |
| ------------------------ | ------------------------ |
| Open Magit | `C-x g` or `SPC + g + g` |
| Switch branch | `SPC + g + b` |
| Show buffer's commit log | `SPC + g + L` |
Shortcuts in magit's pane:
> When run `git commit` / `git add` / `git push` /... via magit, multiple Arguments can be set. Set
> arguments won't trigger a git command immediately. Magit will try to run a git command only after
> an Action key is pressed.
| Action | Shortcut |
| -------------------------------------------------- | --------------------------------------------- |
| Quit the current Magit pane | `q` |
| Show log | `l` |
| Show current branch's log | `l + l` |
| Show current reflog | `l + r` |
| Commit | `c` |
| Stage | `s` |
| Unstage | `u` |
| Push | `p` |
| Pull | `f` |
| Rebase | `r` |
| Rebase Interactively | `r + i`, select on a commit, then `C-c + C-c` |
| Stash | `z` |
| Merge | `m` |
| Fold/Unfold | `TAB` |
| Show details of the current unit(commit/stage/...) | `<ENTER>` |
KeyBinding full list:
<https://github.com/emacs-evil/evil-collection/tree/master/modes/magit#key-bindings>
-132
View File
@@ -1,132 +0,0 @@
# ==============================================
# Based on doomemacs's author's config:
# https://github.com/hlissner/dotfiles/blob/master/modules/editors/emacs.nix
#
# Emacs Tutorials:
# 1. Official: <https://www.gnu.org/software/emacs/tour/index.html>
# 2. Doom Emacs: <https://github.com/doomemacs/doomemacs/blob/master/docs/index.org>
#
{
config,
lib,
pkgs,
doomemacs,
...
}:
with lib; let
cfg = config.modules.editors.emacs;
envExtra = lib.mkAfter ''
export PATH="${config.xdg.configHome}/emacs/bin:$PATH"
'';
shellAliases = {
e = "emacsclient --create-frame"; # gui
et = "emacsclient --create-frame --tty"; # terminal
};
librime-dir = "${config.xdg.dataHome}/emacs/librime";
parinfer-rust-lib-dir = "${config.xdg.dataHome}/emacs/parinfer-rust";
myEmacsPackagesFor = emacs: ((pkgs.emacsPackagesFor emacs).emacsWithPackages (epkgs: [
epkgs.vterm
]));
in {
options.modules.editors.emacs = {
enable = mkEnableOption "Emacs Editor";
};
config = mkIf cfg.enable (mkMerge [
{
home.packages = with pkgs; [
## Doom dependencies
git
(ripgrep.override {withPCRE2 = true;})
gnutls # for TLS connectivity
## Optional dependencies
fd # faster projectile indexing
imagemagick # for image-dired
fd # faster projectile indexing
zstd # for undo-fu-session/undo-tree compression
# go-mode
# gocode # project archived, use gopls instead
## Module dependencies
# :checkers spell
(aspellWithDicts (ds: with ds; [en en-computers en-science]))
# :tools editorconfig
editorconfig-core-c # per-project style config
# :tools lookup & :lang org +roam
sqlite
# :lang latex & :lang org (latex previews)
# texlive.combined.scheme-medium
];
programs.bash.bashrcExtra = envExtra;
programs.zsh.envExtra = envExtra;
home.shellAliases = shellAliases;
programs.nushell.shellAliases = shellAliases;
xdg.configFile."doom" = {
source = ./doom;
force = true;
};
home.activation.installDoomEmacs = lib.hm.dag.entryAfter ["writeBoundary"] ''
${pkgs.rsync}/bin/rsync -avz --chmod=D2755,F744 ${doomemacs}/ ${config.xdg.configHome}/emacs/
# librime for emacs-rime
mkdir -p ${librime-dir}
${pkgs.rsync}/bin/rsync -avz --chmod=D2755,F744 ${pkgs.librime}/ ${librime-dir}/
# libparinfer_rust for emacs' parinfer-rust-mode
mkdir -p ${parinfer-rust-lib-dir}
${pkgs.rsync}/bin/rsync -avz --chmod=D2755,F744 ${pkgs.vimPlugins.parinfer-rust}/lib/libparinfer_rust.* ${parinfer-rust-lib-dir}/parinfer-rust.so
'';
}
(mkIf pkgs.stdenv.isLinux (
let
# Do not use emacs-nox here, which makes the mouse wheel work abnormally in terminal mode.
# pgtk (pure gtk) build add native support for wayland.
# https://www.gnu.org/savannah-checkouts/gnu/emacs/emacs.html#Releases
emacsPkg = myEmacsPackagesFor pkgs.emacs29-pgtk;
in {
home.packages = [emacsPkg];
services.emacs = {
enable = true;
package = emacsPkg;
client = {
enable = true;
arguments = [" --create-frame"];
};
startWithUserSession = true;
};
}
))
(mkIf pkgs.stdenv.isDarwin (
let
# macport adds some native features based on GNU Emacs 29
# https://bitbucket.org/mituharu/emacs-mac/src/master/README-mac
emacsPkg = myEmacsPackagesFor pkgs.emacs29;
in {
home.packages = [emacsPkg];
launchd.enable = true;
launchd.agents.emacs = {
enable = true;
config = {
ProgramArguments = [
"${pkgs.bash}/bin/bash"
"-l"
"-c"
"${emacsPkg}/bin/emacs --fg-daemon"
];
StandardErrorPath = "${config.home.homeDirectory}/Library/Logs/emacs-daemon.stderr.log";
StandardOutPath = "${config.home.homeDirectory}/Library/Logs/emacs-daemon.stdout.log";
RunAtLoad = true;
KeepAlive = true;
};
};
}
))
]);
}
-175
View File
@@ -1,175 +0,0 @@
;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
;; Place your private configuration here! Remember, you do not need to run 'doom
;; sync' after modifying this file!
;; Some functionality uses this to identify you, e.g. GPG configuration, email
;; clients, file templates and snippets. It is optional.
;; (setq user-full-name "John Doe"
;; user-mail-address "john@doe.com")
;; Doom exposes five (optional) variables for controlling fonts in Doom:
;;
;; - `doom-font' -- the primary font to use
;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable)
;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for
;; presentations or streaming.
;; - `doom-symbol-font' -- for symbols
;; - `doom-serif-font' -- for the `fixed-pitch-serif' face
;;
;; See 'C-h v doom-font' for documentation and more examples of what they
;; accept. For example:
;;
(setq doom-font (font-spec :family "JetBrainsMono Nerd Font" :size 18)
doom-variable-pitch-font (font-spec :family "DejaVu Sans")
doom-symbol-font (font-spec :family "Symbols Nerd Font Mono")
doom-big-font (font-spec :family "JetBrainsMono Nerd Font" :size 28))
;; Users should inject their own font logic in `after-setting-font-hook'
;; Add font for CJK charset
(defun init-cjk-fonts()
(dolist (charset '(kana han cjk-misc bopomofo))
(set-fontset-font (frame-parameter nil 'font)
charset (font-spec :family "Source Han Sans SC"))))
(add-hook 'after-setting-font-hook 'init-cjk-fonts)
;; If you or Emacs can't find your font, use 'M-x describe-font' to look them
;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
;; refresh your font settings. If Emacs still can't find your font, it likely
;; wasn't installed correctly. Font issues are rarely Doom issues!
;; There are two ways to load a theme. Both assume the theme is installed and
;; available. You can either set `doom-theme' or manually load a theme with the
;; `load-theme' function. This is the default:
;; other doom's official themes:
;; https://github.com/doomemacs/themes
(setq doom-theme 'doom-dracula) ;; doom-one doom-dracula doom-nord
(if (eq system-type 'darwin)
;; Transparent Backgroud - for macOS
;;(set-frame-parameter (selected-frame) 'alpha '(<active> . <inactive>))
;;(set-frame-parameter (selected-frame) 'alpha <both>)
(progn
(set-frame-parameter (selected-frame) 'alpha '(85 . 70))
(add-to-list 'default-frame-alist '(alpha . (85 . 70))))
;; Transparent Background - for Linux Xorg/Wayland
(set-frame-parameter nil 'alpha-background 93) ; For current frame
(add-to-list 'default-frame-alist '(alpha-background . 93))); For all new frames henceforth
;; This determines the style of line numbers in effect. If set to `nil', line
;; numbers are disabled. For relative line numbers, set this to `relative'.
(setq display-line-numbers-type t)
(setq warning-minimum-level :error)
;; If you use `org' and don't want your org files in the default location below,
;; change `org-directory'. It must be set before org loads!
(setq org-directory "~/org/")
;; Whenever you reconfigure a package, make sure to wrap your config in an
;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
;;
;; (after! PACKAGE
;; (setq x y))
;;
;; The exceptions to this rule:
;;
;; - Setting file/directory variables (like `org-directory')
;; - Setting variables which explicitly tell you to set them before their
;; package is loaded (see 'C-h v VARIABLE' to look up their documentation).
;; - Setting doom variables (which start with 'doom-' or '+').
;;
;; Here are some additional functions/macros that will help you configure Doom.
;;
;; - `load!' for loading external *.el files relative to this one
;; - `use-package!' for configuring packages
;; - `after!' for running code after a package has loaded
;; - `add-load-path!' for adding directories to the `load-path', relative to
;; this file. Emacs searches the `load-path' when you load packages with
;; `require' or `use-package'.
;; - `map!' for binding new keys
;;
;; To get information about any of these functions/macros, move the cursor over
;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
;; This will open documentation for it, including demos of how they are used.
;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces,
;; etc).
;;
;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
;; they are implemented.
;; use alejandra to format nix files
(use-package! lsp-nix
:ensure lsp-mode
:after
(lsp-mode)
:demand t
:custom
(lsp-nix-nil-formatter
["alejandra"]))
(use-package! nushell-mode
:config
(setq nushell-enable-auto-indent 1))
(after! vterm
(setq vterm-shell "nu")) ; use nushell by defualt
;; emacs-rime
(use-package! rime
:custom
(default-input-method "rime")
(rime-librime-root "~/.local/share/emacs/librime"))
;; use parinfer for lisp editing
(use-package! parinfer-rust-mode
:hook ((emacs-lisp-mode
clojure-mode
scheme-mode
lisp-mode
racket-mode
fennel-mode
hy-mode) . parinfer-rust-mode)
:init
;; parinfer-rust library do not provide a apple silicon binary.
;; fix: https://github.com/doomemacs/doomemacs/issues/6163
(setq parinfer-rust-auto-download 0)
;; we need to download it manually and put it in this path
(setq parinfer-rust-library "~/.local/share/emacs/parinfer-rust/parinfer-rust.so")
:config
(map! :map parinfer-rust-mode-map
:localleader
"p" #'parinfer-rust-switch-mode
"P" #'parinfer-rust-toggle-disable))
;; disable smatparens-mode here to void conflict with parinfer
;; https://discourse.doomemacs.org/t/disable-smartparens-or-parenthesis-completion/134
(add-hook 'clojure-mode-hook #'turn-off-smartparens-mode)
(add-hook 'scheme-mode-hook #'turn-off-smartparens-mode)
(add-hook 'lisp-mode-hook #'turn-off-smartparens-mode)
(add-hook 'racket-mode-hook #'turn-off-smartparens-mode)
(add-hook 'fennel-mode-hook #'turn-off-smartparens-mode)
(add-hook 'hy-mode-hook #'turn-off-smartparens-mode)
;; auto-save
(use-package super-save
:ensure t
:config
(super-save-mode +1)
(setq super-save-auto-save-when-idle t)
(setq auto-save-default nil))
;; save on find-file
(add-to-list 'super-save-hook-triggers 'find-file-hook)
(use-package! copilot
:hook
(prog-mode . copilot-mode)
:bind
(:map copilot-completion-map
("<tab>" . 'copilot-accept-completion)
("TAB" . 'copilot-accept-completion)
("C-TAB" . 'copilot-accept-completion-by-word)
("C-<tab>" . 'copilot-accept-completion-by-word))
:config
(copilot-mode +1))
(use-package! wakatime-mode :ensure t)
-211
View File
@@ -1,211 +0,0 @@
;;; init.el -*- lexical-binding: t; -*-
;; This file controls what Doom modules are enabled and what order they load
;; in. Remember to run 'doom sync' after modifying it!
;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
;; documentation. There you'll find a link to Doom's Module Index where all
;; of our modules are listed, including what flags they support.
;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
;; 'C-c c k' for non-vim users) to view its documentation. This works on
;; flags as well (those symbols that start with a plus).
;;
;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
;; directory (for easy access to its source code).
(doom! :input
;;bidi ; (tfel ot) thgir etirw uoy gnipleh
chinese
;;japanese
;;layout ; auie,ctsrnm is the superior home row
:completion
;; (company +childframe) ; conflict with lsp-bridge
; the ultimate code completion backend
;;helm ; the *other* search engine for love and life
;;ido ; the other *other* search engine...
;;ivy ; a search engine for love and life
vertico ; the search engine of the future
:ui
;;deft ; notational velocity for Emacs
doom ; what makes DOOM look the way it does
doom-dashboard ; a nifty splash screen for Emacs
;;doom-quit ; DOOM quit-message prompts when you quit Emacs
;; (emoji +unicode) ; Emacs 29 provides native support for inserting Unicode emojis.
; 🙂
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
indent-guides ; highlighted indent columns
ligatures ; ligatures and symbols to make your code pretty again
modeline ; snazzy, Atom-inspired modeline, plus API
ophints ; highlight the region an operation acts on
(popup +defaults)
; tame sudden yet inevitable temporary windows
tabs ; a tab bar for Emacs
treemacs ; a project drawer, like neotree but cooler
unicode ; extended unicode support for various languages
(vc-gutter +pretty)
; vcs diff in the fringe
vi-tilde-fringe ; fringe tildes to mark beyond EOB
;;window-select ; visually switch windows
workspaces ; tab emulation, persistence & separate workspaces
;;zen ; distraction-free coding or writing
:editor
(evil +everywhere)
; come to the dark side, we have cookies
file-templates ; auto-snippets for empty files
fold ; (nigh) universal code folding
(format +onsave)
; automated prettiness
;; multiple-cursors ; editing in many places at once
;; objed ; text object editing for the innocent, conflict with parinfer
parinfer ; turn lisp into python, sort of, conflict with copilot/objed/smartparens
;;rotate-text ; cycle region at point between text candidates
snippets ; my elves. They type so I don't have to
word-wrap ; soft wrapping with language-aware indent
:emacs
dired ; making dired pretty [functional]
electric ; smarter, keyword-based electric-indent
ibuffer ; interactive buffer management
undo ; persistent, smarter undo for your inevitable mistakes
vc ; version-control and Emacs, sitting in a tree
:term
;;eshell ; the elisp shell that works everywhere
;;shell ; simple shell REPL for Emacs
;;term ; basic terminal emulator for Emacs
vterm ; the best terminal emulation in Emacs
:checkers
syntax ; tasing you for every semicolon you forget
(spell +flyspell)
; tasing you for misspelling mispelling
grammar ; tasing grammar mistake every you make
:tools
;;ansible
;;biblio ; Writes a PhD for you (citation needed)
;;collab ; buffers with friends
;;debugger ; FIXME stepping through code, to help you add bugs
;;direnv
(docker)
editorconfig ; let someone else argue about tabs vs spaces
;;ein ; tame Jupyter notebooks with emacs
(eval +overlay)
; run code, run (also, repls)
lookup ; navigate your code and its documentation
lsp ; lsp-mode, conflict with lsp-bridge
magit ; a git porcelain for Emacs
;;make ; run make tasks from Emacs
;;pass ; password manager for nerds
pdf ; pdf enhancements
;;prodigy ; FIXME managing external services & code builders
(terraform)
; infrastructure as code
tree-sitter ; syntax and parsing, sitting in a tree...
;;upload ; map local to remote projects via ssh/ftp
:os
(:if IS-MAC macos)
; improve compatibility with macOS
tty ; improve the terminal Emacs experience
:lang
;;agda ; types of types of types of types...
;;beancount ; mind the GAAP
(cc +lsp +tree-sitter)
; C > C++ == 1
;;clojure ; java with a lisp
;;common-lisp ; if you've seen one lisp, you've seen them all
;;coq ; proofs-as-programs
;;crystal ; ruby at the speed of c
;;csharp ; unity, .NET, and mono shenanigans
data ; config/data formats
;;(dart +flutter) ; paint ui and not much else
;;dhall
;;elixir ; erlang done right
;;elm ; care for a cup of TEA?
emacs-lisp ; drown in parentheses
;;erlang ; an elegant language for a more civilized age
;;ess ; emacs speaks statistics
;;factor
;;faust ; dsp, but you get to keep your soul
;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
;;fsharp ; ML stands for Microsoft's Language
;;fstar ; (dependent) types and (monadic) effects and Z3
;;gdscript ; the language you waited for
(go +lsp +tree-sitter) ;; disable go-mode, use lsp-bridge instead
; the hipster dialect
;;(graphql) ; Give queries a REST
;;(haskell) ; a language that's lazier than I am
;;hy ; readability of scheme w/ speed of python
;;idris ; a language you can depend on
(json +lsp +tree-sitter)
; At least it ain't XML
(java +lsp +tree-sitter)
; the poster child for carpal tunnel syndrome
(javascript +lsp +tree-sitter)
; all(hope(abandon(ye(who(enter(here))))))
;;julia ; a better, faster MATLAB
;;kotlin ; a better, slicker Java(Script)
(latex)
; writing papers in Emacs has never been so fun
;;lean ; for folks with too much to prove
;;ledger ; be audit you can be
(lua +lsp +tree-sitter)
; one-based indices? one-based indices
(markdown +grip)
; writing docs for people to ignore
;;nim ; python + lisp at the speed of c
(nix +lsp +tree-sitter)
; I hereby declare "nix geht mehr!"
;;ocaml ; an objective camel
(org +pandoc +hugo +jupyter) ; organize your plain life in plain text
;;php ; perl's insecure younger brother
;;plantuml ; diagrams for confusing people more
;;purescript ; javascript, but functional
(python +lsp +tree-sitter +pyright)
; beautiful is better than ugly
;;qt ; the 'cutest' gui framework ever
racket ; a DSL for DSLs
;;raku ; the artist formerly known as perl6
;;rest ; Emacs as a REST client
;;rst ; ReST in peace
;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
(rust +lsp +tree-sitter)
; Fe2O3.unwrap().unwrap().unwrap().unwrap()
;;scala ; java, but good
(scheme +guile)
; a fully conniving family of lisps
(sh +lsp +tree-sitter)
; she sells {ba,z,fi}sh shells on the C xor
;;sml
;;solidity ; do you need a blockchain? No.
;;swift ; who asked for emoji variables?
;;terra ; Earth and Moon in alignment for performance.
(web +lsp +tree-sitter)
; support for various web languages, including HTML5, CSS, SASS/SCSS, Pug/Jade/Slim, and more
(yaml +lsp +tree-sitter)
; JSON, but readable
;;zig ; C, but simpler
:email
;;(mu4e +org +gmail)
;;notmuch
;;(wanderlust +gmail)
:app
;;calendar
;;emms
;;everywhere ; *leave* Emacs!? You must be joking
;;irc ; how neckbeards socialize
;;(rss +org) ; emacs as an RSS reader
;;twitter ; twitter client https://twitter.com/vnought
:config
;;literate
(default +bindings +smartparens))
@@ -1,64 +0,0 @@
;; -*- no-byte-compile: t; -*-
;;; $DOOMDIR/packages.el
;; To install a package with Doom you must declare them here and run 'doom sync'
;; on the command line, then restart Emacs for the changes to take effect -- or
;; use 'M-x doom/reload'.
(package! super-save)
(package! rime)
(package! wakatime-mode
:recipe
(:host github :repo "wakatime/wakatime-mode" :files
("*.el" "dist")))
(package! nushell-mode :recipe
(:host github :repo "mrkkrp/nushell-mode"))
(package! copilot
:recipe
(:host github :repo "copilot-emacs/copilot.el" :files
("*.el" "dist")))
;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
;; (package! some-package)
;; To install a package directly from a remote git repo, you must specify a
;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
;; https://github.com/radian-software/straight.el#the-recipe-format
;; (package! another-package
;; :recipe (:host github :repo "username/repo"))
;; If the package you are trying to install does not contain a PACKAGENAME.el
;; file, or is located in a subdirectory of the repo, you'll need to specify
;; `:files' in the `:recipe':
;; (package! this-package
;; :recipe (:host github :repo "username/repo"
;; :files ("some-file.el" "src/lisp/*.el")))
;; If you'd like to disable a package included with Doom, you can do so here
;; with the `:disable' property:
;; (package! builtin-package :disable t)
;; You can override the recipe of a built in package without having to specify
;; all the properties for `:recipe'. These will inherit the rest of its recipe
;; from Doom or MELPA/ELPA/Emacsmirror:
;; (package! builtin-package :recipe (:nonrecursive t))
;; (package! builtin-package-2 :recipe (:repo "myfork/package"))
;; Specify a `:branch' to install a package from a particular branch or tag.
;; This is required for some packages whose default branch isn't 'master' (which
;; our package manager can't deal with; see radian-software/straight.el#279)
;; (package! builtin-package :recipe (:branch "develop"))
;; Use `:pin' to specify a particular commit to install.
;; (package! builtin-package :pin "1a2b3c4d5e")
;; Doom's packages are pinned to a specific commit and updated from release to
;; release. The `unpin!' macro allows you to unpin single packages...
;; (unpin! pinned-package)
;; ...or multiple packages
;; (unpin! pinned-package another-pinned-package)
;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
;; (unpin! t)
+5 -10
View File
@@ -1,16 +1,8 @@
{ {pkgs, ...}: {
pkgs,
nur-ryan4yin,
...
}: {
# https://github.com/catppuccin/helix
xdg.configFile."helix/themes".source = "${nur-ryan4yin.packages.${pkgs.system}.catppuccin-helix}/themes/default";
programs.helix = { programs.helix = {
enable = true; enable = true;
package = pkgs.helix; package = pkgs.helix;
settings = { settings = {
theme = "catppuccin_mocha";
editor = { editor = {
line-number = "relative"; line-number = "relative";
cursorline = true; cursorline = true;
@@ -29,7 +21,10 @@
w = ":w"; w = ":w";
q = ":q"; q = ":q";
}; };
esc = ["collapse_selection" "keep_primary_selection"]; esc = [
"collapse_selection"
"keep_primary_selection"
];
}; };
}; };
}; };
+51 -44
View File
@@ -15,59 +15,66 @@ let
v = "nvim"; v = "nvim";
vdiff = "nvim -d"; vdiff = "nvim -d";
}; };
# the path to nvim directory
# to make this symlink work, we need to git clone this repo to your home directory.
configPath = "${config.home.homeDirectory}/nix-config/home/base/tui/editors/neovim/nvim";
in { in {
home.activation.installAstroNvim = lib.hm.dag.entryAfter ["writeBoundary"] '' xdg.configFile."nvim".source = config.lib.file.mkOutOfStoreSymlink configPath;
${pkgs.rsync}/bin/rsync -avz --chmod=D2755,F744 ${./nvim}/ ${config.xdg.configHome}/nvim/ # Disable catppuccin to avoid conflict with my non-nix config.
''; catppuccin.nvim.enable = false;
home.shellAliases = shellAliases; home.shellAliases = shellAliases;
programs.nushell.shellAliases = shellAliases; programs.nushell.shellAliases = shellAliases;
programs = { programs.neovim = {
neovim = { enable = true;
enable = true; package = pkgs-unstable.neovim-unwrapped;
package = pkgs-unstable.neovim-unwrapped;
defaultEditor = true; # defaultEditor = true; # set EDITOR at system-wide level
viAlias = true; viAlias = true;
vimAlias = true; vimAlias = true;
# These environment variables are needed to build and run binaries # These environment variables are needed to build and run binaries
# with external package managers like mason.nvim. # with external package managers like mason.nvim.
# #
# LD_LIBRARY_PATH is also needed to run the non-FHS binaries downloaded by mason.nvim. # LD_LIBRARY_PATH is also needed to run the non-FHS binaries downloaded by mason.nvim.
# it will be set by nix-ld, so we do not need to set it here again. # it will be set by nix-ld, so we do not need to set it here again.
extraWrapperArgs = with pkgs; [ extraWrapperArgs = with pkgs; [
# LIBRARY_PATH is used by gcc before compilation to search directories # LIBRARY_PATH is used by gcc before compilation to search directories
# containing static and shared libraries that need to be linked to your program. # containing static and shared libraries that need to be linked to your program.
"--suffix" "--suffix"
"LIBRARY_PATH" "LIBRARY_PATH"
":" ":"
"${lib.makeLibraryPath [stdenv.cc.cc zlib]}" "${lib.makeLibraryPath [
stdenv.cc.cc
zlib
]}"
# PKG_CONFIG_PATH is used by pkg-config before compilation to search directories # PKG_CONFIG_PATH is used by pkg-config before compilation to search directories
# containing .pc files that describe the libraries that need to be linked to your program. # containing .pc files that describe the libraries that need to be linked to your program.
"--suffix" "--suffix"
"PKG_CONFIG_PATH" "PKG_CONFIG_PATH"
":" ":"
"${lib.makeSearchPathOutput "dev" "lib/pkgconfig" [stdenv.cc.cc zlib]}" "${lib.makeSearchPathOutput "dev" "lib/pkgconfig" [
]; stdenv.cc.cc
zlib
]}"
];
# Currently we use lazy.nvim as neovim's package manager, so comment this one. # Currently we use lazy.nvim as neovim's package manager, so comment this one.
# #
# NOTE: These plugins will not be used by astronvim by default! # NOTE: These plugins will not be used by astronvim by default!
# We should install packages that will compile locally or download FHS binaries via Nix! # We should install packages that will compile locally or download FHS binaries via Nix!
# and use lazy.nvim's `dir` option to specify the package directory in nix store. # and use lazy.nvim's `dir` option to specify the package directory in nix store.
# so that these plugins can work on NixOS. # so that these plugins can work on NixOS.
# #
# related project: # related project:
# https://github.com/b-src/lazy-nix-helper.nvim # https://github.com/b-src/lazy-nix-helper.nvim
plugins = with pkgs.vimPlugins; [ plugins = with pkgs.vimPlugins; [
# search all the plugins using https://search.nixos.org/packages # search all the plugins using https://search.nixos.org/packages
telescope-fzf-native-nvim telescope-fzf-native-nvim
nvim-treesitter.withAllGrammars nvim-treesitter.withAllGrammars
]; ];
};
}; };
} }
@@ -0,0 +1,141 @@
{
"AstroNvim": { "branch": "main", "commit": "c5e610f614e74c9dd9bf11760c4d0ad2c98c0abe" },
"Comment.nvim": { "branch": "master", "commit": "e30b7f2008e52442154b66f7c519bfd2f1e32acb" },
"LuaSnip": { "branch": "master", "commit": "458560534a73f7f8d7a11a146c801db00b081df0" },
"aerial.nvim": { "branch": "master", "commit": "3284a2cb858ba009c79da87d5e010ccee3c99c4d" },
"alpha-nvim": { "branch": "main", "commit": "de72250e054e5e691b9736ee30db72c65d560771" },
"astrocommunity": { "branch": "main", "commit": "2db3ee2ce37f9e2bc9e6ea2c3e2e6292ca4d33bf" },
"astrocore": { "branch": "main", "commit": "44a3dc0bf1591022b2a6bc89dccdfac1be17bec9" },
"astrolsp": { "branch": "main", "commit": "909fbe64f3f87d089ff3777751261544557117cc" },
"astrotheme": { "branch": "main", "commit": "f12dcf64b1f9a05839c3ac2146f550f43bae9dab" },
"astroui": { "branch": "main", "commit": "e923a84c488d879a260fc9cfb2dc27dd870fb6ac" },
"autosave.nvim": { "branch": "main", "commit": "348f72cf0241e3e736e3396c4834def2f8ef8d10" },
"avante.nvim": { "branch": "main", "commit": "508cc4c22c78d565d270df8dec5449db07800296" },
"catppuccin": { "branch": "main", "commit": "fa42eb5e26819ef58884257d5ae95dd0552b9a66" },
"clangd_extensions.nvim": {
"branch": "main",
"commit": "db28f29be928d18cbfb86fbfb9f83f584f658feb"
},
"cmake-tools.nvim": { "branch": "master", "commit": "17244215b1a96e4b2a83a16abd6719197f270f96" },
"cmp-buffer": { "branch": "main", "commit": "3022dbc9166796b644a841a02de8dd1cc1d311fa" },
"cmp-conjure": { "branch": "master", "commit": "8c9a88efedc0e5bf3165baa6af8a407afe29daf6" },
"cmp-dap": { "branch": "master", "commit": "ea92773e84c0ad3288c3bc5e452ac91559669087" },
"cmp-nvim-lsp": { "branch": "main", "commit": "99290b3ec1322070bcfb9e846450a46f6efa50f0" },
"cmp-path": { "branch": "main", "commit": "91ff86cd9c29299a64f968ebb45846c485725f23" },
"cmp_luasnip": { "branch": "master", "commit": "98d9cb5c2c38532bd9bdb481067b20fea8f32e90" },
"conjure": { "branch": "main", "commit": "5f15eb0322b5530eefb16457c061e7c2ccd7cf13" },
"crates.nvim": { "branch": "main", "commit": "5d8b1bef686db0fabe5f1bb593744b617e8f1405" },
"deno-nvim": { "branch": "master", "commit": "5a2f9205df5539c4a0696e73893bf8d1b0cae406" },
"dressing.nvim": { "branch": "master", "commit": "3a45525bb182730fe462325c99395529308f431e" },
"flash.nvim": { "branch": "main", "commit": "3c942666f115e2811e959eabbdd361a025db8b63" },
"flit.nvim": { "branch": "main", "commit": "1ef72de6a02458d31b10039372c8a15ab8989e0d" },
"friendly-snippets": { "branch": "main", "commit": "efff286dd74c22f731cdec26a70b46e5b203c619" },
"fzf-lua": { "branch": "main", "commit": "a4404dee0a65d3c2e2b292206d10b16567d088c9" },
"gitsigns.nvim": { "branch": "main", "commit": "7010000889bfb6c26065e0b0f7f1e6aa9163edd9" },
"gopher.nvim": { "branch": "main", "commit": "de585144ebde9f0516fb9b542dd42e90c7835b59" },
"goto-preview": { "branch": "main", "commit": "d1faf6ea992b5bcaaaf2c682e1aba3131a01143e" },
"guess-indent.nvim": { "branch": "main", "commit": "6cd61f7a600bb756e558627cd2e740302c58e32d" },
"heirline.nvim": { "branch": "master", "commit": "fae936abb5e0345b85c3a03ecf38525b0828b992" },
"indent-blankline.nvim": {
"branch": "master",
"commit": "005b56001b2cb30bfa61b7986bc50657816ba4ba"
},
"lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" },
"lazydev.nvim": { "branch": "main", "commit": "f59bd14a852ca43db38e3662395354cb2a9b13e0" },
"leap.nvim": { "branch": "main", "commit": "10c14af4ddfb34dbd7721f0bfb2b4d91f0558907" },
"lsp_signature.nvim": {
"branch": "master",
"commit": "2923666d092300e6d03c8d895991d0bef43f1613"
},
"lspkind.nvim": { "branch": "master", "commit": "d79a1c3299ad0ef94e255d045bed9fa26025dab6" },
"luarocks.nvim": { "branch": "main", "commit": "1db9093915eb16ba2473cfb8d343ace5ee04130a" },
"markdown-preview.nvim": {
"branch": "main",
"commit": "462ce41af003f5cdadab856f3a42dc27e39b89c8"
},
"mason-lspconfig.nvim": {
"branch": "main",
"commit": "1a31f824b9cd5bc6f342fc29e9a53b60d74af245"
},
"mason-null-ls.nvim": { "branch": "main", "commit": "2b8433f76598397fcc97318d410e0c4f7a4bea6a" },
"mason-nvim-dap.nvim": { "branch": "main", "commit": "4c2cdc69d69fe00c15ae8648f7e954d99e5de3ea" },
"mason.nvim": { "branch": "main", "commit": "fc98833b6da5de5a9c5b1446ac541577059555be" },
"mini.ai": { "branch": "main", "commit": "d172ada7b0281044a06cb9a625a862553c457b6f" },
"mini.bufremove": { "branch": "main", "commit": "285bdac9596ee7375db50c0f76ed04336dcd2685" },
"mini.surround": { "branch": "main", "commit": "1a2b59c77a0c4713a5bd8972da322f842f4821b1" },
"neo-tree.nvim": { "branch": "main", "commit": "f481de16a0eb59c985abac8985e3f2e2f75b4875" },
"neoconf.nvim": { "branch": "main", "commit": "f630568a4d04154803886f21ca60923f12709f0f" },
"nfnl": { "branch": "main", "commit": "143b595069d98d47b26b80f0e0375420673de4af" },
"none-ls.nvim": { "branch": "main", "commit": "a117163db44c256d53c3be8717f3e1a2a28e6299" },
"nui.nvim": { "branch": "main", "commit": "a0fd35fcbb4cb479366f1dc5f20145fd718a3733" },
"nvim-autopairs": { "branch": "master", "commit": "68f0e5c3dab23261a945272032ee6700af86227a" },
"nvim-cmp": { "branch": "main", "commit": "1e1900b0769324a9675ef85b38f99cca29e203b3" },
"nvim-colorizer.lua": {
"branch": "master",
"commit": "517df88cf2afb36652830df2c655df2da416a0ae"
},
"nvim-dap": { "branch": "master", "commit": "6a5bba0ddea5d419a783e170c20988046376090d" },
"nvim-dap-go": { "branch": "main", "commit": "8763ced35b19c8dc526e04a70ab07c34e11ad064" },
"nvim-dap-python": { "branch": "master", "commit": "261ce649d05bc455a29f9636dc03f8cdaa7e0e2c" },
"nvim-dap-ui": { "branch": "master", "commit": "bc81f8d3440aede116f821114547a476b082b319" },
"nvim-jdtls": { "branch": "master", "commit": "4d77ff02063cf88963d5cf10683ab1fd15d072de" },
"nvim-lsp-file-operations": {
"branch": "master",
"commit": "9744b738183a5adca0f916527922078a965515ed"
},
"nvim-lspconfig": { "branch": "master", "commit": "185b2af444b27d6541c02d662b5b68190e5cf0c4" },
"nvim-nio": { "branch": "master", "commit": "21f5324bfac14e22ba26553caf69ec76ae8a7662" },
"nvim-notify": { "branch": "master", "commit": "a3020c2cf4dfc4c4f390c4a21e84e35e46cf5d17" },
"nvim-scrollbar": { "branch": "main", "commit": "5b103ef0fd2e8b9b4be3878ed38d224522192c6c" },
"nvim-spectre": { "branch": "master", "commit": "72f56f7585903cd7bf92c665351aa585e150af0f" },
"nvim-spider": { "branch": "main", "commit": "d4bdc45eac425e77108f068bd0706ff3ac20be7f" },
"nvim-treesitter": { "branch": "master", "commit": "f8aaf5ce4e27cd20de917946b2ae5c968a2c2858" },
"nvim-treesitter-textobjects": {
"branch": "master",
"commit": "9937e5e356e5b227ec56d83d0a9d0a0f6bc9cad4"
},
"nvim-ts-autotag": { "branch": "main", "commit": "a1d526af391f6aebb25a8795cbc05351ed3620b5" },
"nvim-ts-context-commentstring": {
"branch": "main",
"commit": "1b212c2eee76d787bbea6aa5e92a2b534e7b4f8f"
},
"nvim-ufo": { "branch": "main", "commit": "61463090a4f55f5d080236ea62f09d1cd8976ff3" },
"nvim-vtsls": { "branch": "main", "commit": "60b493e641d3674c030c660cabe7a2a3f7a914be" },
"nvim-web-devicons": { "branch": "master", "commit": "4c3a5848ee0b09ecdea73adcd2a689190aeb728c" },
"nvim-window-picker": { "branch": "main", "commit": "6382540b2ae5de6c793d4aa2e3fe6dbb518505ec" },
"orgmode": { "branch": "master", "commit": "b6d14eb0a1553a0ef4114346d67605de82d0f7fb" },
"package-info.nvim": { "branch": "master", "commit": "4f1b8287dde221153ec9f2acd46e8237d2d0881e" },
"parinfer-rust": { "branch": "master", "commit": "afe6b1176cd805c000713e23b654fbf4b9f4b156" },
"plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" },
"presence.nvim": { "branch": "main", "commit": "87c857a56b7703f976d3a5ef15967d80508df6e6" },
"promise-async": { "branch": "main", "commit": "38a4575da9497326badd3995e768b4ccf0bb153e" },
"refactoring.nvim": { "branch": "master", "commit": "74b608dfee827c2372250519d433cc21cb083407" },
"render-markdown.nvim": {
"branch": "main",
"commit": "c809fc129f842a7055c672593d24be6346bcc673"
},
"resession.nvim": { "branch": "master", "commit": "cc819b0489938d03e4f3532a583354f0287c015b" },
"rustaceanvim": { "branch": "master", "commit": "322224d00a731d75eed6b700d38e460fd30f6e3c" },
"schemastore.nvim": { "branch": "main", "commit": "e4f80f37cd11ed58a6e914cc30850749f021b6a7" },
"sentiment.nvim": { "branch": "main", "commit": "54a6db15b630eccfa98c32a76baf90f21c6f1e40" },
"smart-splits.nvim": { "branch": "master", "commit": "ddb23c1a1cf1507bda487cda7f6e4690965ef9f5" },
"telescope-fzf-native.nvim": {
"branch": "main",
"commit": "1f08ed60cafc8f6168b72b80be2b2ea149813e55"
},
"telescope-undo.nvim": { "branch": "main", "commit": "928d0c2dc9606e01e2cc547196f48d2eaecf58e5" },
"telescope.nvim": { "branch": "0.1.x", "commit": "a17d611a0e111836a1db5295f04945df407c5135" },
"todo-comments.nvim": { "branch": "main", "commit": "ae0a2afb47cf7395dc400e5dc4e05274bf4fb9e0" },
"tree-sitter-nu": { "branch": "main", "commit": "d62bb4a0c78e9476a6dd0081761444f6870252ed" },
"treesj": { "branch": "main", "commit": "3b4a2bc42738a63de17e7485d4cc5e49970ddbcc" },
"tsc.nvim": { "branch": "main", "commit": "8c1b4ec6a48d038a79ced8674cb15e7db6dd8ef0" },
"venv-selector.nvim": {
"branch": "regexp",
"commit": "c677caa1030808a9f90092e522de7cc20c1390dd"
},
"vim-illuminate": { "branch": "master", "commit": "19cb21f513fc2b02f0c66be70107741e837516a1" },
"vim-repeat": { "branch": "master", "commit": "65846025c15494983dafe5e3b46c8f88ab2e9635" },
"vim-wakatime": { "branch": "master", "commit": "f39c4a201ae350aaba713b59d4a4fdd88e0811aa" },
"which-key.nvim": { "branch": "main", "commit": "fcbf4eea17cb299c02557d576f0d568878e354a4" },
"yanky.nvim": { "branch": "main", "commit": "04775cc6e10ef038c397c407bc17f00a2f52b378" }
}
@@ -13,8 +13,6 @@ return {
-- Highly experimental plugin that completely replaces -- Highly experimental plugin that completely replaces
-- the UI for messages, cmdline and the popupmenu. -- the UI for messages, cmdline and the popupmenu.
-- { import = "astrocommunity.utility.noice-nvim" }, -- { import = "astrocommunity.utility.noice-nvim" },
-- Fully featured & enhanced replacement for copilot.vim
-- <Tab> work with both auto completion in cmp and copilot
{ import = "astrocommunity.media.vim-wakatime" }, { import = "astrocommunity.media.vim-wakatime" },
{ import = "astrocommunity.motion.leap-nvim" }, { import = "astrocommunity.motion.leap-nvim" },
{ import = "astrocommunity.motion.flit-nvim" }, { import = "astrocommunity.motion.flit-nvim" },
@@ -54,6 +52,4 @@ return {
-- Lua implementation of CamelCaseMotion, with extra consideration of punctuation. -- Lua implementation of CamelCaseMotion, with extra consideration of punctuation.
{ import = "astrocommunity.motion.nvim-spider" }, { import = "astrocommunity.motion.nvim-spider" },
-- AI Assistant
{ import = "astrocommunity.completion.copilot-lua-cmp" },
} }
@@ -1,7 +1,7 @@
require("lazy").setup({ require("lazy").setup({
{ {
"AstroNvim/AstroNvim", "AstroNvim/AstroNvim",
version = "^4", -- Remove version tracking to elect for nighly AstroNvim version = "^4", -- Remove version tracking to elect for nightly AstroNvim
import = "astronvim.plugins", import = "astronvim.plugins",
opts = { -- AstroNvim options must be set here with the `import` key opts = { -- AstroNvim options must be set here with the `import` key
mapleader = " ", -- This ensures the leader key must be configured before Lazy is set up mapleader = " ", -- This ensures the leader key must be configured before Lazy is set up
@@ -53,7 +53,7 @@ return {
"marksman", -- markdown ls "marksman", -- markdown ls
"nickel_ls", -- nickel language server "nickel_ls", -- nickel language server
"nil_ls", -- nix language server "nil_ls", -- nix language server
"bufls", -- protocol buffer language server "buf_ls", -- protocol buffer language server
"dockerls", -- dockerfile "dockerls", -- dockerfile
"cmake", -- cmake language server "cmake", -- cmake language server
"sqls", -- sql language server "sqls", -- sql language server
@@ -64,7 +64,7 @@ return {
"jdtls", -- java language server, provides only basic features "jdtls", -- java language server, provides only basic features
"rust_analyzer", -- rust "rust_analyzer", -- rust
"pyright", -- python "pyright", -- python
"ruff_lsp", -- extremely fast Python linter and code transformation "ruff", -- extremely fast Python linter and code transformation
-- "julials", -- julia language server -- "julials", -- julia language server
-- "zls", -- zig language server -- "zls", -- zig language server
"lua_ls", -- lua "lua_ls", -- lua
@@ -0,0 +1,157 @@
local prefix = "<Leader>A"
return {
"yetone/avante.nvim",
event = "User AstroFile", -- load on file open because Avante manages it's own bindings
cmd = {
"AvanteAsk",
"AvanteBuild",
"AvanteEdit",
"AvanteRefresh",
"AvanteSwitchProvider",
"AvanteShowRepoMap",
"AvanteModels",
"AvanteChat",
"AvanteChatNew",
"AvanteToggle",
"AvanteClear",
"AvanteFocus",
"AvanteStop",
},
version = false, -- Never set this value to "*"! Never!
opts = {
provider = "openrouter_claude_4",
cursor_applying_provider = "openrouter_claude_4",
behaviour = {
-- auto_suggestions = true,
enable_cursor_planning_mode = true, -- enable cursor planning mode!
},
-- WARNING: Since auto-suggestions are a high-frequency operation and therefore expensive,
-- currently designating it as `copilot` provider is dangerous because: https://github.com/yetone/avante.nvim/issues/1048
-- Of course, you can reduce the request frequency by increasing `suggestion.debounce`.
auto_suggestions_provider = "ollama",
suggestion = {
debounce = 750, -- wait for x ms before suggestion
throttle = 1200, -- wait for at least x ms before the next suggestion
},
web_search_engine = {
provider = "google", -- tavily, serpapi, searchapi, google, kagi, brave, or searxng
proxy = nil, -- proxy support, e.g., http://127.0.0.1:7890
},
providers = {
ollama = {
endpoint = "http://192.168.5.100:11434", -- Note that there is no /v1 at the end.
model = "modelscope.cn/unsloth/Qwen3-30B-A3B-GGUF",
-- model = "modelscope.cn/unsloth/Qwen3-32B-GGUF",
},
-- ==============================================
-- https://aistudio.google.com/prompts/new_chat
-- ==============================================
gemini = {
api_key_name = "GEMINI_API_KEY",
model = "gemini-2.5-pro-preview-06-05",
timeout = 30000, -- Timeout in milliseconds, increase this for reasoning models
temperature = 0,
max_completion_tokens = 8192, -- Increase this to include reasoning tokens (for reasoning models)
--reasoning_effort = "medium", -- low|medium|high, only used for reasoning models
},
-- ==============================================
-- https://openrouter.ai/rankings
-- ==============================================
openrouter_claude_4 = {
__inherited_from = "openai",
endpoint = "https://openrouter.ai/api/v1",
api_key_name = "OPENROUTER_API_KEY",
model = "anthropic/claude-sonnet-4",
},
-- ==============================================
-- https://bailian.console.aliyun.com/?tab=model
-- ==============================================
aliyun_qwen3 = {
__inherited_from = "openai",
api_key_name = "DASHSCOPE_API_KEY",
endpoint = "https://dashscope.aliyuncs.com/compatible-mode/v1",
-- model = "qwen-coder-plus-latest",
model = "qwen3-235b-a22b",
-- disable_tools = true,
},
aliyun_dpr1 = {
__inherited_from = "openai",
api_key_name = "DASHSCOPE_API_KEY",
endpoint = "https://dashscope.aliyuncs.com/compatible-mode/v1",
model = "deepseek-r1-0528",
disable_tools = true,
},
-- ==============================================
-- https://console.volcengine.com/ark/region:ark+cn-beijing/model?feature=&vendor=DeepSeek&view=VENDOR_VIEW
-- ==============================================
ark_dpr1 = {
__inherited_from = "openai",
api_key_name = "ARK_API_KEY",
endpoint = "https://ark.cn-beijing.volces.com/api/v3",
model = "deepseek-r1-250528",
-- disable_tools = true,
},
-- ==============================================
-- https://cloud.siliconflow.cn/models
-- ==============================================
sflow_dpr1 = {
__inherited_from = "openai",
api_key_name = "SILICONFLOW_API_KEY",
endpoint = "https://api.siliconflow.cn/v1",
model = "Pro/deepseek-ai/DeepSeek-R1",
-- disable_tools = true,
},
-- ==============================================
-- https://platform.deepseek.com/usage
-- ==============================================
dp_coder = {
__inherited_from = "openai",
api_key_name = "DEEPSEEK_API_KEY",
endpoint = "https://api.deepseek.com",
model = "deepseek-coder",
},
-- deepseek chat v3
dp_chat = {
__inherited_from = "openai",
api_key_name = "DEEPSEEK_API_KEY",
endpoint = "https://api.deepseek.com",
model = "deepseek-chat",
-- disable_tools = true,
},
-- deepseek r1
dp_r1 = {
__inherited_from = "openai",
api_key_name = "DEEPSEEK_API_KEY",
endpoint = "https://api.deepseek.com",
model = "deepseek-reasoner",
-- disable_tools = true,
},
},
},
-- if you want to build from source then do `make BUILD_FROM_SOURCE=true`
build = "make",
-- build = "powershell -ExecutionPolicy Bypass -File Build.ps1 -BuildFromSource false" -- for windows
dependencies = {
"nvim-treesitter/nvim-treesitter",
{ "stevearc/dressing.nvim", optional = true },
"nvim-lua/plenary.nvim",
"MunifTanjim/nui.nvim",
{ "AstroNvim/astrocore", opts = function(_, opts) opts.mappings.n[prefix] = { desc = " Avante" } end },
--- The below dependencies are optional,
-- "echasnovski/mini.pick", -- for file_selector provider mini.pick
"nvim-telescope/telescope.nvim", -- for file_selector provider telescope
"hrsh7th/nvim-cmp", -- autocompletion for avante commands and mentions
"ibhagwan/fzf-lua", -- for file_selector provider fzf
"nvim-tree/nvim-web-devicons", -- or echasnovski/mini.icons
-- "zbirenbaum/copilot.lua", -- for providers='copilot'
{
-- Make sure to set this up properly if you have lazy=true
"MeanderingProgrammer/render-markdown.nvim",
opts = {
file_types = { "markdown", "Avante" },
},
ft = { "markdown", "Avante" },
},
},
}
@@ -1,14 +0,0 @@
-- Custom copilot-lua to enable filetypes: markdown
return {
-- "zbirenbaum/copilot.lua",
-- Fix https://github.com/zbirenbaum/copilot.lua/pull/336
"ryan4yin/copilot.lua",
branch = "fix_issue_330",
opts = function(_, opts)
opts.filetypes = {
yaml = true,
markdown = true,
}
end,
}
@@ -1,13 +1,15 @@
-- File explorer(Custom configs) -- File explorer(Custom configs)
return { return {
"nvim-neo-tree/neo-tree.nvim", "nvim-neo-tree/neo-tree.nvim",
opts = { opts = function(_, opts)
filesystem = { opts.filesystem.filtered_items = {
filtered_items = { visible = true, -- visible by default
visible = true, -- visible by default hide_dotfiles = false,
hide_dotfiles = false, hide_gitignored = false,
hide_gitignored = false, }
}, opts.filesystem.follow_current_file = {
}, enabled = true, -- This will find and focus the file in the active buffer every time
}, leave_dirs_open = false, -- `false` closes auto expanded dirs, such as with `:Neotree reveal`
}
end,
} }
@@ -41,15 +41,15 @@ return {
{ "max397574/better-escape.nvim", enabled = false }, { "max397574/better-escape.nvim", enabled = false },
-- You can also easily customize additional setup of plugins that is outside of the plugin's setup call -- You can also easily customize additional setup of plugins that is outside of the plugin's setup call
{ -- {
"L3MON4D3/LuaSnip", -- "L3MON4D3/LuaSnip",
config = function(plugin, opts) -- config = function(plugin, opts)
require "astronvim.plugins.configs.luasnip"(plugin, opts) -- include the default astronvim config that calls the setup call -- require "astronvim.plugins.configs.luasnip"(plugin, opts) -- include the default astronvim config that calls the setup call
-- add more custom luasnip configuration such as filetype extend or custom snippets -- -- add more custom luasnip configuration such as filetype extend or custom snippets
local luasnip = require "luasnip" -- local luasnip = require "luasnip"
luasnip.filetype_extend("javascript", { "javascriptreact" }) -- luasnip.filetype_extend("javascript", { "javascriptreact" })
end, -- end,
}, -- },
{ {
"windwp/nvim-autopairs", "windwp/nvim-autopairs",
+14 -27
View File
@@ -3,12 +3,6 @@
pkgs-unstable, pkgs-unstable,
... ...
}: { }: {
nixpkgs.config = {
programs.npm.npmrc = ''
prefix = ''${HOME}/.npm-global
'';
};
home.packages = with pkgs; ( home.packages = with pkgs; (
# -*- Data & Configuration Languages -*-# # -*- Data & Configuration Languages -*-#
[ [
@@ -67,11 +61,13 @@
vscode-extensions.vadimcn.vscode-lldb.adapter # codelldb - debugger vscode-extensions.vadimcn.vscode-lldb.adapter # codelldb - debugger
#-- python #-- python
pipx # Install and Run Python Applications in Isolated Environments
uv # python project package manager
pyright # python language server pyright # python language server
(python311.withPackages ( (python313.withPackages (
ps: ps:
with ps; [ with ps; [
ruff-lsp ruff
black # python formatter black # python formatter
# debugpy # debugpy
@@ -83,15 +79,6 @@
pyquery pyquery
pyyaml pyyaml
boto3 boto3
## emacs's lsp-bridge dependenciesge
# epc
# orjson
# sexpdata
# six
# setuptools
# paramiko
# rapidfuzz
] ]
)) ))
@@ -142,16 +129,16 @@
emmet-ls emmet-ls
] ]
# -*- Lisp like Languages -*-# # -*- Lisp like Languages -*-#
++ [ # ++ [
guile # guile
racket-minimal # racket-minimal
fnlfmt # fennel # fnlfmt # fennel
( # (
if pkgs.stdenv.isDarwin # if pkgs.stdenv.isLinux && pkgs.stdenv.isx86
then pkgs.emptyDirectory # then pkgs-unstable.akkuPackages.scheme-langserver
else pkgs-unstable.akkuPackages.scheme-langserver # else pkgs.emptyDirectory
) # )
] # ]
++ [ ++ [
proselint # English prose linter proselint # English prose linter
+1 -1
View File
@@ -5,7 +5,7 @@
}: { }: {
home.packages = with pkgs; [ home.packages = with pkgs; [
age age
pkgs-unstable.sops sops
rclone rclone
]; ];
} }
+7 -7
View File
@@ -96,8 +96,8 @@ Key management is the core of OpenPGP standard / GnuPG.
GnuPG uses public-key cryptography so that users may communicate securely. In a public-key system, GnuPG uses public-key cryptography so that users may communicate securely. In a public-key system,
each user has a pair of keys consisting of a private key and a public key. **A user's private key is each user has a pair of keys consisting of a private key and a public key. **A user's private key is
kept secret; it need **never be revealed. The public key may be given to anyone with whom the user kept secret; it need NEVER be revealed. The public key may be given to anyone with whom the user
wants to communicate\*\*. GnuPG uses a somewhat more sophisticated scheme in which a user has a wants to communicate**. GnuPG uses a somewhat more sophisticated scheme in which a user has a
primary keypair and then zero or more additional subordinate keypairs. The primary and subordinate primary keypair and then zero or more additional subordinate keypairs. The primary and subordinate
keypairs are bundled to facilitate key management and the bundle can often be considered simply as keypairs are bundled to facilitate key management and the bundle can often be considered simply as
one keypair, or a keyring/keychain(which contains multiple sub key-pairs). one keypair, or a keyring/keychain(which contains multiple sub key-pairs).
@@ -229,9 +229,9 @@ The **best practice** is:
backup it to somewhere else, and import it to another machine to use your keypair. backup it to somewhere else, and import it to another machine to use your keypair.
5. Backup your Primary key's revocation certificate to somewhere safe, it's the last way to rescure 5. Backup your Primary key's revocation certificate to somewhere safe, it's the last way to rescure
your safety if your primary key is compromised! your safety if your primary key is compromised!
6. It's a big problem if your revocation certificate is compromised, but not the bigest one. because 6. It's a big problem if your revocation certificate is compromised, but not the biggest one.
it's only used to revoke your keypair, your data is still safe. But you should generate a new because it's only used to revoke your keypair, your data is still safe. But you should generate a
keypair and revoke the old one immediately. new keypair and revoke the old one immediately.
7. It will be a big problem if your primary key is compromised, and you don't have a revocation 7. It will be a big problem if your primary key is compromised, and you don't have a revocation
certificate to revoke it. But since OpenPGP do not have a good way to distribute revocation certificate to revoke it. But since OpenPGP do not have a good way to distribute revocation
certificate, even you have a revocation certificate, it's still hard to distribute it to certificate, even you have a revocation certificate, it's still hard to distribute it to
@@ -628,7 +628,7 @@ uid [ultimate] test <test@test.t>
sub cv25519/0x9E78E897B6490D6B 2024-01-09 [E] sub cv25519/0x9E78E897B6490D6B 2024-01-09 [E]
# encrypt some file before revoke the keypair # encrypt some file before revoke the keypair
gpg -aer test@test.t README.md > README.md.asc gpg -are test@test.t README.md > README.md.asc
# try to decrypt the file, it should works # try to decrypt the file, it should works
gpg -d README.md.asc gpg -d README.md.asc
@@ -695,7 +695,7 @@ gpg: reason for revocation: No reason specified
# ...... # ......
# try to encrypt some file via the revoked key, it will fail. # try to encrypt some file via the revoked key, it will fail.
gpg -aer 9E78E897B6490D6B README.md gpg -are 9E78E897B6490D6B README.md
gpg: 9E78E897B6490D6B: skipped: Unusable public key gpg: 9E78E897B6490D6B: skipped: Unusable public key
gpg: README.md: encryption failed: Unusable public key gpg: README.md: encryption failed: Unusable public key
``` ```
+1 -1
View File
@@ -33,7 +33,7 @@ in {
"C2A313F98166C942" # S - Ryan Yin (For pass & ssh only) <ryan4yin@linux.com> "C2A313F98166C942" # S - Ryan Yin (For pass & ssh only) <ryan4yin@linux.com>
]; ];
PASSWORD_STORE_CLIP_TIME = "60"; PASSWORD_STORE_CLIP_TIME = "60";
PASSWORD_STORE_GENERATED_LENGTH = "15"; PASSWORD_STORE_GENERATED_LENGTH = "12";
PASSWORD_STORE_ENABLE_EXTENSIONS = "true"; PASSWORD_STORE_ENABLE_EXTENSIONS = "true";
}; };
}; };
+36 -24
View File
@@ -1,18 +1,10 @@
{pkgs-unstable, ...}: let {
config,
pkgs-unstable,
...
}: let
inherit (pkgs-unstable) nu_scripts; inherit (pkgs-unstable) nu_scripts;
in { in {
programs.bash = {
# load the alias file for work
bashrcExtra = ''
alias_for_work=/etc/agenix/alias-for-work.bash
if [ -f $alias_for_work ]; then
. $alias_for_work
else
echo "No alias file found for work"
fi
'';
};
programs.nushell = { programs.nushell = {
# load the alias file for work # load the alias file for work
# the file must exist, otherwise nushell will complain about it! # the file must exist, otherwise nushell will complain about it!
@@ -21,19 +13,39 @@ in {
# https://github.com/nushell/nushell/issues/8214 # https://github.com/nushell/nushell/issues/8214
extraConfig = '' extraConfig = ''
source /etc/agenix/alias-for-work.nushell source /etc/agenix/alias-for-work.nushell
# using claude-code with kimi k2
$env.ANTHROPIC_BASE_URL = "https://api.moonshot.cn/anthropic/"
$env.ANTHROPIC_API_KEY = $env.MOONSHOT_API_KEY
# Directories in this constant are searched by the
# `use` and `source` commands.
const NU_LIB_DIRS = $NU_LIB_DIRS ++ ['${nu_scripts}/share/nu_scripts']
# completion # completion
use ${nu_scripts}/share/nu_scripts/custom-completions/git/git-completions.nu * use custom-completions/cargo/cargo-completions.nu *
use ${nu_scripts}/share/nu_scripts/custom-completions/glow/glow-completions.nu * use custom-completions/curl/curl-completions.nu *
use ${nu_scripts}/share/nu_scripts/custom-completions/just/just-completions.nu * use custom-completions/git/git-completions.nu *
use ${nu_scripts}/share/nu_scripts/custom-completions/make/make-completions.nu * use custom-completions/glow/glow-completions.nu *
use ${nu_scripts}/share/nu_scripts/custom-completions/man/man-completions.nu * use custom-completions/just/just-completions.nu *
use ${nu_scripts}/share/nu_scripts/custom-completions/nix/nix-completions.nu * use custom-completions/make/make-completions.nu *
use ${nu_scripts}/share/nu_scripts/custom-completions/cargo/cargo-completions.nu * use custom-completions/man/man-completions.nu *
use ${nu_scripts}/share/nu_scripts/custom-completions/zellij/zellij-completions.nu * use custom-completions/nix/nix-completions.nu *
use custom-completions/ssh/ssh-completions.nu *
use custom-completions/tar/tar-completions.nu *
use custom-completions/tcpdump/tcpdump-completions.nu *
use custom-completions/zellij/zellij-completions.nu *
# use custom-completions/zoxide/zoxide-completions.nu *
# alias # alias
# use ${nu_scripts}/share/nu_scripts/aliases/git/git-aliases.nu * use aliases/git/git-aliases.nu *
use ${nu_scripts}/share/nu_scripts/aliases/eza/eza-aliases.nu * use aliases/eza/eza-aliases.nu *
use ${nu_scripts}/share/nu_scripts/aliases/bat/bat-aliases.nu * use aliases/bat/bat-aliases.nu *
# modules
use modules/argx *
use modules/lg *
use modules/kubernetes *
''; '';
}; };
} }
+26 -30
View File
@@ -1,41 +1,37 @@
{mysecrets, ...}: { {
config,
mysecrets,
...
}: {
home.file.".ssh/romantic.pub".source = "${mysecrets}/public/romantic.pub"; home.file.".ssh/romantic.pub".source = "${mysecrets}/public/romantic.pub";
programs.ssh = { programs.ssh = {
enable = true; enable = true;
# All my ssh private key are generated by `ssh-keygen -t ed25519 -a 256 -C "xxx@xxx"` # "a private key that is used during authentication will be added to ssh-agent if it is running"
# Config format: addKeysToAgent = "yes";
# Host — given the pattern used to match against the host name given on the command line.
# HostName — specify nickname or abbreviation for host matchBlocks = {
# IdentityFile — the location of your SSH key authentication file for the account. "github.com" = {
# Format in details: # "Using SSH over the HTTPS port for GitHub"
# https://www.ssh.com/academy/ssh/config # "(port 22 is banned by some proxies / firewalls)"
extraConfig = '' hostname = "ssh.github.com";
# a private key that is used during authentication will be added to ssh-agent if it is running port = 443;
AddKeysToAgent yes user = "git";
Host 192.168.*
# allow to securely use local SSH agent to authenticate on the remote machine.
# It has the same effect as adding cli option `ssh -A user@host`
ForwardAgent yes
# romantic holds my homelab~
IdentityFile /etc/agenix/ssh-key-romantic
# Specifies that ssh should only use the identity file explicitly configured above # Specifies that ssh should only use the identity file explicitly configured above
# required to prevent sending default identity files first. # required to prevent sending default identity files first.
IdentitiesOnly yes identitiesOnly = true;
};
Host gtr5 "192.168.*" = {
HostName 192.168.5.172 # "allow to securely use local SSH agent to authenticate on the remote machine."
Port 22 # "It has the same effect as adding cli option `ssh -A user@host`"
forwardAgent = true;
Host um560 # "romantic holds my homelab~"
HostName 192.168.5.173 identityFile = "/etc/agenix/ssh-key-romantic";
Port 22 identitiesOnly = true;
};
Host s500plus };
HostName 192.168.5.174
Port 22
'';
}; };
} }
+131 -64
View File
@@ -1,3 +1,7 @@
// Generating a new Example config via:
// zellij setup --dump-config
// If you'd like to override the default keybindings completely, be sure to change "keybinds" to "keybinds clear-defaults=true" // If you'd like to override the default keybindings completely, be sure to change "keybinds" to "keybinds clear-defaults=true"
keybinds clear-defaults=true { keybinds clear-defaults=true {
normal { normal {
@@ -36,6 +40,7 @@ keybinds clear-defaults=true {
bind "w" { ToggleFloatingPanes; SwitchToMode "Normal"; } bind "w" { ToggleFloatingPanes; SwitchToMode "Normal"; }
bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "Normal"; } bind "e" { TogglePaneEmbedOrFloating; SwitchToMode "Normal"; }
bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0;} bind "c" { SwitchToMode "RenamePane"; PaneNameInput 0;}
bind "i" { TogglePanePinned; SwitchToMode "Normal"; }
} }
move { move {
bind "Ctrl h" { SwitchToMode "Normal"; } bind "Ctrl h" { SwitchToMode "Normal"; }
@@ -54,6 +59,9 @@ keybinds clear-defaults=true {
bind "n" { NewTab; SwitchToMode "Normal"; } bind "n" { NewTab; SwitchToMode "Normal"; }
bind "x" { CloseTab; SwitchToMode "Normal"; } bind "x" { CloseTab; SwitchToMode "Normal"; }
bind "s" { ToggleActiveSyncTab; SwitchToMode "Normal"; } bind "s" { ToggleActiveSyncTab; SwitchToMode "Normal"; }
bind "b" { BreakPane; SwitchToMode "Normal"; }
bind "]" { BreakPaneRight; SwitchToMode "Normal"; }
bind "[" { BreakPaneLeft; SwitchToMode "Normal"; }
bind "1" { GoToTab 1; SwitchToMode "Normal"; } bind "1" { GoToTab 1; SwitchToMode "Normal"; }
bind "2" { GoToTab 2; SwitchToMode "Normal"; } bind "2" { GoToTab 2; SwitchToMode "Normal"; }
bind "3" { GoToTab 3; SwitchToMode "Normal"; } bind "3" { GoToTab 3; SwitchToMode "Normal"; }
@@ -110,7 +118,38 @@ keybinds clear-defaults=true {
bind "Ctrl o" { SwitchToMode "Normal"; } bind "Ctrl o" { SwitchToMode "Normal"; }
bind "Ctrl s" { SwitchToMode "Scroll"; } bind "Ctrl s" { SwitchToMode "Scroll"; }
bind "d" { Detach; } bind "d" { Detach; }
bind "w" {
LaunchOrFocusPlugin "session-manager" {
floating true
move_to_focused_tab true
};
SwitchToMode "Normal"
}
bind "c" {
LaunchOrFocusPlugin "configuration" {
floating true
move_to_focused_tab true
};
SwitchToMode "Normal"
}
bind "p" {
LaunchOrFocusPlugin "plugin-manager" {
floating true
move_to_focused_tab true
};
SwitchToMode "Normal"
}
bind "a" {
LaunchOrFocusPlugin "zellij:about" {
floating true
move_to_focused_tab true
};
SwitchToMode "Normal"
}
} }
// Allow to use tmux inside zellij
//
// tmux { // tmux {
// bind "[" { SwitchToMode "Scroll"; } // bind "[" { SwitchToMode "Scroll"; }
// bind "Ctrl b" { Write 2; SwitchToMode "Normal"; } // bind "Ctrl b" { Write 2; SwitchToMode "Normal"; }
@@ -137,7 +176,10 @@ keybinds clear-defaults=true {
shared_except "locked" { shared_except "locked" {
bind "Ctrl g" { SwitchToMode "Locked"; } bind "Ctrl g" { SwitchToMode "Locked"; }
bind "Ctrl q" { Quit; } bind "Ctrl q" { Quit; }
bind "Alt f" { ToggleFloatingPanes; }
bind "Alt n" { NewPane; } bind "Alt n" { NewPane; }
bind "Alt i" { MoveTab "Left"; }
bind "Alt o" { MoveTab "Right"; }
bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; } bind "Alt h" "Alt Left" { MoveFocusOrTab "Left"; }
bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; } bind "Alt l" "Alt Right" { MoveFocusOrTab "Right"; }
bind "Alt j" "Alt Down" { MoveFocus "Down"; } bind "Alt j" "Alt Down" { MoveFocus "Down"; }
@@ -168,20 +210,40 @@ keybinds clear-defaults=true {
shared_except "move" "locked" { shared_except "move" "locked" {
bind "Ctrl h" { SwitchToMode "Move"; } bind "Ctrl h" { SwitchToMode "Move"; }
} }
// shared_except "tmux" "locked" { // shared_except "tmux" "locked" {
// bind "Ctrl b" { SwitchToMode "Tmux"; } // bind "Ctrl b" { SwitchToMode "Tmux"; }
// } // }
} }
// Plugin aliases - can be used to change the implementation of Zellij
// changing these requires a restart to take effect
plugins { plugins {
tab-bar { path "tab-bar"; } tab-bar location="zellij:tab-bar"
status-bar { path "status-bar"; } status-bar location="zellij:status-bar"
strider { path "strider"; } strider location="zellij:strider"
compact-bar { path "compact-bar"; } compact-bar location="zellij:compact-bar"
session-manager location="zellij:session-manager"
welcome-screen location="zellij:session-manager" {
welcome_screen true
}
filepicker location="zellij:strider" {
cwd "/"
}
configuration location="zellij:configuration"
plugin-manager location="zellij:plugin-manager"
about location="zellij:about"
}
// Plugins to load in the background when a new session starts
load_plugins {
// "file:/path/to/my-plugin.wasm"
// "https://example.com/my-plugin.wasm"
} }
// Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP // Choose what to do when zellij receives SIGTERM, SIGINT, SIGQUIT or SIGHUP
// eg. when terminal window with an active zellij session is closed // eg. when terminal window with an active zellij session is closed
// (Requires restart)
// Options: // Options:
// - detach (Default) // - detach (Default)
// - quit // - quit
@@ -197,10 +259,13 @@ plugins {
// Choose the path to the default shell that zellij will use for opening new panes // Choose the path to the default shell that zellij will use for opening new panes
// Default: $SHELL // Default: $SHELL
// Change to nushell
// //
default_shell "nu" default_shell "nu"
// Choose the path to override cwd that zellij will use for opening new panes
//
// default_cwd ""
// Toggle between having pane frames around the panes // Toggle between having pane frames around the panes
// Options: // Options:
// - true (default) // - true (default)
@@ -215,76 +280,38 @@ default_shell "nu"
// //
// auto_layout true // auto_layout true
// Define color themes for Zellij // Whether sessions should be serialized to the cache folder (including their tabs/panes, cwds and running commands) so that they can later be resurrected
// For more examples, see: https://github.com/zellij-org/zellij/tree/main/example/themes // (Requires restart)
// Once these themes are defined, one of them should to be selected in the "theme" section of this file // Options:
// - true (default)
// - false
// //
themes { // session_serialization false
// 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 { // Whether pane viewports are serialized along with the session, default is false
bg "#626880" // Surface2 // (Requires restart)
fg "#c6d0f5" // Options:
red "#e78284" // - true
green "#a6d189" // - false (default)
blue "#8caaee" //
yellow "#e5c890" // serialize_pane_viewport true
magenta "#f4b8e4" // Pink
orange "#ef9f76" // Peach
cyan "#99d1db" // Sky
black "#292c3c" // Mantle
white "#c6d0f5"
}
catppuccin-macchiato { // Scrollback lines to serialize along with the pane viewport when serializing sessions, 0
bg "#5b6078" // Surface2 // defaults to the scrollback size. If this number is higher than the scrollback size, it will
fg "#cad3f5" // also default to the scrollback size. This does nothing if `serialize_pane_viewport` is not true.
red "#ed8796" // (Requires restart)
green "#a6da95" //
blue "#8aadf4" // scrollback_lines_to_serialize 10000
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. // Choose the theme that is specified in the themes section.
// Default: default // Default: default
// //
theme "catppuccin-mocha" theme "catppuccin-mocha"
// The name of the default layout to load on startup // The name of the default layout to load on startup
// Default: "default" // Default: "default"
// (Requires restart)
// //
// default_layout "compact" // default_layout "compact"
@@ -296,6 +323,7 @@ theme "catppuccin-mocha"
// Toggle enabling the mouse mode. // Toggle enabling the mouse mode.
// On certain configurations, or terminals this could // On certain configurations, or terminals this could
// potentially interfere with copying text. // potentially interfere with copying text.
// (Requires restart)
// Options: // Options:
// - true (default) // - true (default)
// - false // - false
@@ -305,6 +333,7 @@ theme "catppuccin-mocha"
// Configure the scroll back buffer size // Configure the scroll back buffer size
// This is the number of lines zellij stores for each pane in the scroll back // This is the number of lines zellij stores for each pane in the scroll back
// buffer. Excess number of lines are discarded in a FIFO fashion. // buffer. Excess number of lines are discarded in a FIFO fashion.
// (Requires restart)
// Valid values: positive integers // Valid values: positive integers
// Default value: 10000 // Default value: 10000
// //
@@ -342,14 +371,52 @@ theme "catppuccin-mocha"
// When attaching to an existing session with other users, // When attaching to an existing session with other users,
// should the session be mirrored (true) // should the session be mirrored (true)
// or should each user have their own cursor (false) // or should each user have their own cursor (false)
// (Requires restart)
// Default: false // Default: false
// //
// mirror_session true // mirror_session true
// The folder in which Zellij will look for layouts // The folder in which Zellij will look for layouts
// (Requires restart)
// //
// layout_dir "/path/to/my/layout_dir" // layout_dir "/path/to/my/layout_dir"
// The folder in which Zellij will look for themes // The folder in which Zellij will look for themes
// (Requires restart)
// //
// theme_dir "/path/to/my/theme_dir" // theme_dir "/path/to/my/theme_dir"
// Enable or disable the rendering of styled and colored underlines (undercurl).
// May need to be disabled for certain unsupported terminals
// (Requires restart)
// Default: true
//
// styled_underlines false
// Enable or disable writing of session metadata to disk (if disabled, other sessions might not know
// metadata info on this session)
// (Requires restart)
// Default: false
//
// disable_session_metadata true
// Enable or disable support for the enhanced Kitty Keyboard Protocol (the host terminal must also support it)
// (Requires restart)
// Default: true (if the host terminal supports it)
//
// support_kitty_keyboard_protocol false
// Whether to stack panes when resizing beyond a certain size
// Default: true
//
// stacked_resize false
// Whether to show release notes on first version run
// Default: true
//
show_release_notes false
// Whether to show startup tips on session start
// Default: true
//
show_startup_tips false
+6 -13
View File
@@ -1,21 +1,16 @@
{ {pkgs, ...}: let
pkgs,
pkgs-stable,
...
}: let
shellAliases = { shellAliases = {
"zj" = "zellij"; "zj" = "zellij";
}; };
in { in {
programs.zellij = { programs.zellij = {
enable = true; enable = true;
# [Linux] Revert to old v0.40.1 to fix: package = pkgs.zellij;
# https://github.com/zellij-org/zellij/issues/3592
package =
if pkgs.stdenv.isLinux
then pkgs-stable.zellij
else pkgs.zellij;
}; };
xdg.configFile."zellij/config.kdl".source = ./config.kdl;
# Disable catppuccin to avoid conflict with my non-nix config.
catppuccin.zellij.enable = false;
# auto start zellij in nushell # auto start zellij in nushell
programs.nushell.extraConfig = '' programs.nushell.extraConfig = ''
# auto start zellij # auto start zellij
@@ -38,6 +33,4 @@ in {
# only works in bash/zsh, not nushell # only works in bash/zsh, not nushell
home.shellAliases = shellAliases; home.shellAliases = shellAliases;
programs.nushell.shellAliases = shellAliases; programs.nushell.shellAliases = shellAliases;
xdg.configFile."zellij/config.kdl".source = ./config.kdl;
} }
+148 -68
View File
@@ -1,9 +1,6 @@
# Place a copy of this config to ~/.aerospace.toml # Place a copy of this config to ~/.aerospace.toml
# After that, you can edit ~/.aerospace.toml to your liking # After that, you can edit ~/.aerospace.toml to your liking
# It's not necessary to copy all keys to your config.
# If the key is missing in your config, "default-config.toml" will serve as a fallback
# You can use it to add commands that run after login to macOS user session. # You can use it to add commands that run after login to macOS user session.
# 'start-at-login' needs to be 'true' for 'after-login-command' to work # 'start-at-login' needs to be 'true' for 'after-login-command' to work
# Available commands: https://nikitabobko.github.io/AeroSpace/commands # Available commands: https://nikitabobko.github.io/AeroSpace/commands
@@ -21,7 +18,7 @@ after-startup-command = [
] ]
# Start AeroSpace at login # Start AeroSpace at login
start-at-login = false start-at-login = true
# Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization # Normalizations. See: https://nikitabobko.github.io/AeroSpace/guide#normalization
enable-normalization-flatten-containers = true enable-normalization-flatten-containers = true
@@ -40,39 +37,43 @@ default-root-container-layout = 'tiles'
# tall monitor (anything higher than wide) gets vertical orientation # tall monitor (anything higher than wide) gets vertical orientation
default-root-container-orientation = 'auto' default-root-container-orientation = 'auto'
# Possible values: (qwerty|dvorak)
# See https://nikitabobko.github.io/AeroSpace/guide#key-mapping
key-mapping.preset = 'qwerty'
# Mouse follows focus when focused monitor changes # Mouse follows focus when focused monitor changes
# Drop it from your config, if you don't like this behavior # Drop it from your config, if you don't like this behavior
# See https://nikitabobko.github.io/AeroSpace/guide#on-focus-changed-callbacks # See https://nikitabobko.github.io/AeroSpace/guide#on-focus-changed-callbacks
# See https://nikitabobko.github.io/AeroSpace/commands#move-mouse # See https://nikitabobko.github.io/AeroSpace/commands#move-mouse
# Fallback value (if you omit the key): on-focused-monitor-changed = []
on-focused-monitor-changed = ['move-mouse monitor-lazy-center'] on-focused-monitor-changed = ['move-mouse monitor-lazy-center']
# You can effectively turn off macOS "Hide application" (cmd-h) feature by toggling this flag
# Useful if you don't use this macOS feature, but accidentally hit cmd-h or cmd-alt-h key
# Also see: https://nikitabobko.github.io/AeroSpace/goodies#disable-hide-app
automatically-unhide-macos-hidden-apps = false
# Possible values: (qwerty|dvorak|colemak)
# See https://nikitabobko.github.io/AeroSpace/guide#key-mapping
[key-mapping]
preset = 'qwerty'
# Gaps between windows (inner-*) and between monitor edges (outer-*). # Gaps between windows (inner-*) and between monitor edges (outer-*).
# Possible values: # Possible values:
# - Constant: gaps.outer.top = 8 # - Constant: gaps.outer.top = 8
# - Per monitor: gaps.outer.top = [{ monitor.main = 16 }, { monitor."some-pattern" = 32 }, 24] # - Per monitor: gaps.outer.top = [{ monitor.main = 16 }, { monitor."some-pattern" = 32 }, 24]
# In this example, 24 is a default value when there is no match. # In this example, 24 is a default value when there is no match.
# Monitor pattern is the same as for 'workspace-to-monitor-force-assignment'. # Monitor pattern is the same as for 'workspace-to-monitor-force-assignment'.
# See: https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors # See:
# https://nikitabobko.github.io/AeroSpace/guide#assign-workspaces-to-monitors
[gaps] [gaps]
inner.horizontal = 5 inner.horizontal = 3
inner.vertical = 5 inner.vertical = 3
outer.left = 5 outer.left = 3
outer.bottom = 5 outer.bottom = 3
outer.top = 5 outer.top = 3
outer.right = 5 outer.right = 3
[exec] # ['main'] binding mode declaration
inherit-env-vars = true
[exec.env-vars]
PATH = '/opt/homebrew/bin:/opt/homebrew/sbin:${PATH}'
# 'main' binding mode declaration
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes # See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
# 'main' binding mode must be always presented # ['main'] binding mode must be always presented
# Fallback value (if you omit the key): mode.main.binding = {}
[mode.main.binding] [mode.main.binding]
# All possible keys: # All possible keys:
@@ -80,8 +81,10 @@ PATH = '/opt/homebrew/bin:/opt/homebrew/sbin:${PATH}'
# - Numbers. 0, 1, 2, ..., 9 # - Numbers. 0, 1, 2, ..., 9
# - Keypad numbers. keypad0, keypad1, keypad2, ..., keypad9 # - Keypad numbers. keypad0, keypad1, keypad2, ..., keypad9
# - F-keys. f1, f2, ..., f20 # - F-keys. f1, f2, ..., f20
# - Special keys. minus, equal, period, comma, slash, backslash, quote, semicolon, backtick, # - Special keys. minus, equal, period, comma, slash, backslash, quote, semicolon,
# leftSquareBracket, rightSquareBracket, space, enter, esc, backspace, tab # backtick, leftSquareBracket, rightSquareBracket, space, enter, esc,
# backspace, tab, pageUp, pageDown, home, end, forwardDelete,
# sectionSign (ISO keyboards only, european keyboards only)
# - Keypad special. keypadClear, keypadDecimalMark, keypadDivide, keypadEnter, keypadEqual, # - Keypad special. keypadClear, keypadDecimalMark, keypadDivide, keypadEnter, keypadEqual,
# keypadMinus, keypadMultiply, keypadPlus # keypadMinus, keypadMultiply, keypadPlus
# - Arrows. left, down, up, right # - Arrows. left, down, up, right
@@ -91,13 +94,14 @@ PATH = '/opt/homebrew/bin:/opt/homebrew/sbin:${PATH}'
# All possible commands: https://nikitabobko.github.io/AeroSpace/commands # All possible commands: https://nikitabobko.github.io/AeroSpace/commands
# See: https://nikitabobko.github.io/AeroSpace/commands#exec-and-forget # See: https://nikitabobko.github.io/AeroSpace/commands#exec-and-forget
# You can uncomment the following lines to open up terminal with alt + enter shortcut (like in i3) # You can uncomment the following lines to open up terminal with alt + enter shortcut
# (like in i3)
alt-enter = '''exec-and-forget osascript -e ' alt-enter = '''exec-and-forget osascript -e '
tell application "kitty" tell application "kitty"
do script do script
activate activate
end tell' end tell'
''' '''
# See: https://nikitabobko.github.io/AeroSpace/commands#layout # See: https://nikitabobko.github.io/AeroSpace/commands#layout
alt-slash = 'layout tiles horizontal vertical' alt-slash = 'layout tiles horizontal vertical'
@@ -127,9 +131,12 @@ alt-4 = 'workspace 4Firefox'
alt-5 = 'workspace 5Chrome' alt-5 = 'workspace 5Chrome'
alt-6 = 'workspace 6Chat' alt-6 = 'workspace 6Chat'
alt-7 = 'workspace 7Music' alt-7 = 'workspace 7Music'
alt-8 = 'workspace 8' alt-8 = 'workspace 8Mail'
alt-9 = 'workspace 9' alt-9 = 'workspace 9File'
alt-0 = 'workspace 10' alt-0 = 'workspace 0Other'
alt-a = 'workspace A' # In your config, you can drop workspace bindings that you don't need
alt-b = 'workspace B'
# See: https://nikitabobko.github.io/AeroSpace/commands#move-node-to-workspace # See: https://nikitabobko.github.io/AeroSpace/commands#move-node-to-workspace
@@ -140,9 +147,12 @@ alt-shift-4 = 'move-node-to-workspace 4Firefox'
alt-shift-5 = 'move-node-to-workspace 5Chrome' alt-shift-5 = 'move-node-to-workspace 5Chrome'
alt-shift-6 = 'move-node-to-workspace 6Chat' alt-shift-6 = 'move-node-to-workspace 6Chat'
alt-shift-7 = 'move-node-to-workspace 7Music' alt-shift-7 = 'move-node-to-workspace 7Music'
alt-shift-8 = 'move-node-to-workspace 8' alt-shift-8 = 'move-node-to-workspace 8Mail'
alt-shift-9 = 'move-node-to-workspace 9' alt-shift-9 = 'move-node-to-workspace 9File'
alt-shift-0 = 'move-node-to-workspace 10' alt-shift-0 = 'move-node-to-workspace 0Other'
alt-shift-a = 'move-node-to-workspace A'
alt-shift-b = 'move-node-to-workspace B'
# See: https://nikitabobko.github.io/AeroSpace/commands#workspace-back-and-forth # See: https://nikitabobko.github.io/AeroSpace/commands#workspace-back-and-forth
alt-tab = 'workspace-back-and-forth' alt-tab = 'workspace-back-and-forth'
@@ -152,12 +162,29 @@ alt-shift-tab = 'move-workspace-to-monitor --wrap-around next'
# See: https://nikitabobko.github.io/AeroSpace/commands#mode # See: https://nikitabobko.github.io/AeroSpace/commands#mode
alt-shift-semicolon = 'mode service' alt-shift-semicolon = 'mode service'
cmd-h = [] # Disable "hide application" # 'service' binding mode declaration.
cmd-alt-h = [] # Disable "hide others" # See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes
[mode.service.binding]
esc = ['reload-config', 'mode main']
r = ['flatten-workspace-tree', 'mode main'] # reset layout
f = [
'layout floating tiling',
'mode main',
] # Toggle between floating and tiling layout
backspace = ['close-all-windows-but-current', 'mode main']
alt-shift-c = 'reload-config' # sticky is not yet supported https://github.com/nikitabobko/AeroSpace/issues/2
#s = ['layout sticky tiling', 'mode main']
alt-shift-h = ['join-with left', 'mode main']
alt-shift-j = ['join-with down', 'mode main']
alt-shift-k = ['join-with up', 'mode main']
alt-shift-l = ['join-with right', 'mode main']
down = 'volume down'
up = 'volume up'
shift-down = ['volume set 0', 'mode main']
alt-r = 'mode resize'
# Declare 'resize' binding mode # Declare 'resize' binding mode
[mode.resize.binding] [mode.resize.binding]
@@ -168,23 +195,10 @@ l = 'resize width +50'
enter = 'mode main' enter = 'mode main'
esc = 'mode main' esc = 'mode main'
# 'service' binding mode declaration. [exec]
# See: https://nikitabobko.github.io/AeroSpace/guide#binding-modes inherit-env-vars = true
[mode.service.binding] [exec.env-vars]
esc = ['reload-config', 'mode main'] PATH = '/opt/homebrew/bin:/opt/homebrew/sbin:${PATH}'
r = ['flatten-workspace-tree', 'mode main'] # reset layout
#s = ['layout sticky tiling', 'mode main'] # sticky is not yet supported https://github.com/nikitabobko/AeroSpace/issues/2
f = [
'layout floating tiling',
'mode main',
] # Toggle between floating and tiling layout
backspace = ['close-all-windows-but-current', 'mode main']
alt-shift-h = ['join-with left', 'mode main']
alt-shift-j = ['join-with down', 'mode main']
alt-shift-k = ['join-with up', 'mode main']
alt-shift-l = ['join-with right', 'mode main']
# ================================================================= # =================================================================
# #
@@ -207,6 +221,11 @@ run = 'move-node-to-workspace 2Alacritty'
if.app-id = 'com.tencent.WeWorkMac' if.app-id = 'com.tencent.WeWorkMac'
run = 'move-node-to-workspace 3Work' run = 'move-node-to-workspace 3Work'
[[on-window-detected]]
# if.app-id = 'com.tencent.WeWorkMac'
if.app-id = 'com.tinyspeck.slackmacgap'
run = 'move-node-to-workspace 3Work'
[[on-window-detected]] [[on-window-detected]]
if.app-id = 'org.mozilla.firefox' if.app-id = 'org.mozilla.firefox'
run = 'move-node-to-workspace 4Firefox' run = 'move-node-to-workspace 4Firefox'
@@ -235,23 +254,84 @@ run = 'move-node-to-workspace 7Music'
if.app-id = 'com.netease.163music' if.app-id = 'com.netease.163music'
run = 'move-node-to-workspace 7Music' run = 'move-node-to-workspace 7Music'
[[on-window-detected]]
if.app-id = 'com.apple.mail'
run = 'move-node-to-workspace 8Mail'
# calendar
[[on-window-detected]]
if.app-id = 'com.apple.iCal'
run = 'move-node-to-workspace 8Mail'
[[on-window-detected]]
if.app-id = 'com.apple.finder'
run = ['layout floating', 'move-node-to-workspace 9File']
[[on-window-detected]]
if.app-id = 'com.apple.iBooksX'
run = ['layout floating', 'move-node-to-workspace 9File']
[[on-window-detected]]
if.app-id = 'net.cozic.joplin-desktop'
run = ['layout floating', 'move-node-to-workspace 9File']
# Book/Picture Preview
[[on-window-detected]]
if.app-id = 'com.apple.Preview'
run = ['layout floating', 'move-node-to-workspace 9File']
[[on-window-detected]]
if.app-id = 'com.microsoft.VSCode'
run = ['layout floating', 'move-node-to-workspace 9File']
[[on-window-detected]]
if.app-id = 'com.todesktop.230313mzl4w4u92' # Cursor AI Editor
run = ['layout floating', 'move-node-to-workspace 9File']
[[on-window-detected]]
if.app-id = 'org.wireshark.Wireshark'
run = ['layout floating', 'move-node-to-workspace 0Other']
[[on-window-detected]]
if.app-id = 'ai.elementlabs.lmstudio'
run = ['layout floating', 'move-node-to-workspace 0Other']
[[on-window-detected]]
if.app-id = 'us.zoom.xos'
run = 'move-node-to-workspace 0Other'
# Auth UI - do not move it
[[on-window-detected]]
if.app-id = 'com.apple.SecurityAgent'
run = ['layout floating']
# System Settings - do not move it
[[on-window-detected]]
if.app-id = 'com.apple.systempreferences'
run = ['layout floating']
# Clash Verge - has problem with floating
[[on-window-detected]]
if.app-id = 'io.github.clash-verge-rev.clash-verge-rev'
run = ['move-node-to-workspace 0Other']
# Make all windows float by default # Make all windows float by default
[[on-window-detected]] [[on-window-detected]]
check-further-callbacks = true check-further-callbacks = true
run = 'layout floating' run = ['layout floating']
# ================================================================= # =================================================================
# Multiple monitor configuration # Multiple monitor configuration
# ================================================================= # =================================================================
[workspace-to-monitor-force-assignment] [workspace-to-monitor-force-assignment]
1Kitty = 'secondary' # Non-main monitor in case when there are only two monitors' 1Kitty = ['main'] # Non-main monitor in case when there are only two monitors'
2Alacritty = 'main' # "Main" monitor ("main" as in System Settings → Displays → Use as) 2Alacritty = ['main'] # "Main" monitor ("main" as in System Settings → Displays → Use as)
3Work = 'main' 3Work = ['built-in']
4Firefox = 'main' 4Firefox = ['main']
5Chrome = 'secondary' 5Chrome = ['main']
6Chat = 'main' 6Chat = ['built-in']
7Music = 'main' 7Music = ['built-in']
8 = 'main' 8Mail = ['main']
9 = 'main' 9File = ['main']
0 = 'main' 0Other = ['main']
+4 -2
View File
@@ -1,3 +1,5 @@
{ {config, ...}: {
home.file.".aerospace.toml".source = ./aerospace.toml; home.file.".aerospace.toml".source =
config.lib.file.mkOutOfStoreSymlink
"${config.home.homeDirectory}/nix-config/home/darwin/aerospace/aerospace.toml";
} }
+3
View File
@@ -12,4 +12,7 @@
../base/gui ../base/gui
../base/home.nix ../base/home.nix
]; ];
# enable management of XDG base directories on macOS.
xdg.enable = true;
} }
+9 -2
View File
@@ -1,6 +1,13 @@
{pkgs, ...}: { {
config,
pkgs,
...
}: {
home.packages = with pkgs; [ home.packages = with pkgs; [
clash-meta clash-meta
]; ];
home.file.".proxychains/proxychains.conf".source = ./proxychains.conf;
home.file.".proxychains/proxychains.conf".source =
config.lib.file.mkOutOfStoreSymlink
"${config.home.homeDirectory}/nix-config/home/darwin/proxy/proxychains.conf";
} }
+3 -3
View File
@@ -3,7 +3,7 @@
export PATH="$PATH:/opt/homebrew/bin:/usr/local/bin" export PATH="$PATH:/opt/homebrew/bin:/usr/local/bin"
''; '';
# copied from the content generated by `conda init bash` # copied from the content generated by `conda init bash`
initExtra = '' initContent = ''
arch=$(uname -m) arch=$(uname -m)
if [ "aarch64" = "$arch" ] || [ "arm64" = "$arch" ]; then if [ "aarch64" = "$arch" ] || [ "arm64" = "$arch" ]; then
@@ -28,10 +28,10 @@ in {
# in /opt/homebrew for Apple Silicon and /usr/local for Rosetta 2 to coexist and use bottles. # in /opt/homebrew for Apple Silicon and /usr/local for Rosetta 2 to coexist and use bottles.
programs.bash = { programs.bash = {
enable = true; enable = true;
bashrcExtra = lib.mkAfter (envExtra + initExtra); bashrcExtra = lib.mkAfter (envExtra + initContent);
}; };
programs.zsh = { programs.zsh = {
enable = true; enable = true;
inherit envExtra initExtra; inherit envExtra initContent;
}; };
} }
-3
View File
@@ -1,3 +0,0 @@
{myvars, ...}: {
programs.ssh.extraConfig = myvars.networking.ssh.extraConfig;
}
-1
View File
@@ -5,7 +5,6 @@
libnotify libnotify
wireguard-tools # manage wireguard vpn manually, via wg-quick wireguard-tools # manage wireguard vpn manually, via wg-quick
ventoy # create bootable usb
virt-viewer # vnc connect to VM, used by kubevirt virt-viewer # vnc connect to VM, used by kubevirt
]; ];
+58 -48
View File
@@ -1,65 +1,75 @@
{ {
lib,
pkgs, pkgs,
pkgs-unstable, pkgs-unstable,
# pkgs-stable, # pkgs-stable,
nur-ryan4yin, nur-ryan4yin,
blender-bin,
... ...
}: { }: {
home.packages = with pkgs; [ home.packages = with pkgs;
# creative [
blender # 3d modeling # creative
# gimp # image editing, I prefer using figma in browser instead of this one # gimp # image editing, I prefer using figma in browser instead of this one
inkscape # vector graphics inkscape # vector graphics
krita # digital painting krita # digital painting
musescore # music notation musescore # music notation
# reaper # audio production # reaper # audio production
# sonic-pi # music programming # sonic-pi # music programming
# 2d game design # 2d game design
ldtk # A modern, versatile 2D level editor # aseprite # Animated sprite editor & pixel art tool
aseprite # Animated sprite editor & pixel art tool
# this app consumes a lot of storage, so do not install it currently # this app consumes a lot of storage, so do not install it currently
# kicad # 3d printing, eletrical engineering # kicad # 3d printing, eletrical engineering
]
++ (lib.optionals pkgs.stdenv.isx86_64 [
# https://github.com/edolstra/nix-warez/blob/master/blender/flake.nix
blender-bin.packages.${pkgs.system}.blender_4_2 # 3d modeling
# fpga ldtk # A modern, versatile 2D level editor
pkgs-unstable.python312Packages.apycula # gowin fpga
pkgs-unstable.yosys # fpga synthesis # fpga
pkgs-unstable.nextpnr # fpga place and route python313Packages.apycula # gowin fpga
pkgs-unstable.openfpgaloader # fpga programming yosys # fpga synthesis
nur-ryan4yin.packages.${pkgs.system}.gowin-eda-edu-ide # app: `gowin-env` => `gw_ide` / `gw_pack` / ... nextpnr # fpga place and route
]; openfpgaloader # fpga programming
# nur-ryan4yin.packages.${pkgs.system}.gowin-eda-edu-ide # app: `gowin-env` => `gw_ide` / `gw_pack` / ...
]);
programs = { programs = {
# live streaming # live streaming
obs-studio = { obs-studio = {
enable = true; enable = pkgs.stdenv.isx86_64;
plugins = with pkgs.obs-studio-plugins; [ plugins = with pkgs.obs-studio-plugins;
# screen capture [
wlrobs # screen capture
# obs-ndi wlrobs
obs-vaapi # obs-ndi
obs-nvfbc # obs-nvfbc
obs-teleport obs-teleport
# obs-hyperion # obs-hyperion
droidcam-obs droidcam-obs
obs-vkcapture obs-vkcapture
obs-gstreamer obs-gstreamer
obs-3d-effect input-overlay
input-overlay obs-multi-rtmp
obs-multi-rtmp obs-source-clone
obs-source-clone obs-shaderfilter
obs-shaderfilter obs-source-record
obs-source-record obs-livesplit-one
obs-livesplit-one looking-glass-obs
looking-glass-obs obs-vintage-filter
obs-vintage-filter obs-command-source
obs-command-source obs-move-transition
obs-move-transition obs-backgroundremoval
obs-backgroundremoval # advanced-scene-switcher
# advanced-scene-switcher obs-pipewire-audio-capture
obs-pipewire-audio-capture ]
]; ++ (lib.optionals pkgs.stdenv.isx86_64 [
obs-vaapi
obs-3d-effect
]);
}; };
}; };
} }
+7 -4
View File
@@ -16,18 +16,21 @@
# has problem with wayland, so disable it # has problem with wayland, so disable it
tray = false; tray = false;
temperature = { temperature = {
day = 5700; day = 6000;
night = 4000; night = 4500;
}; };
# https://gitlab.com/chinstrap/gammastep/-/blob/master/gammastep.conf.sample?ref_type=heads # https://gitlab.com/chinstrap/gammastep/-/blob/master/gammastep.conf.sample?ref_type=heads
settings = { settings = {
general = { general = {
fade = "1"; # gradually apply the new screen temperature/brightness over a couple of seconds. fade = "1"; # gradually apply the new screen temperature/brightness over a couple of seconds.
# it is a fake brightness adjustment obtained by manipulating the gamma ramps, # it is a fake brightness adjustment obtained by manipulating the gamma ramps,
# which means that it does not reduce the backlight of the screen. # which means that it does not reduce the backlight of the screen.
# Preferably only use it if your normal backlight adjustment is too coarse-grained. # Preferably only use it if your normal backlight adjustment is too coarse-grained.
brightness-day = "1.0"; #
brightness-night = "0.8"; # brightness-day = "1.3";
# brightness-night = "1";
location-provider = "manual"; location-provider = "manual";
# by default, Redshift will use the current elevation of the sun # by default, Redshift will use the current elevation of the sun
-26
View File
@@ -1,26 +0,0 @@
# Vertical Candidate List
Vertical Candidate List=False
# Use Per Screen DPI
PerScreenDPI=True
# Use mouse wheel to go to prev or next page
WheelForPaging=True
# Font
Font="Sans 10"
# Menu Font
MenuFont="Sans 10"
# Tray Font
TrayFont="Sans Bold 10"
# Tray Label Outline Color
TrayOutlineColor=#000000
# Tray Label Text Color
TrayTextColor=#ffffff
# Prefer Text Icon
PreferTextIcon=False
# Show Layout Name In Icon
ShowLayoutNameInIcon=True
# Use input method language to display text
UseInputMethodLangaugeToDisplayText=True
# Theme macchiato, frappe, latte, mocha
Theme=catppuccin-mocha
# Force font DPI on Wayland
ForceWaylandDPI=0
+4 -9
View File
@@ -1,10 +1,4 @@
{ {pkgs, ...}: {
pkgs,
nur-ryan4yin,
...
}: {
home.file.".local/share/fcitx5/themes".source = "${nur-ryan4yin.packages.${pkgs.system}.catppuccin-fcitx5}/src";
xdg.configFile = { xdg.configFile = {
"fcitx5/profile" = { "fcitx5/profile" = {
source = ./profile; source = ./profile;
@@ -12,11 +6,12 @@
# so we need to force replace it in every rebuild to avoid file conflict. # so we need to force replace it in every rebuild to avoid file conflict.
force = true; force = true;
}; };
"fcitx5/conf/classicui.conf".source = ./classicui.conf;
}; };
i18n.inputMethod = { i18n.inputMethod = {
enabled = "fcitx5"; enable = true;
type = "fcitx5";
fcitx5.waylandFrontend = true;
fcitx5.addons = with pkgs; [ fcitx5.addons = with pkgs; [
# for flypy chinese input method # for flypy chinese input method
fcitx5-rime fcitx5-rime
+8 -2
View File
@@ -1,6 +1,6 @@
[Groups/0] [Groups/0]
# Group Name # Group Name
Name=Other Name=Default
# Layout # Layout
Default Layout=us Default Layout=us
# Default Input Method # Default Input Method
@@ -8,10 +8,16 @@ DefaultIM=rime
[Groups/0/Items/0] [Groups/0/Items/0]
# Name # Name
Name=keyboard-us
# Layout
Layout=
[Groups/0/Items/1]
# Name
Name=rime Name=rime
# Layout # Layout
Layout= Layout=
[GroupOrder] [GroupOrder]
0=Other 0=Default
-11
View File
@@ -42,16 +42,5 @@
name = "Papirus-Dark"; name = "Papirus-Dark";
package = pkgs.papirus-icon-theme; package = pkgs.papirus-icon-theme;
}; };
theme = {
# https://github.com/catppuccin/gtk
name = "catppuccin-macchiato-pink-compact";
package = pkgs.catppuccin-gtk.override {
# https://github.com/NixOS/nixpkgs/blob/nixos-23.05/pkgs/data/themes/catppuccin-gtk/default.nix
accents = ["pink"];
size = "compact";
variant = "macchiato";
};
};
}; };
} }
+21 -28
View File
@@ -6,36 +6,29 @@
}: }:
# media - control and enjoy audio/video # media - control and enjoy audio/video
{ {
home.packages = with pkgs; [ home.packages = with pkgs;
# audio control [
pavucontrol # audio control
playerctl pavucontrol
pulsemixer playerctl
imv # simple image viewer pulsemixer
imv # simple image viewer
nvtopPackages.full # video/audio tools
libva-utils
vdpauinfo
vulkan-tools
glxinfo
nvitop
]
++ (lib.optionals pkgs.stdenv.isx86_64 [
(zoom-us.override {hyprlandXdgDesktopPortalSupport = true;})
]);
# video/audio tools programs.mpv = {
cava # for visualizing audio enable = true;
libva-utils defaultProfiles = ["gpu-hq"];
vdpauinfo scripts = [pkgs.mpvScripts.mpris];
vulkan-tools
glxinfo
];
# https://github.com/catppuccin/cava
xdg.configFile."cava/config".text =
''
# custom cava config
''
+ builtins.readFile "${nur-ryan4yin.packages.${pkgs.system}.catppuccin-cava}/mocha.cava";
programs = {
mpv = {
enable = true;
defaultProfiles = ["gpu-hq"];
scripts = [pkgs.mpvScripts.mpris];
};
}; };
services = { services = {
+2 -13
View File
@@ -17,24 +17,13 @@
remmina remmina
freerdp # required by remmina freerdp # required by remmina
# misc
flameshot
ventoy # multi-boot usb creator
# my custom hardened packages # my custom hardened packages
pkgs.nixpaks.qq pkgs.nixpaks.qq
pkgs.nixpaks.qq-desktop-item pkgs.nixpaks.qq-desktop-item
# qqmusic
wechat-uos pkgs.bwraps.wechat
# pkgs.nixpaks.wechat-uos
# pkgs.nixpaks.wechat-uos-desktop-item
]; ];
# GitHub CLI tool
programs.gh = {
enable = true;
};
# allow fontconfig to discover fonts and configurations installed through home.packages # allow fontconfig to discover fonts and configurations installed through home.packages
# Install fonts at system-level, not user-level # Install fonts at system-level, not user-level
fonts.fontconfig.enable = false; fonts.fontconfig.enable = false;
+3 -3
View File
@@ -1,7 +1,7 @@
{pkgs-stable, ...}: { {pkgs, ...}: {
home.packages = with pkgs-stable; [ home.packages = with pkgs; (lib.optionals pkgs.stdenv.isx86_64 [
# https://joplinapp.org/help/ # https://joplinapp.org/help/
joplin # joplin-cli joplin # joplin-cli
joplin-desktop joplin-desktop
]; ]);
} }
+5 -1
View File
@@ -32,7 +32,7 @@
enable = true; enable = true;
# let `xdg-open` to open the url with the correct application. # let `xdg-open` to open the url with the correct application.
defaultApplications = let defaultApplications = let
browser = ["firefox.desktop"]; browser = ["google-chrome.desktop" "firefox.desktop"];
editor = ["nvim.desktop" "Helix.desktop" "code.desktop" "code-insiders.desktop"]; editor = ["nvim.desktop" "Helix.desktop" "code.desktop" "code-insiders.desktop"];
in { in {
"application/json" = browser; "application/json" = browser;
@@ -61,6 +61,8 @@
# https://github.com/microsoft/vscode/issues/146408 # https://github.com/microsoft/vscode/issues/146408
"x-scheme-handler/vscode" = ["code-url-handler.desktop"]; # open `vscode://` url with `code-url-handler.desktop` "x-scheme-handler/vscode" = ["code-url-handler.desktop"]; # open `vscode://` url with `code-url-handler.desktop`
"x-scheme-handler/vscode-insiders" = ["code-insiders-url-handler.desktop"]; # open `vscode-insiders://` url with `code-insiders-url-handler.desktop` "x-scheme-handler/vscode-insiders" = ["code-insiders-url-handler.desktop"]; # open `vscode-insiders://` url with `code-insiders-url-handler.desktop`
"x-scheme-handler/zoommtg" = ["Zoom.desktop"];
# all other unknown schemes will be opened by this default application. # all other unknown schemes will be opened by this default application.
# "x-scheme-handler/unknown" = editor; # "x-scheme-handler/unknown" = editor;
@@ -73,6 +75,8 @@
"image/jpeg" = ["imv-dir.desktop"]; "image/jpeg" = ["imv-dir.desktop"];
"image/png" = ["imv-dir.desktop"]; "image/png" = ["imv-dir.desktop"];
"image/webp" = ["imv-dir.desktop"]; "image/webp" = ["imv-dir.desktop"];
"inode/directory" = ["yazi.desktop"];
}; };
associations.removed = { associations.removed = {
+6
View File
@@ -0,0 +1,6 @@
{pkgs, ...}: {
home.packages = with pkgs; [
zed-editor
code-cursor
];
}
@@ -0,0 +1,19 @@
#-- Startup ----------------------------------------------------
## Fix anyrun
## https://github.com/anyrun-org/anyrun/issues/153
exec-once = ln -s "$XDG_RUNTIME_DIR/hypr" /tmp/hypr
## Launch my daily-used apps at startup
# Terminals
exec-once = foot
exec-once = alacritty
# Browsers
exec-once = firefox
exec-once = google-chrome-stable
# Chat
exec-once = telegram-desktop
# Switch to Terminals & Browsers
exec-once = sleep 3; hyprctl dispatch workspace 1
exec-once = sleep 3; hyprctl dispatch workspace 4
@@ -0,0 +1,5 @@
# -- Fcitx5 input method
windowrule=pseudo,class:^(fcitx)$ # enable this will make fcitx5 works, but fcitx5-configtool will not work!
exec-once=cp ~/.config/fcitx5/profile-bak ~/.config/fcitx5/profile # restore fcitx5 profile managed by nixos
exec-once=fcitx5 -d --replace # start fcitx5 daemon
bind=ALT,E,exec,pkill fcitx5 -9;sleep 1;fcitx5 -d --replace; sleep 1;fcitx5-remote -r
@@ -0,0 +1,139 @@
# https://wiki.hyprland.org/Configuring/Binds/
#
# Format:
# bind = MODS, key, dispatcher, params
#-- Keybindings ----------------------------------------------------
$mod = ALT # use ALT instead of SUPER, to match the mod key with aerospace on darwin.
$files = thunar
$browser = firefox
# SYSTEM
# ============================================================================
# - Drag modifier
# BIND MOD KEY DISPATCHER
bindm = $mod, mouse:272, movewindow
bindm = $mod, mouse:273, resizewindow
# - System
# BIND MOD KEY DISPATCHER VALUE
bind = $mod, q, killactive # kill window
# - Terminal
# BIND MOD KEY DISPATCHER VALUE
bind = $mod, Return, exec, foot
bind = $mod SHIFT, Return, exec, alacritty
bind = $mod, d, exec, anyrun
# - Hardware control
# BIND MOD KEY DISPATCHER VALUE
# https://wiki.archlinux.org/title/WirePlumber
bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
bindel = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindl = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindl = , XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
bind = , XF86MonBrightnessUp, exec, brightnessctl set 5%+
bind = , XF86MonBrightnessDown, exec, brightnessctl set 5%-
bind = , XF86AudioPlay, exec, playerctl play-pause
bind = , XF86AudioNext, exec, playerctl next
bind = , XF86AudioPrev, exec, playerctl previous
bind = , XF86Search, exec, anyrun
bind = , XF86PowerOff, exec, shutdown -h now
# WORKSPACES
# ============================================================================
# - Switch to workspace
# BIND MOD KEY DISPATCHER VALUE
bind = $mod, 1, workspace, 1
bind = $mod, 2, workspace, 2
bind = $mod, 3, workspace, 3
bind = $mod, 4, workspace, 4
bind = $mod, 5, workspace, 5
bind = $mod, 6, workspace, 6
bind = $mod, 7, workspace, 7
bind = $mod, 8, workspace, 8
bind = $mod, 9, workspace, 9
bind = $mod, 0, workspace, 10
# - Move focussed window to workspace
# BIND MOD KEY DISPATCHER VALUE
bind = $mod SHIFT, 1, movetoworkspace, 1
bind = $mod SHIFT, 2, movetoworkspace, 2
bind = $mod SHIFT, 3, movetoworkspace, 3
bind = $mod SHIFT, 4, movetoworkspace, 4
bind = $mod SHIFT, 5, movetoworkspace, 5
bind = $mod SHIFT, 6, movetoworkspace, 6
bind = $mod SHIFT, 7, movetoworkspace, 7
bind = $mod SHIFT, 8, movetoworkspace, 8
bind = $mod SHIFT, 9, movetoworkspace, 9
bind = $mod SHIFT, 0, movetoworkspace, 10
bind = $mod, mouse_down, workspace, e+1
bind = $mod, mouse_up, workspace, e-1
# Window
# ============================================================================
# Move Window
bind = $mod SHIFT, left, movewindow, l
bind = $mod SHIFT, right, movewindow, r
bind = $mod SHIFT, up, movewindow, u
bind = $mod SHIFT, down, movewindow, d
# Focus Window
bind = $mod, left, movefocus, l
bind = $mod, right, movefocus, r
bind = $mod, up, movefocus, u
bind = $mod, down, movefocus, d
# Resize Window
bind = $mod CTRL, left, resizeactive, -20 0
bind = $mod CTRL, right, resizeactive, 20 0
bind = $mod CTRL, up, resizeactive, 0 -20
bind = $mod CTRL, down, resizeactive, 0 20
# MODES
# ============================================================================
# BIND MOD KEY DISPATCHER VALUE
bind = $mod SHIFT, d, submap, mode_displays
bind = $mod SHIFT, a, submap, mode_move
bind = $mod , r, submap, mode_resize
bind = $mod SHIFT, s, submap, mode_screenshot
bind = $mod SHIFT, e, submap, mode_shutdown
# LAYOUT
# ============================================================================
# ## Action // Toggle floating ##
bind = $mod, space, togglefloating
# ## Action // Toggle fullscreen ##
bind = $mod, f, fullscreen
# ## Action // Switch to window stacking ##
# bind = $mod, s, layout stacking
# ## Action // Switch to window tabbing ##
# bind = $mod, w, layout tabbed
# ## Action // Toggle window splitting ##
# bind = $mod, e, layout toggle split
# Misc
# ============================================================================
# -- Screenshots --
bind = , Print, exec, hyprshot -m output -o ~/Pictures/Screenshots -- imv
bind = $mod, Print, exec, hyprshot -m window -o ~/Pictures/Screenshots -- imv
bind = CTRL, Print, exec, hyprshot -m region -o ~/Pictures/Screenshots
# -- Others --
bind = CTRL ALT, l, exec, hyprlock
bind = $mod SHIFT, x, exec, wlogout
bind = $mod, n, exec, nm-connection-editor # need install network-manager-applet
@@ -0,0 +1,143 @@
# WINDOWS AND BORDERS
# ================================================
general {
layout = dwindle
# Cursor
no_focus_fallback = true
# Gaps
gaps_in = 5
gaps_out = 5
# Borders
border_size = 2
col.active_border = 0xff4477ff
col.inactive_border = 0xff2f343f
# Resize
resize_on_border = false
hover_icon_on_border = false
# Allow tearing (you must add a window rule to the window to allow tearing)
allow_tearing = false
}
cursor {
inactive_timeout = 900 # Hide the cursor after n ms (also works on screenlock)
no_warps = false # Never move the cursor automatically
}
ecosystem {
no_donation_nag = true
no_update_news = true
}
misc {
# Allow windows to steal focus - (only xorg apps currently)
focus_on_activate = false
# Enable if you use personalized wallpapers
disable_hyprland_logo = true
}
# VISUAL EFFECTS
# ================================================
# See: https://wiki.hyprland.org/Configuring/Variables
decoration {
# Round borders
rounding = 8
# Shadow
shadow {
enabled = true
range = 4
render_power = 3
color = rgba(1a1a1aee)
}
active_opacity=1.0
inactive_opacity=0.9
fullscreen_opacity=1.0
blur {
enabled=true
new_optimizations = true
size=3 # minimum 1
passes=1 # minimum 1, more passes = more resource intensive.
ignore_opacity=false
}
}
# See: https://wiki.hyprland.org/Configuring/Animations
animations {
enabled = yes
# BEZIERS NAME X0 Y0 X1 Y1
bezier = myBezier, 0.05, 0.9, 0.1, 1.05
# ANIMATION NAME ON SPEED CURVE STYLE
animation = windows, 1, 2, myBezier
animation = windowsOut, 1, 2, default, popin 80%
animation = border, 1, 5, default
animation = fadeIn, 1, 2, default
animation = fadeOut, 1, 2, default
animation = workspaces, 1, 6, default, fade
animation = specialWorkspace, 1, 3, myBezier, slide
}
# LAYOUT DETAILS
# ================================================
# See: https://wiki.hyprland.org/Configuring/Dwindle-Layout/
dwindle {
pseudotile = yes
preserve_split = yes
}
# See: https://wiki.hyprland.org/Configuring/Master-Layout
master {
new_on_top = true
}
# See: https://wiki.hyprland.org/Configuring/Variables
gestures {
workspace_swipe = off
}
#-- Input ----------------------------------------------------
# Configure mouse and touchpad here.
input {
kb_layout=us
kb_variant=
kb_model=
kb_options=
kb_rules=
# mouse focus will not switch to the hovered window unless the mouse crosses a window boundary
follow_mouse=1
mouse_refocus=false
natural_scroll=0
touchpad {
disable_while_typing = true
natural_scroll = 1
clickfinger_behavior = true
tap-to-click = true
tap-and-drag = true
}
force_no_accel=0
# repeat_rate=
# repeat_delay=
numlock_by_default=1
}
# Monitors
# ===================================================
monitor = , preferred, auto, 1
@@ -0,0 +1,63 @@
# You can discover a class with 'hyprctl clients'
# Check the syntax on: https://wiki.hyprland.org/Configuring/Window-Rules/
# WINDOW RULES
# ============================================================================
# Workspace RULE WINDOW
# Terminals
windowrulev2 = workspace 1, class:^(foot)$
windowrulev2 = workspace 2, class:^(Alacritty)$
# Work Chat / Meeting
windowrulev2 = workspace 3, class:^(Zoom Workplace)$
# Browsers
windowrulev2 = workspace 4, class:^(firefox)$
windowrulev2 = workspace 5, class:^(google-chrome)$
# Chat
windowrulev2 = workspace 6, class:^(QQ)$
windowrulev2 = workspace 6, class:^(wechat)$
windowrulev2 = workspace 6, class:^(org.telegram.desktop)$
# Music
# windowrulev2 = workspace 7, class:^(music)$
# Mail / Calendar
windowrulev2 = workspace 8, class:^(thunderbird)$,title:^(.*Reminder)
# File Manager & Image/PDF Viewer
windowrulev2 = workspace 9, class:^(thunder)$
windowrulev2 = workspace 9, class:^(code)$ # VS Code
windowrulev2 = workspace 9, class:^(cursor)$ # Cursor AI Editor
# Other
windowrulev2 = workspace 10, class:^(org.wireshark.Wireshark)$
# Float RULE WINDOW
windowrulev2 = float, class:^(Zoom Workplace)$
windowrulev2 = float, class:^(pulsemixer)$
windowrulev2 = float, class:^(org.pulseaudio.pavucontrol)$
windowrulev2 = float, class:^(nm-connection-editor)$
windowrulev2 = float, class:^(feh|imv|Gpicview)$
windowrulev2 = float, title:^(File Transfer*)$
windowrulev2 = float, title:^(Firefox — Sharing Indicator)$
windowrulev2 = float, class:^(firefox)$,title:^(library)
windowrulev2 = float, title:^(Save File)$
windowrulev2 = float, class:^(blueman-manager)$
windowrulev2 = float, class:^(thunderbird)$,title:^(.*Reminder)
# HOT FIXES
# ============================================================================
# Steam
# Fix: Steam menus disappearing on mouseover
windowrulev2 = stayfocused, title:^()$, class:^(steam)$
windowrulev2 = minsize 1 1, title:^()$, class:^(steam)$
# Fix: Steam starts in a broken position as float window
windowrulev2 = tile, class:^(steam)$
windowrulev2 = fullscreen, class:^(steam)$
# Games
# windowrulev2 = immediate, class:^(steam_app_xxx)$ # game 1
# wlogout
windowrulev2 = float, class:^(wlogout)$
windowrulev2 = move 0 0, class:^(wlogout)$
windowrulev2 = size 100% 100%, class:^(wlogout)$
windowrulev2 = animation slide, class:^(wlogout)$
@@ -0,0 +1,37 @@
general {
lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple instances
before_sleep_cmd = loginctl lock-session # lock before suspend
after_sleep_cmd = hyprctl dispatch dpms on # resume dpms after suspend
ignore_dbus_inhibit = false # whether to ignore dbus-sent idle-inhibit requests
}
# turn off keyboard backlight, comment out this section if you dont have a keyboard backlight.
# listener {
# timeout = 180 # 3 minutes
# on-timeout = brightnessctl -sd rgb:kbd_backlight set 0 # turn off keyboard backlight.
# on-resume = brightnessctl -rd rgb:kbd_backlight # turn on keyboard backlight.
# }
# listener {
# timeout = 600 # 10min.
# on-timeout = brightnessctl -s set 10 # set monitor backlight to minimum, avoid 0 on OLED monitor.
# on-resume = brightnessctl -r # monitor backlight restore.
# }
listener {
timeout = 1200 # 20 minutes
on-timeout = pidof hyprlock || hyprlock # lock screen
on-resume = hyprctl dispatch dpms on # monitor wake up
}
listener {
timeout = 1260 # 21 minutes
on-timeout = hyprctl dispatch dpms off # screen off
on-resume = hyprctl dispatch dpms on && brightnessctl -r # monitor wake up & screen on
}
# listener {
# timeout = 1800 # 30min
# on-timeout = systemctl suspend # suspend pc
# }
-195
View File
@@ -1,195 +0,0 @@
#-- Input ----------------------------------------------------
# Configure mouse and touchpad here.
input {
kb_layout=us
kb_variant=
kb_model=
kb_options=
kb_rules=
# mouse focus will not switch to the hovered window unless the mouse crosses a window boundary
follow_mouse=1
mouse_refocus=false
natural_scroll=0
touchpad {
natural_scroll = 1
}
force_no_accel=0
# repeat_rate=
# repeat_delay=
numlock_by_default=1
}
#-- General ----------------------------------------------------
# General settings like MOD key, Gaps, Colors, etc.
general {
gaps_in=5
gaps_out=10
border_size=4
col.active_border=0xFFB4A1DB
col.inactive_border=0xFF343A40
}
#-- Decoration ----------------------------------------------------
# Decoration settings like Rounded Corners, Opacity, Blur, etc.
decoration {
rounding=8 # Original: rounding=-1
active_opacity=1.0
inactive_opacity=0.9
fullscreen_opacity=1.0
blur {
enabled=true
size=3 # minimum 1
passes=1 # minimum 1, more passes = more resource intensive.
ignore_opacity=false
}
# Your blur "amount" is blur_size * blur_passes, but high blur_size (over around 5-ish) will produce artifacts.
# if you want heavy blur, you need to up the blur_passes.
# the more passes, the more you can up the blur_size without noticing artifacts.
}
#-- Animations ----------------------------------------------------
animations {
enabled=1
# animation=NAME,ONOFF,SPEED,CURVE,STYLE
animation=windows,1,8,default,popin 80%
animation=fadeOut,1,8,default
animation=fadeIn,1,8,default
animation=workspaces,1,8,default
#animation=workspaces,1,6,overshot
}
#-- Dwindle ----------------------------------------------------
dwindle {
pseudotile=0 # enable pseudotiling on dwindle
}
#-- Window Rules ----------------------------------------------------
windowrule=float,foot-float
windowrule=float,yad|nm-connection-editor|pavucontrolk
windowrule=float,xfce-polkit|kvantummanager|qt5ct
windowrule=float,feh|imv|Gpicview|Gimp|nomacs
windowrule=float,VirtualBox Manager|qemu|Qemu-system-x86_64
windowrule=float,xfce4-appfinder
windowrule=float,foot-full
windowrule=move 0 0,foot-full
windowrule=size 100% 100%,foot-full
windowrule=float,wlogout
windowrule=move 0 0,wlogout
windowrule=size 100% 100%,wlogout
windowrule=animation slide,wlogout
#-- Keybindings ----------------------------------------------------
$term = foot
$app_launcher = ~/.config/hypr/scripts/menu
$volume = ~/.config/hypr/scripts/volume
$backlight = ~/.config/hypr/scripts/brightness
$lockscreen = ~/.config/hypr/scripts/lockscreen
$wlogout = ~/.config/hypr/scripts/wlogout
$colorpicker = ~/.config/hypr/scripts/colorpicker
$files = thunar
$browser = firefox
# -- Terminal --
bind=SUPER,Return,exec,$term
# -- App Launcher --
bind=SUPER,D,exec,$app_launcher
# -- Hyprland --
bind=SUPER,Q,killactive,
bind=CTRLALT,Delete,exit,
bind=SUPER,F,fullscreen,
bind=SUPER,Space,togglefloating,
bind=SUPER,S,pseudo,
# -- Misc --
bind=SUPER,N,exec,nm-connection-editor # need install network-manager-applet
bind=SUPER,P,exec,$colorpicker
bind=CTRLALT,L,exec,$lockscreen
bind=SUPERSHIFT,X,exec,$wlogout
# -- Some nice mouse binds --
bindm=SUPER,mouse:272,movewindow
bindm=SUPER,mouse:273,resizewindow
# -- Function keys --
bind=,XF86MonBrightnessUp,exec,$backlight --inc
bind=,XF86MonBrightnessDown,exec,$backlight --dec
bind=,XF86AudioRaiseVolume,exec,$volume --inc
bind=,XF86AudioLowerVolume,exec,$volume --dec
bind=,XF86AudioMute,exec,$volume --toggle
bind=,XF86AudioMicMute,exec,$volume --toggle-mic
bind=,XF86AudioNext,exec,mpc next
bind=,XF86AudioPrev,exec,mpc prev
bind=,XF86AudioPlay,exec,mpc toggle
bind=,XF86AudioStop,exec,mpc stop
# -- Screenshots --
bind=,Print,exec,hyprshot -m output -o ~/Pictures/Screenshots -- imv
bind=SUPER,Print,exec,hyprshot -m window -o ~/Pictures/Screenshots -- imv
# flameshot do not recognize hyprland as a wayland compositor, so we set it to sway here
bind=CTRL,Print,exec,XDG_CURRENT_DESKTOP=sway flameshot gui --raw -p ~/Pictures/Screenshots | wl-copy
# bind=CTRL,Print,exec,hyprshot -m region -o ~/Pictures/Screenshots -- imv
# Focus
bind=SUPER,left,movefocus,l
bind=SUPER,right,movefocus,r
bind=SUPER,up,movefocus,u
bind=SUPER,down,movefocus,d
# Move
bind=SUPERSHIFT,left,movewindow,l
bind=SUPERSHIFT,right,movewindow,r
bind=SUPERSHIFT,up,movewindow,u
bind=SUPERSHIFT,down,movewindow,d
# Resize
bind=SUPERCTRL,left,resizeactive,-20 0
bind=SUPERCTRL,right,resizeactive,20 0
bind=SUPERCTRL,up,resizeactive,0 -20
bind=SUPERCTRL,down,resizeactive,0 20
# Workspaces
bind=SUPER,1,workspace,1
bind=SUPER,2,workspace,2
bind=SUPER,3,workspace,3
bind=SUPER,4,workspace,4
bind=SUPER,5,workspace,5
bind=SUPER,6,workspace,6
bind=SUPER,7,workspace,7
bind=SUPER,8,workspace,8
bind=SUPER,9,workspace,9
bind=SUPER,0,workspace,10
# Send to Workspaces
bind=SUPERSHIFT,1,movetoworkspace,1
bind=SUPERSHIFT,2,movetoworkspace,2
bind=SUPERSHIFT,3,movetoworkspace,3
bind=SUPERSHIFT,4,movetoworkspace,4
bind=SUPERSHIFT,5,movetoworkspace,5
bind=SUPERSHIFT,6,movetoworkspace,6
bind=SUPERSHIFT,7,movetoworkspace,7
bind=SUPERSHIFT,8,movetoworkspace,8
bind=SUPERSHIFT,9,movetoworkspace,9
bind=SUPERSHIFT,0,movetoworkspace,10
bind=SUPER,mouse_down,workspace,e+1
bind=SUPER,mouse_up,workspace,e-1
#-- Startup ----------------------------------------------------
exec-once=~/.config/hypr/scripts/startup
# -- Fcitx5 input method
windowrule=pseudo,fcitx # enable this will make fcitx5 works, but fcitx5-configtool will not work!
exec-once=cp ~/.config/fcitx5/profile-bak ~/.config/fcitx5/profile # restore fcitx5 profile managed by nixos
exec-once=fcitx5 -d --replace # start fcitx5 daemon
bind=ALT,E,exec,pkill fcitx5 -9;sleep 1;fcitx5 -d --replace; sleep 1;fcitx5-remote -r
+1 -6
View File
@@ -12,7 +12,7 @@ on-touch=dismiss
on-notify=exec mpv /usr/share/sounds/freedesktop/stereo/message.oga on-notify=exec mpv /usr/share/sounds/freedesktop/stereo/message.oga
# STYLE OPTIONS # STYLE OPTIONS
font=JetBrains Mono 10 font=Maple Mono NF CN
width=300 width=300
height=100 height=100
margin=10 margin=10
@@ -49,8 +49,3 @@ default-timeout=5000
border-color=#f38ba8 border-color=#f38ba8
text-color=#f38ba8 text-color=#f38ba8
default-timeout=0 default-timeout=0
[category=mpd]
border-color=#f9e2af
default-timeout=2000
group-by=category
-17
View File
@@ -1,17 +0,0 @@
# Recommended location for database
db_file "~/.config/mpd/database"
# If running mpd using systemd, delete this line to log directly to systemd.
log_file "syslog"
# The music directory is by default the XDG directory, uncomment to amend and choose a different directory
#music_directory "~/Music"
# Uncomment to refresh the database whenever files in the music_directory are changed
#auto_update "yes"
# Uncomment to enable the functionalities
#playlist_directory "~/.config/mpd/playlists"
#pid_file "~/.config/mpd/pid"
#state_file "~/.local/state/mpd/state"
#sticker_file "~/.config/mpd/sticker.sql"
@@ -1,54 +0,0 @@
#!/usr/bin/env bash
## Script To Manage Brightness (in Wayland).
iDIR="$HOME/.config/hypr/mako/icons"
# Get brightness
get_backlight() {
LIGHT=$(printf "%.0f\n" $(light -G))
echo "${LIGHT}%"
}
# Get icons
get_icon() {
backlight="$(get_backlight)"
current="${backlight%%%}"
if [[ ("$current" -ge "0") && ("$current" -le "20") ]]; then
icon="$iDIR/brightness-20.png"
elif [[ ("$current" -ge "20") && ("$current" -le "40") ]]; then
icon="$iDIR/brightness-40.png"
elif [[ ("$current" -ge "40") && ("$current" -le "60") ]]; then
icon="$iDIR/brightness-60.png"
elif [[ ("$current" -ge "60") && ("$current" -le "80") ]]; then
icon="$iDIR/brightness-80.png"
elif [[ ("$current" -ge "80") && ("$current" -le "100") ]]; then
icon="$iDIR/brightness-100.png"
fi
}
# Notify
notify_user() {
notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i "$icon" "Brightness : $(get_backlight)"
}
# Increase brightness
inc_backlight() {
light -A 5 && get_icon && notify_user
}
# Decrease brightness
dec_backlight() {
light -U 5 && get_icon && notify_user
}
# Execute accordingly
if [[ "$1" == "--get" ]]; then
get_backlight
elif [[ "$1" == "--inc" ]]; then
inc_backlight
elif [[ "$1" == "--dec" ]]; then
dec_backlight
else
get_backlight
fi
@@ -1,20 +0,0 @@
#!/usr/bin/env bash
## Simple Script To Pick Color Quickly.
color=$(grim -g "$(slurp -b 1B1F2800 -p)" -t ppm - | convert - -format '%[pixel:p{0,0}]' txt:- | tail -n1 | cut -d' ' -f4)
image=/tmp/${color}.png
main() {
if [[ "$color" ]]; then
# copy color code to clipboard
echo $color | tr -d "\n" | wl-copy
# generate preview
convert -size 48x48 xc:"$color" ${image}
# notify about it
notify-send -h string:x-canonical-private-synchronous:sys-notify -u low -i ${image} "$color, copied to clipboard."
fi
}
# Run the script
main
@@ -1,10 +0,0 @@
#!/usr/bin/env bash
# Times the screen off and puts it to background
swayidle \
timeout 300 'swaymsg "output * power off"' \
resume 'swaymsg "output * power on"' &
# Locks the screen immediately
swaylock
# Kills last background task so idle timer doesn't keep running
kill %%
@@ -1,7 +0,0 @@
#!/usr/bin/env bash
if [[ ! $(pidof anyrun) ]]; then
anyrun
else
pkill anyrun
fi
@@ -1,9 +0,0 @@
#!/usr/bin/env bash
## launch mako with alt config
CONFIG="$HOME/.config/hypr/mako/config"
if [[ ! $(pidof mako) ]]; then
mako --config ${CONFIG}
fi
@@ -1,28 +0,0 @@
#!/usr/bin/env bash
## Fix anyrun
## https://github.com/anyrun-org/anyrun/issues/153
ln -s $XDG_RUNTIME_DIR/hypr /tmp/hypr
## Autostart Programs
# Kill already running process
_ps=(waybar mako mpd)
for _prs in "${_ps[@]}"; do
if [[ $(pidof ${_prs}) ]]; then
killall -9 ${_prs}
fi
done
# Set wallpaper via a wallpaper.service
# it will by start by home-manager automatically, do not need to restart it here.
# systemctl --user restart wallpaper.service
# Launch notification daemon (mako)
~/.config/hypr/scripts/notifications &
# Launch statusbar (waybar)
~/.config/hypr/scripts/statusbar &
# Start mpd
exec mpd &

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