mirror of
https://github.com/ryan4yin/nix-config.git
synced 2026-07-09 14:15:12 +02:00
feat: simplify flake.nix
This commit is contained in:
+2
-1
@@ -1,2 +1,3 @@
|
|||||||
result
|
result
|
||||||
result/
|
result/
|
||||||
|
.DS_Store
|
||||||
|
|||||||
@@ -13,13 +13,13 @@
|
|||||||
i3:
|
i3:
|
||||||
nixos-rebuild switch --flake .#ai_i3 --use-remote-sudo
|
nixos-rebuild switch --flake .#ai_i3 --use-remote-sudo
|
||||||
|
|
||||||
hyprland:
|
hypr:
|
||||||
nixos-rebuild switch --flake .#ai_hyprland --use-remote-sudo
|
nixos-rebuild switch --flake .#ai_hyprland --use-remote-sudo
|
||||||
|
|
||||||
debug_i3:
|
i3-debug:
|
||||||
nixos-rebuild switch --flake .#ai_i3 --use-remote-sudo --show-trace --verbose
|
nixos-rebuild switch --flake .#ai_i3 --use-remote-sudo --show-trace --verbose
|
||||||
|
|
||||||
debug_hyprland:
|
hypr-debug:
|
||||||
nixos-rebuild switch --flake .#ai_hyprland --use-remote-sudo --show-trace --verbose
|
nixos-rebuild switch --flake .#ai_hyprland --use-remote-sudo --show-trace --verbose
|
||||||
|
|
||||||
update:
|
update:
|
||||||
@@ -49,11 +49,11 @@ bright:
|
|||||||
darwin-set-proxy:
|
darwin-set-proxy:
|
||||||
sudo python3 scripts/darwin_set_proxy.py
|
sudo python3 scripts/darwin_set_proxy.py
|
||||||
|
|
||||||
darwin: darwin-set-proxy
|
ha: darwin-set-proxy
|
||||||
nix build .#darwinConfigurations.harmonica.system
|
nix build .#darwinConfigurations.harmonica.system
|
||||||
./result/sw/bin/darwin-rebuild switch --flake .
|
./result/sw/bin/darwin-rebuild switch --flake .
|
||||||
|
|
||||||
darwin-debug: darwin-set-proxy
|
ha-debug: darwin-set-proxy
|
||||||
nix build .#darwinConfigurations.harmonica.system --show-trace --verbose
|
nix build .#darwinConfigurations.harmonica.system --show-trace --verbose
|
||||||
./result/sw/bin/darwin-rebuild switch --flake .#harmonica --show-trace --verbose
|
./result/sw/bin/darwin-rebuild switch --flake .#harmonica --show-trace --verbose
|
||||||
|
|
||||||
|
|||||||
@@ -58,17 +58,17 @@ sudo nixos-rebuild switch --flake .
|
|||||||
make i3
|
make i3
|
||||||
|
|
||||||
# or we can deploy with details
|
# or we can deploy with details
|
||||||
make debug_i3
|
make i3-debug
|
||||||
```
|
```
|
||||||
|
|
||||||
For MacOS, use the following commands:
|
For MacOS, use the following commands:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# deploy the darwin configuration(harmonicia)
|
# deploy the darwin configuration(harmonicia)
|
||||||
make darwin
|
make ha
|
||||||
|
|
||||||
# deploy with details
|
# deploy with details
|
||||||
make darwin-debug
|
make ha-debug
|
||||||
```
|
```
|
||||||
|
|
||||||
## Install Apps from Flatpak
|
## Install Apps from Flatpak
|
||||||
|
|||||||
Generated
+79
-56
@@ -60,26 +60,6 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"darwin_2": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": [
|
|
||||||
"nixpkgs-darwin"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1689516967,
|
|
||||||
"narHash": "sha256-sFAa33wkQHanmij/uhfGduIDK8z4dJAita/rK6u9pvE=",
|
|
||||||
"owner": "lnl7",
|
|
||||||
"repo": "nix-darwin",
|
|
||||||
"rev": "61662a63bfe1726588c1da6b412df86d8ca94d63",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "lnl7",
|
|
||||||
"repo": "nix-darwin",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"flake-compat": {
|
"flake-compat": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1688025799,
|
"lastModified": 1688025799,
|
||||||
@@ -185,16 +165,16 @@
|
|||||||
"xdph": "xdph"
|
"xdph": "xdph"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1689160271,
|
"lastModified": 1689766295,
|
||||||
"narHash": "sha256-mEKF6Wcx+wSF/eos/91A7LxhFLDYhSnQnLpwZF13ntg=",
|
"narHash": "sha256-2OuPIcw2WOUc/zjrH7JZHWe1byuMjqP6Zz7D4qsi10s=",
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"repo": "Hyprland",
|
"repo": "Hyprland",
|
||||||
"rev": "5e577acf516b80173f695a458c2cc188a4d64560",
|
"rev": "b08b72358ad549fd066e5be0fc3aa4c9df367607",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
"owner": "hyprwm",
|
"owner": "hyprwm",
|
||||||
"ref": "v0.27.0",
|
"ref": "v0.27.2",
|
||||||
"repo": "Hyprland",
|
"repo": "Hyprland",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
@@ -226,11 +206,11 @@
|
|||||||
"nixpkgs-lib": "nixpkgs-lib"
|
"nixpkgs-lib": "nixpkgs-lib"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1689509371,
|
"lastModified": 1690114105,
|
||||||
"narHash": "sha256-ESRIO7E8PfKF5cL2ymdrQrvj8LORET24Wbpl0XMzhog=",
|
"narHash": "sha256-QOY9FXZ4pWjlDPdZKkLNNMHS+ct1+4wu8lrcua7+chw=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "lib-aggregate",
|
"repo": "lib-aggregate",
|
||||||
"rev": "d75813d1b691b829a5b459bc676e2b1d71d2c15e",
|
"rev": "d923660039d7e793712ba93f633778046f5e6087",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -256,17 +236,38 @@
|
|||||||
"url": "ssh://git@github.com/ryan4yin/nix-secrets.git"
|
"url": "ssh://git@github.com/ryan4yin/nix-secrets.git"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"nix-darwin": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs-darwin"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1690368313,
|
||||||
|
"narHash": "sha256-1MG/pU2riawknpYaTfaynKJPaIKFnQiYTTCFJAjXM5Q=",
|
||||||
|
"owner": "lnl7",
|
||||||
|
"repo": "nix-darwin",
|
||||||
|
"rev": "94212ebe32948471a1aa11baa5c576ce60d54589",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "lnl7",
|
||||||
|
"repo": "nix-darwin",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"nix-eval-jobs": {
|
"nix-eval-jobs": {
|
||||||
"inputs": {
|
"inputs": {
|
||||||
"flake-parts": "flake-parts",
|
"flake-parts": "flake-parts",
|
||||||
"nixpkgs": "nixpkgs_4"
|
"nixpkgs": "nixpkgs_4",
|
||||||
|
"treefmt-nix": "treefmt-nix"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1689318580,
|
"lastModified": 1689903701,
|
||||||
"narHash": "sha256-ccMZzE0Du6I7RtAuDZbERsBZRGnFcwXTAnSQqGd7mOY=",
|
"narHash": "sha256-kW1Rke5wLqw8XHVyiWw7qIKZR911GCsbOg5SkgKH1Uc=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nix-eval-jobs",
|
"repo": "nix-eval-jobs",
|
||||||
"rev": "f88571cfc9132e8f2768aa41d57f5f471941d4b6",
|
"rev": "fcaf7773e3a6713b78dacfd442339a96cfab405f",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -298,11 +299,11 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1689558522,
|
"lastModified": 1690133435,
|
||||||
"narHash": "sha256-diNpqSRebzvT3P4fLX+40VWZbf2H2hraJDDdg5NJSj0=",
|
"narHash": "sha256-YNZiefETggroaTLsLJG2M+wpF0pJPwiauKG4q48ddNU=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nixos-generators",
|
"repo": "nixos-generators",
|
||||||
"rev": "11c98929963a95ad3830960a9216d00e2f792502",
|
"rev": "b1171de4d362c022130c92d7c8adc4bf2b83d586",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -329,11 +330,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-darwin": {
|
"nixpkgs-darwin": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1689503327,
|
"lastModified": 1690298576,
|
||||||
"narHash": "sha256-qVwzYLA8oT2oWNDXO0A3bZHOhoPOihIB9T677+Hor1E=",
|
"narHash": "sha256-RLgIGS04t4Rd0viqsx2e9dGViKB6nVsGmO11EagCWmM=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "f64b9738da8e86195766147e9752c67fccee006c",
|
"rev": "88f63d511092e95d28e9a7c98534595c53de1048",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -345,11 +346,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-lib": {
|
"nixpkgs-lib": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1689469483,
|
"lastModified": 1690073998,
|
||||||
"narHash": "sha256-2SBhY7rZQ/iNCxe04Eqxlz9YK9KgbaTMBssq3/BgdWY=",
|
"narHash": "sha256-qmK+VMvflwUzQSQl4XVP5kbodYLAKThNzq6mZrOM2Mo=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nixpkgs.lib",
|
"repo": "nixpkgs.lib",
|
||||||
"rev": "02fea408f27186f139153e1ae88f8ab2abd9c22c",
|
"rev": "d0545f65611a9625f161d0ff02627bc364e024f6",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -360,11 +361,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs-unstable": {
|
"nixpkgs-unstable": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1689534811,
|
"lastModified": 1690179384,
|
||||||
"narHash": "sha256-jnSUdzD/414d94plCyNlvTJJtiTogTep6t7ZgIKIHiE=",
|
"narHash": "sha256-+arbgqFTAtoeKtepW9wCnA0njCOyoiDFyl0Q0SBSOtE=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "6cee3b5893090b0f5f0a06b4cf42ca4e60e5d222",
|
"rev": "b12803b6d90e2e583429bb79b859ca53c348b39a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -382,11 +383,11 @@
|
|||||||
"nixpkgs": "nixpkgs_5"
|
"nixpkgs": "nixpkgs_5"
|
||||||
},
|
},
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1689585449,
|
"lastModified": 1690384532,
|
||||||
"narHash": "sha256-D6TL+9EbDcGLNmpneuGXnonjNWlS563TOoghU/W/k88=",
|
"narHash": "sha256-Nc9d6GPajVdSj02aBDkAAq93fdLUtRXP9EIfwKn3Uq4=",
|
||||||
"owner": "nix-community",
|
"owner": "nix-community",
|
||||||
"repo": "nixpkgs-wayland",
|
"repo": "nixpkgs-wayland",
|
||||||
"rev": "97941d1936213031ae7ca948ba27aa1bd141a630",
|
"rev": "729cabdcc73e84963751dd65163048e9ff1a1a75",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -413,11 +414,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_3": {
|
"nixpkgs_3": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1689503327,
|
"lastModified": 1690271650,
|
||||||
"narHash": "sha256-qVwzYLA8oT2oWNDXO0A3bZHOhoPOihIB9T677+Hor1E=",
|
"narHash": "sha256-qwdsW8DBY1qH+9luliIH7VzgwvL+ZGI3LZWC0LTiDMI=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "f64b9738da8e86195766147e9752c67fccee006c",
|
"rev": "6dc93f0daec55ee2f441da385aaf143863e3d671",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -445,11 +446,11 @@
|
|||||||
},
|
},
|
||||||
"nixpkgs_5": {
|
"nixpkgs_5": {
|
||||||
"locked": {
|
"locked": {
|
||||||
"lastModified": 1689534811,
|
"lastModified": 1690179384,
|
||||||
"narHash": "sha256-jnSUdzD/414d94plCyNlvTJJtiTogTep6t7ZgIKIHiE=",
|
"narHash": "sha256-+arbgqFTAtoeKtepW9wCnA0njCOyoiDFyl0Q0SBSOtE=",
|
||||||
"owner": "nixos",
|
"owner": "nixos",
|
||||||
"repo": "nixpkgs",
|
"repo": "nixpkgs",
|
||||||
"rev": "6cee3b5893090b0f5f0a06b4cf42ca4e60e5d222",
|
"rev": "b12803b6d90e2e583429bb79b859ca53c348b39a",
|
||||||
"type": "github"
|
"type": "github"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
@@ -463,10 +464,10 @@
|
|||||||
"inputs": {
|
"inputs": {
|
||||||
"agenix": "agenix",
|
"agenix": "agenix",
|
||||||
"astronvim": "astronvim",
|
"astronvim": "astronvim",
|
||||||
"darwin": "darwin_2",
|
|
||||||
"home-manager": "home-manager_2",
|
"home-manager": "home-manager_2",
|
||||||
"hyprland": "hyprland",
|
"hyprland": "hyprland",
|
||||||
"mysecrets": "mysecrets",
|
"mysecrets": "mysecrets",
|
||||||
|
"nix-darwin": "nix-darwin",
|
||||||
"nixos-generators": "nixos-generators",
|
"nixos-generators": "nixos-generators",
|
||||||
"nixpkgs": "nixpkgs_3",
|
"nixpkgs": "nixpkgs_3",
|
||||||
"nixpkgs-darwin": "nixpkgs-darwin",
|
"nixpkgs-darwin": "nixpkgs-darwin",
|
||||||
@@ -489,15 +490,37 @@
|
|||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"treefmt-nix": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": [
|
||||||
|
"nixpkgs-wayland",
|
||||||
|
"nix-eval-jobs",
|
||||||
|
"nixpkgs"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1689620039,
|
||||||
|
"narHash": "sha256-BtNwghr05z7k5YMdq+6nbue+nEalvDepuA7qdQMAKoQ=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"rev": "719c2977f958c41fa60a928e2fbc50af14844114",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "treefmt-nix",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
"wlroots": {
|
"wlroots": {
|
||||||
"flake": false,
|
"flake": false,
|
||||||
"locked": {
|
"locked": {
|
||||||
"host": "gitlab.freedesktop.org",
|
"host": "gitlab.freedesktop.org",
|
||||||
"lastModified": 1686753331,
|
"lastModified": 1689611045,
|
||||||
"narHash": "sha256-KovjVFwcuoUO0eu/UiWrnD3+m/K+SHSAVIz4xF9K1XA=",
|
"narHash": "sha256-3RTOlQabkNetQ4O4UzSf57JPco9VGVHhSU1ls5uKBeE=",
|
||||||
"owner": "wlroots",
|
"owner": "wlroots",
|
||||||
"repo": "wlroots",
|
"repo": "wlroots",
|
||||||
"rev": "7e7633abf09b362d0bad9e3fc650fd692369291d",
|
"rev": "7791ffe0584c4ac13c170e1661ce33bdbd4a9b9e",
|
||||||
"type": "gitlab"
|
"type": "gitlab"
|
||||||
},
|
},
|
||||||
"original": {
|
"original": {
|
||||||
|
|||||||
@@ -2,15 +2,15 @@
|
|||||||
description = "NixOS & macOS configuration of Ryan Yin";
|
description = "NixOS & macOS configuration of Ryan Yin";
|
||||||
|
|
||||||
##################################################################################################################
|
##################################################################################################################
|
||||||
#
|
#
|
||||||
# Want to know Nix in details? Looking for a beginner-friendly tutorial?
|
# Want to know Nix in details? Looking for a beginner-friendly tutorial?
|
||||||
# Check out https://github.com/ryan4yin/nixos-and-flakes-book !
|
# Check out https://github.com/ryan4yin/nixos-and-flakes-book !
|
||||||
#
|
#
|
||||||
##################################################################################################################
|
##################################################################################################################
|
||||||
|
|
||||||
# the nixConfig here only affects the flake itself, not the system configuration!
|
# the nixConfig here only affects the flake itself, not the system configuration!
|
||||||
nixConfig = {
|
nixConfig = {
|
||||||
experimental-features = [ "nix-command" "flakes" ];
|
experimental-features = ["nix-command" "flakes"];
|
||||||
|
|
||||||
substituters = [
|
substituters = [
|
||||||
# replace official cache with a mirror located in China
|
# replace official cache with a mirror located in China
|
||||||
@@ -30,7 +30,6 @@
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
# This is the standard format for flake.nix. `inputs` are the dependencies of the flake,
|
# This is the standard format for flake.nix. `inputs` are the dependencies of the flake,
|
||||||
# Each item in `inputs` will be passed as a parameter to the `outputs` function after being pulled and built.
|
# Each item in `inputs` will be passed as a parameter to the `outputs` function after being pulled and built.
|
||||||
inputs = {
|
inputs = {
|
||||||
@@ -43,7 +42,7 @@
|
|||||||
|
|
||||||
# for macos
|
# for macos
|
||||||
nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-23.05-darwin";
|
nixpkgs-darwin.url = "github:nixos/nixpkgs/nixpkgs-23.05-darwin";
|
||||||
darwin = {
|
nix-darwin = {
|
||||||
url = "github:lnl7/nix-darwin";
|
url = "github:lnl7/nix-darwin";
|
||||||
inputs.nixpkgs.follows = "nixpkgs-darwin";
|
inputs.nixpkgs.follows = "nixpkgs-darwin";
|
||||||
};
|
};
|
||||||
@@ -58,7 +57,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
# modern window compositor
|
# modern window compositor
|
||||||
hyprland.url = "github:hyprwm/Hyprland/v0.27.0";
|
hyprland.url = "github:hyprwm/Hyprland/v0.27.2";
|
||||||
# community wayland nixpkgs
|
# community wayland nixpkgs
|
||||||
nixpkgs-wayland.url = "github:nix-community/nixpkgs-wayland";
|
nixpkgs-wayland.url = "github:nix-community/nixpkgs-wayland";
|
||||||
|
|
||||||
@@ -72,216 +71,156 @@
|
|||||||
agenix.url = "github:ryantm/agenix/0d8c5325fc81daf00532e3e26c6752f7bcde1143";
|
agenix.url = "github:ryantm/agenix/0d8c5325fc81daf00532e3e26c6752f7bcde1143";
|
||||||
|
|
||||||
# AstroNvim is an aesthetic and feature-rich neovim config.
|
# AstroNvim is an aesthetic and feature-rich neovim config.
|
||||||
astronvim = { url = "github:AstroNvim/AstroNvim/v3.33.3"; flake = false; };
|
astronvim = {
|
||||||
|
url = "github:AstroNvim/AstroNvim/v3.33.3";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
|
|
||||||
# my private secrets, it's a private repository, you need to replace it with your own.
|
# my private secrets, it's a private repository, you need to replace it with your own.
|
||||||
# use ssh protocol to authenticate via ssh-agent/ssh-key, and shallow clone to save time
|
# use ssh protocol to authenticate via ssh-agent/ssh-key, and shallow clone to save time
|
||||||
mysecrets = { url = "git+ssh://git@github.com/ryan4yin/nix-secrets.git?shallow=1"; flake = false; };
|
mysecrets = {
|
||||||
|
url = "git+ssh://git@github.com/ryan4yin/nix-secrets.git?shallow=1";
|
||||||
|
flake = false;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
# The `outputs` function will return all the build results of the flake.
|
# The `outputs` function will return all the build results of the flake.
|
||||||
# A flake can have many use cases and different types of outputs,
|
# A flake can have many use cases and different types of outputs,
|
||||||
# parameters in `outputs` are defined in `inputs` and can be referenced by their names.
|
# parameters in `outputs` are defined in `inputs` and can be referenced by their names.
|
||||||
# However, `self` is an exception, this special parameter points to the `outputs` itself (self-reference)
|
# However, `self` is an exception, this special parameter points to the `outputs` itself (self-reference)
|
||||||
# The `@` syntax here is used to alias the attribute set of the inputs's parameter, making it convenient to use inside the function.
|
# The `@` syntax here is used to alias the attribute set of the inputs's parameter, making it convenient to use inside the function.
|
||||||
outputs =
|
outputs = inputs @ {
|
||||||
inputs@{ self
|
self,
|
||||||
, nixpkgs
|
nixpkgs,
|
||||||
, darwin
|
nixpkgs-unstable,
|
||||||
, home-manager
|
nix-darwin,
|
||||||
, nixos-generators
|
home-manager,
|
||||||
, ...
|
nixos-generators,
|
||||||
}:
|
...
|
||||||
|
}: let
|
||||||
let
|
username = "ryan";
|
||||||
x64_system = "x86_64-linux";
|
x64_system = "x86_64-linux";
|
||||||
x64_specialArgs = {
|
x64_darwin = "x86_64-darwin";
|
||||||
# use unstable branch for some packages to get the latest updates
|
allSystems = [x64_system x64_darwin];
|
||||||
pkgs-unstable = import inputs.nixpkgs-unstable {
|
|
||||||
system = x64_system; # refer the `system` parameter form outer scope recursively
|
nixosSystem = import ./lib/nixosSystem.nix;
|
||||||
# To use chrome, we need to allow the installation of non-free software
|
macosSystem = import ./lib/macosSystem.nix;
|
||||||
config.allowUnfree = true;
|
|
||||||
};
|
# 星野 アイ, Hoshino Ai
|
||||||
} // inputs;
|
idol_ai_modules_i3 = {
|
||||||
# 星野 アイ, Hoshino Ai
|
nixos-modules = [
|
||||||
idol_ai_modules_i3 = [
|
|
||||||
./hosts/idols/ai
|
./hosts/idols/ai
|
||||||
./modules/nixos/i3.nix
|
./modules/nixos/i3.nix
|
||||||
|
|
||||||
home-manager.nixosModules.home-manager
|
|
||||||
{
|
|
||||||
home-manager.useGlobalPkgs = true;
|
|
||||||
home-manager.useUserPackages = true;
|
|
||||||
|
|
||||||
home-manager.extraSpecialArgs = x64_specialArgs;
|
|
||||||
home-manager.users.ryan = import ./home/linux/desktop-i3.nix;
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
idol_ai_modules_hyprland = [
|
home-module = import ./home/linux/desktop-i3.nix;
|
||||||
|
};
|
||||||
|
idol_ai_modules_hyprland = {
|
||||||
|
nixos-modules = [
|
||||||
./hosts/idols/ai
|
./hosts/idols/ai
|
||||||
./modules/nixos/hyprland.nix
|
./modules/nixos/hyprland.nix
|
||||||
|
|
||||||
home-manager.nixosModules.home-manager
|
|
||||||
{
|
|
||||||
home-manager.useGlobalPkgs = true;
|
|
||||||
home-manager.useUserPackages = true;
|
|
||||||
|
|
||||||
home-manager.extraSpecialArgs = x64_specialArgs;
|
|
||||||
home-manager.users.ryan = import ./home/linux/desktop-hyprland.nix;
|
|
||||||
}
|
|
||||||
];
|
];
|
||||||
# 星野 愛久愛海, Hoshino Akuamarin
|
home-module = import ./home/linux/desktop-hyprland.nix;
|
||||||
idol_aquamarine_modules = [
|
|
||||||
./hosts/idols/aquamarine
|
|
||||||
|
|
||||||
home-manager.nixosModules.home-manager
|
|
||||||
{
|
|
||||||
home-manager.useGlobalPkgs = true;
|
|
||||||
home-manager.useUserPackages = true;
|
|
||||||
|
|
||||||
home-manager.extraSpecialArgs = x64_specialArgs;
|
|
||||||
home-manager.users.ryan = import ./home/linux/server.nix;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
# 星野 瑠美衣, Hoshino Rubii
|
|
||||||
idol_ruby_modules = [
|
|
||||||
./hosts/idols/ruby
|
|
||||||
|
|
||||||
home-manager.nixosModules.home-manager
|
|
||||||
{
|
|
||||||
home-manager.useGlobalPkgs = true;
|
|
||||||
home-manager.useUserPackages = true;
|
|
||||||
|
|
||||||
home-manager.extraSpecialArgs = x64_specialArgs;
|
|
||||||
home-manager.users.ryan = import ./home/linux/server.nix;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
# 有馬 かな, Arima Kana
|
|
||||||
idol_kana_modules = [
|
|
||||||
./hosts/idols/kana
|
|
||||||
|
|
||||||
home-manager.nixosModules.home-manager
|
|
||||||
{
|
|
||||||
home-manager.useGlobalPkgs = true;
|
|
||||||
home-manager.useUserPackages = true;
|
|
||||||
|
|
||||||
home-manager.extraSpecialArgs = x64_specialArgs;
|
|
||||||
home-manager.users.ryan = import ./home/linux/server.nix;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
in {
|
|
||||||
nixosConfigurations = let system = x64_system; specialArgs = x64_specialArgs; in {
|
|
||||||
ai_i3 = nixpkgs.lib.nixosSystem { # ai with i3 window manager
|
|
||||||
inherit system specialArgs;
|
|
||||||
modules = idol_ai_modules_i3;
|
|
||||||
};
|
|
||||||
ai_hyprland = nixpkgs.lib.nixosSystem { # ai with hyprland compositor
|
|
||||||
inherit system specialArgs;
|
|
||||||
modules = idol_ai_modules_hyprland;
|
|
||||||
};
|
|
||||||
|
|
||||||
aquamarine = nixpkgs.lib.nixosSystem {
|
|
||||||
inherit system specialArgs;
|
|
||||||
modules = idol_aquamarine_modules;
|
|
||||||
};
|
|
||||||
|
|
||||||
ruby = nixpkgs.lib.nixosSystem {
|
|
||||||
inherit system specialArgs;
|
|
||||||
modules = idol_ruby_modules;
|
|
||||||
};
|
|
||||||
|
|
||||||
kana = nixpkgs.lib.nixosSystem {
|
|
||||||
inherit system specialArgs;
|
|
||||||
modules = idol_kana_modules;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# macOS's configuration, for work.
|
|
||||||
darwinConfigurations."harmonica" = let
|
|
||||||
system = "x86_64-darwin";
|
|
||||||
specialArgs = {
|
|
||||||
# use unstable branch for some packages to get the latest updates
|
|
||||||
pkgs-unstable = import inputs.nixpkgs-unstable {
|
|
||||||
inherit system; # refer the `system` parameter form outer scope recursively
|
|
||||||
# To use chrome, we need to allow the installation of non-free software
|
|
||||||
config.allowUnfree = true;
|
|
||||||
};
|
|
||||||
} // inputs;
|
|
||||||
in
|
|
||||||
darwin.lib.darwinSystem {
|
|
||||||
inherit system specialArgs;
|
|
||||||
modules = [
|
|
||||||
./hosts/harmonica
|
|
||||||
|
|
||||||
home-manager.darwinModules.home-manager
|
|
||||||
{
|
|
||||||
home-manager.useGlobalPkgs = true;
|
|
||||||
home-manager.useUserPackages = true;
|
|
||||||
|
|
||||||
home-manager.extraSpecialArgs = specialArgs;
|
|
||||||
home-manager.users.ryan = import ./home/darwin;
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
formatter = {
|
|
||||||
# format the nix code in this flake
|
|
||||||
# alejandra is a nix formatter with a beautiful output
|
|
||||||
x86_64-linux = nixpkgs.legacyPackages.x86_64-linux.alejandra;
|
|
||||||
x86_64-darwin = nixpkgs.legacyPackages.x86_64-darwin.alejandra;
|
|
||||||
};
|
|
||||||
|
|
||||||
packages.x86_64-linux =
|
|
||||||
# take images for idols
|
|
||||||
# https://github.com/nix-community/nixos-generators
|
|
||||||
let system = x64_system; specialArgs = x64_specialArgs; in {
|
|
||||||
# Hoshino Ai is a physical machine, so we need to generate an iso image for it.
|
|
||||||
ai_i3 = nixos-generators.nixosGenerate { # ai with i3 window manager
|
|
||||||
inherit system specialArgs;
|
|
||||||
modules = idol_ai_modules_i3;
|
|
||||||
format = "iso";
|
|
||||||
};
|
|
||||||
ai_hyprland = nixos-generators.nixosGenerate { # ai with hyprland compositor
|
|
||||||
inherit system specialArgs;
|
|
||||||
modules = idol_ai_modules_hyprland;
|
|
||||||
format = "iso";
|
|
||||||
};
|
|
||||||
# Hoshino Aquamarine is a virtual machine running on Proxmox VE.
|
|
||||||
aquamarine = nixos-generators.nixosGenerate {
|
|
||||||
inherit system specialArgs;
|
|
||||||
modules = idol_aquamarine_modules ++ [
|
|
||||||
({config, ...}: {
|
|
||||||
proxmox.qemuConf.name = "aquamarine-nixos-${config.system.nixos.label}";
|
|
||||||
})
|
|
||||||
];
|
|
||||||
|
|
||||||
# proxmox's configuration:
|
|
||||||
# https://github.com/NixOS/nixpkgs/blob/nixos-unstable/nixos/modules/virtualisation/proxmox-image.nix
|
|
||||||
#
|
|
||||||
# after resize the disk, it will grow partition automatically.
|
|
||||||
# and it alse had qemu-guest-agent installed by default.
|
|
||||||
format = "proxmox";
|
|
||||||
};
|
|
||||||
# Hoshino Rubii is a vm too.
|
|
||||||
ruby = nixos-generators.nixosGenerate {
|
|
||||||
inherit system specialArgs;
|
|
||||||
modules = idol_ruby_modules ++ [
|
|
||||||
({config, ...}: {
|
|
||||||
proxmox.qemuConf.name = "ruby-nixos-${config.system.nixos.label}";
|
|
||||||
})
|
|
||||||
];
|
|
||||||
format = "proxmox";
|
|
||||||
};
|
|
||||||
# Kana is a vm too.
|
|
||||||
kana = nixos-generators.nixosGenerate {
|
|
||||||
inherit system specialArgs;
|
|
||||||
modules = idol_kana_modules ++ [
|
|
||||||
({config, ...}: {
|
|
||||||
proxmox.qemuConf.name = "kana-nixos-${config.system.nixos.label}";
|
|
||||||
})
|
|
||||||
];
|
|
||||||
format = "proxmox";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# 星野 愛久愛海, Hoshino Akuamarin
|
||||||
|
idol_aquamarine_modules = {
|
||||||
|
nixos-modules = [
|
||||||
|
./hosts/idols/aquamarine
|
||||||
|
];
|
||||||
|
home-module = import ./home/linux/server.nix;
|
||||||
|
};
|
||||||
|
|
||||||
|
# 星野 瑠美衣, Hoshino Rubii
|
||||||
|
idol_ruby_modules = {
|
||||||
|
nixos-modules = [
|
||||||
|
./hosts/idols/ruby
|
||||||
|
];
|
||||||
|
home-module = import ./home/linux/server.nix;
|
||||||
|
};
|
||||||
|
|
||||||
|
# 有馬 かな, Arima Kana
|
||||||
|
idol_kana_modules = {
|
||||||
|
nixos-modules = [
|
||||||
|
./hosts/idols/kana
|
||||||
|
];
|
||||||
|
home-module = import ./home/linux/server.nix;
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
nixosConfigurations = let
|
||||||
|
system = x64_system;
|
||||||
|
specialArgs =
|
||||||
|
{
|
||||||
|
inherit username;
|
||||||
|
# use unstable branch for some packages to get the latest updates
|
||||||
|
pkgs-unstable = import nixpkgs-unstable {
|
||||||
|
system = x64_system; # refer the `system` parameter form outer scope recursively
|
||||||
|
# To use chrome, we need to allow the installation of non-free software
|
||||||
|
config.allowUnfree = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// inputs;
|
||||||
|
base_args = {
|
||||||
|
inherit home-manager nixos-generators system specialArgs;
|
||||||
|
};
|
||||||
|
stable_args = base_args // {inherit nixpkgs;};
|
||||||
|
unstable_args = base_args // {nixpkgs = nixpkgs-unstable;};
|
||||||
|
in {
|
||||||
|
# ai with i3 window manager
|
||||||
|
ai_i3 = nixosSystem (idol_ai_modules_i3 // stable_args);
|
||||||
|
# ai with hyprland compositor
|
||||||
|
ai_hyprland = nixosSystem (idol_ai_modules_hyprland // stable_args);
|
||||||
|
|
||||||
|
aquamarine = nixosSystem (idol_aquamarine_modules // unstable_args);
|
||||||
|
ruby = nixosSystem (idol_ruby_modules // unstable_args);
|
||||||
|
kana = nixosSystem (idol_kana_modules // unstable_args);
|
||||||
|
};
|
||||||
|
|
||||||
|
# take images for idols
|
||||||
|
# https://github.com/nix-community/nixos-generators
|
||||||
|
packages."${x64_system}" =
|
||||||
|
nixpkgs.lib.genAttrs [
|
||||||
|
"ai_i3"
|
||||||
|
"ai_hyprland"
|
||||||
|
] (
|
||||||
|
host:
|
||||||
|
self.nixosConfigurations.${host}.config.formats.iso
|
||||||
|
)
|
||||||
|
// nixpkgs.lib.genAttrs [
|
||||||
|
"aquamarine"
|
||||||
|
"ruby"
|
||||||
|
"kana"
|
||||||
|
] (
|
||||||
|
host:
|
||||||
|
self.nixosConfigurations.${host}.config.formats.proxmox
|
||||||
|
);
|
||||||
|
|
||||||
|
# macOS's configuration, for work.
|
||||||
|
darwinConfigurations."harmonica" = let
|
||||||
|
system = x64_darwin;
|
||||||
|
specialArgs =
|
||||||
|
{
|
||||||
|
# use unstable branch for some packages to get the latest updates
|
||||||
|
pkgs-unstable = import nixpkgs-unstable {
|
||||||
|
inherit system; # refer the `system` parameter form outer scope recursively
|
||||||
|
# To use chrome, we need to allow the installation of non-free software
|
||||||
|
config.allowUnfree = true;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// inputs;
|
||||||
|
in
|
||||||
|
macosSystem {
|
||||||
|
inherit nix-darwin home-manager system specialArgs;
|
||||||
|
darwin-modules = [
|
||||||
|
./hosts/harmonica
|
||||||
|
];
|
||||||
|
home-module = import ./home/darwin;
|
||||||
|
};
|
||||||
|
|
||||||
|
# format the nix code in this flake
|
||||||
|
# alejandra is a nix formatter with a beautiful output
|
||||||
|
formatter = nixpkgs.lib.genAttrs allSystems (
|
||||||
|
system:
|
||||||
|
nixpkgs.legacyPackages.${system}.alejandra
|
||||||
|
);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
{ lib, stdenvNoCC, fetchgit }:
|
{
|
||||||
|
lib,
|
||||||
|
stdenvNoCC,
|
||||||
|
fetchgit,
|
||||||
|
}:
|
||||||
stdenvNoCC.mkDerivation rec {
|
stdenvNoCC.mkDerivation rec {
|
||||||
pname = "icomoon-feather-font";
|
pname = "icomoon-feather-font";
|
||||||
version = "2023-05-06";
|
version = "2023-05-06";
|
||||||
@@ -8,7 +11,7 @@ stdenvNoCC.mkDerivation rec {
|
|||||||
src = fetchgit {
|
src = fetchgit {
|
||||||
url = "https://github.com/adi1090x/polybar-themes.git";
|
url = "https://github.com/adi1090x/polybar-themes.git";
|
||||||
rev = "47b66337a92a1afd2240ed7094ffcb039cc686cf"; # git commit id
|
rev = "47b66337a92a1afd2240ed7094ffcb039cc686cf"; # git commit id
|
||||||
sparseCheckout = [ "fonts/feather.ttf" ]; # only fetch the feather.ttf file
|
sparseCheckout = ["fonts/feather.ttf"]; # only fetch the feather.ttf file
|
||||||
|
|
||||||
# the sha256 is used to verify the integrity of the downloaded source, and alse cache the build result.
|
# the sha256 is used to verify the integrity of the downloaded source, and alse cache the build result.
|
||||||
# so if you copy other package src's sha256, you will get a cached build result of that package, and all configs in this file will be ignored.
|
# so if you copy other package src's sha256, you will get a cached build result of that package, and all configs in this file will be ignored.
|
||||||
@@ -29,11 +32,11 @@ stdenvNoCC.mkDerivation rec {
|
|||||||
description = "Icomoon feather font";
|
description = "Icomoon feather font";
|
||||||
version = version;
|
version = version;
|
||||||
longDescription = ''
|
longDescription = ''
|
||||||
Feather is a collection of simply beautiful open source icons.
|
Feather is a collection of simply beautiful open source icons.
|
||||||
Each icon is designed on a 24x24 grid with an emphasis on simplicity, consistency, and flexibility.
|
Each icon is designed on a 24x24 grid with an emphasis on simplicity, consistency, and flexibility.
|
||||||
'';
|
'';
|
||||||
license = licenses.mit;
|
license = licenses.mit;
|
||||||
maintainers = [ maintainers.ryan4yin ];
|
maintainers = [maintainers.ryan4yin];
|
||||||
platforms = platforms.all;
|
platforms = platforms.all;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
{ pkgs, ... }:
|
{pkgs, ...}:
|
||||||
|
|
||||||
###########################################################
|
###########################################################
|
||||||
#
|
#
|
||||||
# Alacritty Configuration
|
# Alacritty Configuration
|
||||||
#
|
#
|
||||||
# Useful Hot Keys for macOS:
|
# Useful Hot Keys for macOS:
|
||||||
# 1. Multi-Window: `command + N`
|
# 1. Multi-Window: `command + N`
|
||||||
# 2. Increase Font Size: `command + =` | `command + +`
|
# 2. Increase Font Size: `command + =` | `command + +`
|
||||||
@@ -18,80 +17,84 @@
|
|||||||
# Note: Alacritty do not have support for Tabs, and any graphic protocol.
|
# Note: Alacritty do not have support for Tabs, and any graphic protocol.
|
||||||
#
|
#
|
||||||
###########################################################
|
###########################################################
|
||||||
|
|
||||||
{
|
{
|
||||||
programs.alacritty = {
|
programs.alacritty = {
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
xdg.configFile."alacritty/alacritty.yml".text = ''
|
xdg.configFile."alacritty/alacritty.yml".text =
|
||||||
import:
|
''
|
||||||
# all alacritty themes can be found at
|
import:
|
||||||
# https://github.com/alacritty/alacritty-theme
|
# all alacritty themes can be found at
|
||||||
- ~/.config/alacritty/theme_catppuccino.yml
|
# https://github.com/alacritty/alacritty-theme
|
||||||
|
- ~/.config/alacritty/theme_catppuccino.yml
|
||||||
window:
|
|
||||||
# Background opacity
|
|
||||||
#
|
|
||||||
# Window opacity as a floating point number from `0.0` to `1.0`.
|
|
||||||
# The value `0.0` is completely transparent and `1.0` is opaque.
|
|
||||||
opacity: 0.95
|
|
||||||
|
|
||||||
# Startup Mode (changes require restart)
|
|
||||||
#
|
|
||||||
# Values for `startup_mode`:
|
|
||||||
# - Windowed
|
|
||||||
# - Maximized
|
|
||||||
# - Fullscreen
|
|
||||||
#
|
|
||||||
# Values for `startup_mode` (macOS only):
|
|
||||||
# - SimpleFullscreen
|
|
||||||
startup_mode: Windowed
|
|
||||||
|
|
||||||
# Allow terminal applications to change Alacritty's window title.
|
|
||||||
dynamic_title: true
|
|
||||||
|
|
||||||
# Make `Option` key behave as `Alt` (macOS only):
|
|
||||||
# - OnlyLeft
|
|
||||||
# - OnlyRight
|
|
||||||
# - Both
|
|
||||||
# - None (default)
|
|
||||||
option_as_alt: Both
|
|
||||||
|
|
||||||
scrolling:
|
|
||||||
# Maximum number of lines in the scrollback buffer.
|
|
||||||
# Specifying '0' will disable scrolling.
|
|
||||||
history: 10000
|
|
||||||
|
|
||||||
# Scrolling distance multiplier.
|
|
||||||
#multiplier: 3
|
|
||||||
|
|
||||||
# Font configuration
|
|
||||||
font:
|
|
||||||
# Normal (roman) font face
|
|
||||||
bold:
|
|
||||||
family: JetBrainsMono Nerd Font
|
|
||||||
italic:
|
|
||||||
family: JetBrainsMono Nerd Font
|
|
||||||
normal:
|
|
||||||
family: JetBrainsMono Nerd Font
|
|
||||||
bold_italic:
|
|
||||||
# Font family
|
|
||||||
#
|
|
||||||
# If the bold italic family is not specified, it will fall back to the
|
|
||||||
# value specified for the normal font.
|
|
||||||
family: JetBrainsMono Nerd Font
|
|
||||||
'' + (if pkgs.stdenv.isDarwin then ''
|
|
||||||
# Point size
|
|
||||||
size: 14
|
|
||||||
shell: # force nushell as default shell on macOS
|
|
||||||
program: /run/current-system/sw/bin/nu
|
|
||||||
'' else ''
|
|
||||||
# holder identation
|
|
||||||
# Point size
|
|
||||||
size: 13
|
|
||||||
'');
|
|
||||||
|
|
||||||
|
window:
|
||||||
|
# Background opacity
|
||||||
|
#
|
||||||
|
# Window opacity as a floating point number from `0.0` to `1.0`.
|
||||||
|
# The value `0.0` is completely transparent and `1.0` is opaque.
|
||||||
|
opacity: 0.95
|
||||||
|
|
||||||
|
# Startup Mode (changes require restart)
|
||||||
|
#
|
||||||
|
# Values for `startup_mode`:
|
||||||
|
# - Windowed
|
||||||
|
# - Maximized
|
||||||
|
# - Fullscreen
|
||||||
|
#
|
||||||
|
# Values for `startup_mode` (macOS only):
|
||||||
|
# - SimpleFullscreen
|
||||||
|
startup_mode: Windowed
|
||||||
|
|
||||||
|
# Allow terminal applications to change Alacritty's window title.
|
||||||
|
dynamic_title: true
|
||||||
|
|
||||||
|
# Make `Option` key behave as `Alt` (macOS only):
|
||||||
|
# - OnlyLeft
|
||||||
|
# - OnlyRight
|
||||||
|
# - Both
|
||||||
|
# - None (default)
|
||||||
|
option_as_alt: Both
|
||||||
|
|
||||||
|
scrolling:
|
||||||
|
# Maximum number of lines in the scrollback buffer.
|
||||||
|
# Specifying '0' will disable scrolling.
|
||||||
|
history: 10000
|
||||||
|
|
||||||
|
# Scrolling distance multiplier.
|
||||||
|
#multiplier: 3
|
||||||
|
|
||||||
|
# Font configuration
|
||||||
|
font:
|
||||||
|
# Normal (roman) font face
|
||||||
|
bold:
|
||||||
|
family: JetBrainsMono Nerd Font
|
||||||
|
italic:
|
||||||
|
family: JetBrainsMono Nerd Font
|
||||||
|
normal:
|
||||||
|
family: JetBrainsMono Nerd Font
|
||||||
|
bold_italic:
|
||||||
|
# Font family
|
||||||
|
#
|
||||||
|
# If the bold italic family is not specified, it will fall back to the
|
||||||
|
# value specified for the normal font.
|
||||||
|
family: JetBrainsMono Nerd Font
|
||||||
|
''
|
||||||
|
+ (
|
||||||
|
if pkgs.stdenv.isDarwin
|
||||||
|
then ''
|
||||||
|
# Point size
|
||||||
|
size: 14
|
||||||
|
shell: # force nushell as default shell on macOS
|
||||||
|
program: /run/current-system/sw/bin/nu
|
||||||
|
''
|
||||||
|
else ''
|
||||||
|
# holder identation
|
||||||
|
# Point size
|
||||||
|
size: 13
|
||||||
|
''
|
||||||
|
);
|
||||||
|
|
||||||
xdg.configFile."alacritty/theme_catppuccino.yml".source = ./theme_catppuccino.yml;
|
xdg.configFile."alacritty/theme_catppuccino.yml".source = ./theme_catppuccino.yml;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
{ ... }:
|
{...}: {
|
||||||
{
|
|
||||||
imports = [
|
imports = [
|
||||||
./alacritty
|
./alacritty
|
||||||
../server
|
../server
|
||||||
./neovim
|
./neovim
|
||||||
|
|
||||||
./development.nix
|
./development.nix
|
||||||
./kitty.nix
|
./kitty.nix
|
||||||
./media.nix
|
./media.nix
|
||||||
./shell.nix
|
./shell.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
{ pkgs, pkgs-unstable, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
pkgs,
|
||||||
|
pkgs-unstable,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
#############################################################
|
#############################################################
|
||||||
#
|
#
|
||||||
# Basic settings for development environment
|
# Basic settings for development environment
|
||||||
#
|
#
|
||||||
# Please avoid to install language specific packages here(globally),
|
# Please avoid to install language specific packages here(globally),
|
||||||
# instead, install them independently using dev-templates:
|
# instead, install them independently using dev-templates:
|
||||||
# https://github.com/the-nix-way/dev-templates
|
# https://github.com/the-nix-way/dev-templates
|
||||||
@@ -36,13 +38,14 @@
|
|||||||
gnumake # used by this repo, to simplify the deployment
|
gnumake # used by this repo, to simplify the deployment
|
||||||
|
|
||||||
# python
|
# python
|
||||||
(python311.withPackages (ps: with ps; [
|
(python311.withPackages (ps:
|
||||||
ipython
|
with ps; [
|
||||||
pandas
|
ipython
|
||||||
requests
|
pandas
|
||||||
pyquery
|
requests
|
||||||
pyyaml
|
pyquery
|
||||||
]))
|
pyyaml
|
||||||
|
]))
|
||||||
|
|
||||||
# db related
|
# db related
|
||||||
dbeaver
|
dbeaver
|
||||||
|
|||||||
+26
-14
@@ -1,9 +1,12 @@
|
|||||||
{ lib, pkgs, ... }:
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}:
|
||||||
###########################################################
|
###########################################################
|
||||||
#
|
#
|
||||||
# Kitty Configuration
|
# Kitty Configuration
|
||||||
#
|
#
|
||||||
# Useful Hot Keys for macOS:
|
# Useful Hot Keys for macOS:
|
||||||
# 1. New Tab: `command + t`
|
# 1. New Tab: `command + t`
|
||||||
# 2. Close Tab: `command + w`
|
# 2. Close Tab: `command + w`
|
||||||
@@ -28,20 +31,29 @@
|
|||||||
font = {
|
font = {
|
||||||
name = "JetBrainsMono Nerd Font";
|
name = "JetBrainsMono Nerd Font";
|
||||||
# use different font size on macOS
|
# use different font size on macOS
|
||||||
size = if pkgs.stdenv.isDarwin then 14 else 13;
|
size =
|
||||||
|
if pkgs.stdenv.isDarwin
|
||||||
|
then 14
|
||||||
|
else 13;
|
||||||
};
|
};
|
||||||
|
|
||||||
settings = {
|
settings =
|
||||||
background_opacity = "0.95";
|
{
|
||||||
macos_option_as_alt = true; # Option key acts as Alt on macOS
|
background_opacity = "0.95";
|
||||||
scrollback_lines = 10000;
|
macos_option_as_alt = true; # Option key acts as Alt on macOS
|
||||||
enable_audio_bell = false;
|
scrollback_lines = 10000;
|
||||||
} // (if pkgs.stdenv.isDarwin then {
|
enable_audio_bell = false;
|
||||||
# macOS specific settings, force kitty to use nushell as default shell
|
}
|
||||||
shell = "/run/current-system/sw/bin/nu";
|
// (
|
||||||
} else {});
|
if pkgs.stdenv.isDarwin
|
||||||
|
then {
|
||||||
|
# macOS specific settings, force kitty to use nushell as default shell
|
||||||
|
shell = "/run/current-system/sw/bin/nu";
|
||||||
|
}
|
||||||
|
else {}
|
||||||
|
);
|
||||||
|
|
||||||
# macOS specific settings
|
# macOS specific settings
|
||||||
darwinLaunchOptions = [ "--start-as=fullscreen" ];
|
darwinLaunchOptions = ["--start-as=fullscreen"];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
{ pkgs
|
{
|
||||||
, config
|
pkgs,
|
||||||
, ...
|
config,
|
||||||
|
...
|
||||||
}:
|
}:
|
||||||
# processing audio/video
|
# processing audio/video
|
||||||
{
|
{
|
||||||
@@ -8,7 +9,7 @@
|
|||||||
ffmpeg-full
|
ffmpeg-full
|
||||||
|
|
||||||
# images
|
# images
|
||||||
viu # Terminal image viewer with native support for iTerm and Kitty
|
viu # Terminal image viewer with native support for iTerm and Kitty
|
||||||
imagemagick
|
imagemagick
|
||||||
graphviz
|
graphviz
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
{ pkgs, astronvim, ... }:
|
{
|
||||||
|
pkgs,
|
||||||
|
astronvim,
|
||||||
|
...
|
||||||
|
}:
|
||||||
###############################################################################
|
###############################################################################
|
||||||
#
|
#
|
||||||
# AstroNvim's configuration and all its dependencies
|
# AstroNvim's configuration and all its dependencies
|
||||||
@@ -70,7 +73,7 @@
|
|||||||
#
|
#
|
||||||
# Joining a Selection of Lines With Space: `:join`
|
# Joining a Selection of Lines With Space: `:join`
|
||||||
# Joining without spaces: `:join!`
|
# Joining without spaces: `:join!`
|
||||||
#
|
#
|
||||||
# Toggle text's case: `~`
|
# Toggle text's case: `~`
|
||||||
# Convert to uppercase: `U`
|
# Convert to uppercase: `U`
|
||||||
# Convert to lowercase: `u`
|
# Convert to lowercase: `u`
|
||||||
@@ -93,7 +96,7 @@
|
|||||||
"nvim" = {
|
"nvim" = {
|
||||||
# update AstroNvim
|
# update AstroNvim
|
||||||
onChange = "${pkgs.neovim}/bin/nvim --headless +quitall";
|
onChange = "${pkgs.neovim}/bin/nvim --headless +quitall";
|
||||||
source = astronvim;
|
source = astronvim;
|
||||||
};
|
};
|
||||||
# my cusotom astronvim config, astronvim will load it after base config
|
# my cusotom astronvim config, astronvim will load it after base config
|
||||||
# https://github.com/AstroNvim/AstroNvim/blob/v3.32.0/lua/astronvim/bootstrap.lua#L15-L16
|
# https://github.com/AstroNvim/AstroNvim/blob/v3.32.0/lua/astronvim/bootstrap.lua#L15-L16
|
||||||
@@ -117,16 +120,15 @@
|
|||||||
|
|
||||||
viAlias = false;
|
viAlias = false;
|
||||||
vimAlias = true;
|
vimAlias = true;
|
||||||
|
|
||||||
withPython3 = true;
|
withPython3 = true;
|
||||||
withNodeJs = true;
|
withNodeJs = true;
|
||||||
extraPackages = [];
|
extraPackages = [];
|
||||||
|
|
||||||
# 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.
|
||||||
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
|
||||||
luasnip
|
luasnip
|
||||||
|
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
@@ -144,14 +146,14 @@
|
|||||||
|
|
||||||
#-- python
|
#-- python
|
||||||
nodePackages.pyright # python language server
|
nodePackages.pyright # python language server
|
||||||
python311Packages.black # python formatter
|
python311Packages.black # python formatter
|
||||||
python311Packages.ruff-lsp
|
python311Packages.ruff-lsp
|
||||||
|
|
||||||
#-- rust
|
#-- rust
|
||||||
rust-analyzer
|
rust-analyzer
|
||||||
cargo # rust package manager
|
cargo # rust package manager
|
||||||
rustfmt
|
rustfmt
|
||||||
|
|
||||||
#-- zig
|
#-- zig
|
||||||
zls
|
zls
|
||||||
|
|
||||||
@@ -159,18 +161,18 @@
|
|||||||
nil
|
nil
|
||||||
rnix-lsp
|
rnix-lsp
|
||||||
# nixd
|
# nixd
|
||||||
statix # Lints and suggestions for the nix programming language
|
statix # Lints and suggestions for the nix programming language
|
||||||
deadnix # Find and remove unused code in .nix source files
|
deadnix # Find and remove unused code in .nix source files
|
||||||
alejandra # Nix Code Formatter
|
alejandra # Nix Code Formatter
|
||||||
|
|
||||||
#-- golang
|
#-- golang
|
||||||
go
|
go
|
||||||
gomodifytags
|
gomodifytags
|
||||||
iferr # generate error handling code for go
|
iferr # generate error handling code for go
|
||||||
impl # generate function implementation for go
|
impl # generate function implementation for go
|
||||||
gotools # contains tools like: godoc, goimports, etc.
|
gotools # contains tools like: godoc, goimports, etc.
|
||||||
gopls # go language server
|
gopls # go language server
|
||||||
delve # go debugger
|
delve # go debugger
|
||||||
|
|
||||||
#-- lua
|
#-- lua
|
||||||
stylua
|
stylua
|
||||||
@@ -180,7 +182,7 @@
|
|||||||
nodePackages.bash-language-server
|
nodePackages.bash-language-server
|
||||||
shellcheck
|
shellcheck
|
||||||
shfmt
|
shfmt
|
||||||
|
|
||||||
#-- javascript/typescript --#
|
#-- javascript/typescript --#
|
||||||
nodePackages.typescript
|
nodePackages.typescript
|
||||||
nodePackages.typescript-language-server
|
nodePackages.typescript-language-server
|
||||||
@@ -194,26 +196,25 @@
|
|||||||
terraform-ls
|
terraform-ls
|
||||||
jsonnet
|
jsonnet
|
||||||
jsonnet-language-server
|
jsonnet-language-server
|
||||||
hadolint # Dockerfile linter
|
hadolint # Dockerfile linter
|
||||||
|
|
||||||
#-- Others
|
#-- Others
|
||||||
taplo # TOML language server / formatter / validator
|
taplo # TOML language server / formatter / validator
|
||||||
nodePackages.yaml-language-server
|
nodePackages.yaml-language-server
|
||||||
sqlfluff # SQL linter
|
sqlfluff # SQL linter
|
||||||
actionlint # GitHub Actions linter
|
actionlint # GitHub Actions linter
|
||||||
buf # protoc plugin for linting and formatting
|
buf # protoc plugin for linting and formatting
|
||||||
proselint # English prose linter
|
proselint # English prose linter
|
||||||
|
|
||||||
#-- Misc
|
#-- Misc
|
||||||
tree-sitter # common language parser/highlighter
|
tree-sitter # common language parser/highlighter
|
||||||
nodePackages.prettier # common code formatter
|
nodePackages.prettier # common code formatter
|
||||||
marksman # language server for markdown
|
marksman # language server for markdown
|
||||||
glow # markdown previewer
|
glow # markdown previewer
|
||||||
|
|
||||||
#-- Optional Requirements:
|
#-- Optional Requirements:
|
||||||
gdu # disk usage analyzer, required by AstroNvim
|
gdu # disk usage analyzer, required by AstroNvim
|
||||||
ripgrep # fast search tool, required by AstroNvim's '<leader>fw'(<leader> is space key)
|
ripgrep # fast search tool, required by AstroNvim's '<leader>fw'(<leader> is space key)
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
|
{...}: {
|
||||||
{ ... }: {
|
|
||||||
programs.bash = {
|
programs.bash = {
|
||||||
# load the alias file for work
|
# load the alias file for work
|
||||||
bashrcExtra = ''
|
bashrcExtra = ''
|
||||||
@@ -22,5 +21,4 @@
|
|||||||
source /etc/agenix/alias-for-work.nushell
|
source /etc/agenix/alias-for-work.nushell
|
||||||
'';
|
'';
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{ ... }: {
|
{...}: {
|
||||||
programs.bash = {
|
programs.bash = {
|
||||||
enable = true;
|
enable = true;
|
||||||
enableCompletion = true;
|
enableCompletion = true;
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
{ ... }:
|
{...}: {
|
||||||
{
|
# a cat(1) clone with syntax highlighting and Git integration.
|
||||||
# a cat(1) clone with syntax highlighting and Git integration.
|
|
||||||
programs.bat = {
|
programs.bat = {
|
||||||
enable = true;
|
enable = true;
|
||||||
config = {
|
config = {
|
||||||
@@ -12,6 +11,4 @@
|
|||||||
Catppuccin-mocha = builtins.readFile ./Catppuccin-mocha.tmTheme;
|
Catppuccin-mocha = builtins.readFile ./Catppuccin-mocha.tmTheme;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
{ pkgs, ... }:
|
{pkgs, ...}: {
|
||||||
|
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
neofetch
|
neofetch
|
||||||
nnn # terminal file manager
|
nnn # terminal file manager
|
||||||
@@ -20,12 +18,12 @@
|
|||||||
# networking tools
|
# networking tools
|
||||||
mtr # A network diagnostic tool
|
mtr # A network diagnostic tool
|
||||||
iperf3
|
iperf3
|
||||||
dnsutils # `dig` + `nslookup`
|
dnsutils # `dig` + `nslookup`
|
||||||
ldns # replacement of `dig`, it provide the command `drill`
|
ldns # replacement of `dig`, it provide the command `drill`
|
||||||
aria2 # A lightweight multi-protocol & multi-source command-line download utility
|
aria2 # A lightweight multi-protocol & multi-source command-line download utility
|
||||||
socat # replacement of openbsd-netcat
|
socat # replacement of openbsd-netcat
|
||||||
nmap # A utility for network discovery and security auditing
|
nmap # A utility for network discovery and security auditing
|
||||||
ipcalc # it is a calculator for the IPv4/v6 addresses
|
ipcalc # it is a calculator for the IPv4/v6 addresses
|
||||||
|
|
||||||
# misc
|
# misc
|
||||||
cowsay
|
cowsay
|
||||||
@@ -40,7 +38,7 @@
|
|||||||
gnupg
|
gnupg
|
||||||
|
|
||||||
# nix related
|
# nix related
|
||||||
#
|
#
|
||||||
# it provides the command `nom` works just like `nix
|
# it provides the command `nom` works just like `nix
|
||||||
# with more details log output
|
# with more details log output
|
||||||
nix-output-monitor
|
nix-output-monitor
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
{ ... }:
|
{...}: {
|
||||||
{
|
|
||||||
imports = [
|
imports = [
|
||||||
./bat
|
./bat
|
||||||
./nushell
|
./nushell
|
||||||
@@ -11,5 +10,4 @@
|
|||||||
./git.nix
|
./git.nix
|
||||||
./starship.nix
|
./starship.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
{ config
|
{
|
||||||
, lib
|
config,
|
||||||
, pkgs
|
lib,
|
||||||
, ...
|
pkgs,
|
||||||
|
...
|
||||||
}: {
|
}: {
|
||||||
# `programs.git` will generate the config file: ~/.config/git/config
|
# `programs.git` will generate the config file: ~/.config/git/config
|
||||||
# to make git use this config file, `~/.gitconfig` should not exist!
|
# to make git use this config file, `~/.gitconfig` should not exist!
|
||||||
#
|
#
|
||||||
# https://git-scm.com/docs/git-config#Documentation/git-config.txt---global
|
# https://git-scm.com/docs/git-config#Documentation/git-config.txt---global
|
||||||
home.activation.removeExistingGitconfig = lib.hm.dag.entryBefore [ "checkLinkTargets" ] ''
|
home.activation.removeExistingGitconfig = lib.hm.dag.entryBefore ["checkLinkTargets"] ''
|
||||||
rm -f ~/.gitconfig
|
rm -f ~/.gitconfig
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
{ ... }: {
|
{...}: {
|
||||||
programs.nushell = {
|
programs.nushell = {
|
||||||
enable = true;
|
enable = true;
|
||||||
configFile.source = ./config.nu;
|
configFile.source = ./config.nu;
|
||||||
|
|
||||||
# home-manager will merge the cotent in `environmentVariables` with the `envFile.source`
|
# home-manager will merge the cotent in `environmentVariables` with the `envFile.source`
|
||||||
# but basically, I set all environment variables via the shell-independent way, so I don't need to use those two options
|
# but basically, I set all environment variables via the shell-independent way, so I don't need to use those two options
|
||||||
#
|
#
|
||||||
# envFile.source = ./env.nu;
|
# envFile.source = ./env.nu;
|
||||||
# environmentVariables = { FOO="bar"; };
|
# environmentVariables = { FOO="bar"; };
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{ ... }: {
|
{...}: {
|
||||||
programs.starship = {
|
programs.starship = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,13 @@
|
|||||||
{ pkgs, ... }:
|
{pkgs, ...}: let
|
||||||
|
|
||||||
let
|
|
||||||
buildTmuxPlugin = pkgs.tmuxPlugins.mkTmuxPlugin;
|
buildTmuxPlugin = pkgs.tmuxPlugins.mkTmuxPlugin;
|
||||||
in
|
in {
|
||||||
{
|
|
||||||
draculaTheme = buildTmuxPlugin {
|
draculaTheme = buildTmuxPlugin {
|
||||||
pluginName = "dracula";
|
pluginName = "dracula";
|
||||||
version = "v2.2.0";
|
version = "v2.2.0";
|
||||||
src = builtins.fetchTarball {
|
src = builtins.fetchTarball {
|
||||||
name = "dracula-tmux-v2.2.0";
|
name = "dracula-tmux-v2.2.0";
|
||||||
url = "https://github.com/dracula/tmux/archive/refs/tags/v2.2.0.tar.gz";
|
url = "https://github.com/dracula/tmux/archive/refs/tags/v2.2.0.tar.gz";
|
||||||
sha256 = "sha256:0v2k994yy4xx2iw8qxg7qphw46gq2qmg496i3a3h9b6jgwxqm7zn";
|
sha256 = "sha256:0v2k994yy4xx2iw8qxg7qphw46gq2qmg496i3a3h9b6jgwxqm7zn";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,24 +1,25 @@
|
|||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
let
|
|
||||||
plugins = pkgs.tmuxPlugins // pkgs.callPackage ./custom-plugins.nix {};
|
|
||||||
in
|
|
||||||
{
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: let
|
||||||
|
plugins = pkgs.tmuxPlugins // pkgs.callPackage ./custom-plugins.nix {};
|
||||||
|
in {
|
||||||
programs.tmux = {
|
programs.tmux = {
|
||||||
enable = true;
|
enable = true;
|
||||||
shell = "${pkgs.nushell}/bin/nu";
|
shell = "${pkgs.nushell}/bin/nu";
|
||||||
|
|
||||||
# Resize the window to the size of the smallest session for which it is the current window.
|
# Resize the window to the size of the smallest session for which it is the current window.
|
||||||
#
|
#
|
||||||
aggressiveResize = true;
|
aggressiveResize = true;
|
||||||
|
|
||||||
# https://github.com/tmux-plugins/tmux-sensible
|
# https://github.com/tmux-plugins/tmux-sensible
|
||||||
# tmux-sensible overwrites default tmux shortcuts, makes them more sane.
|
# tmux-sensible overwrites default tmux shortcuts, makes them more sane.
|
||||||
sensibleOnTop = true;
|
sensibleOnTop = true;
|
||||||
|
|
||||||
# extraConfig = builtins.readFile ./tmux.conf;
|
# extraConfig = builtins.readFile ./tmux.conf;
|
||||||
# keyMode = "vi"; # default is emacs
|
# keyMode = "vi"; # default is emacs
|
||||||
|
|
||||||
baseIndex = 1; # start index from 1
|
baseIndex = 1; # start index from 1
|
||||||
escapeTime = 0; # do not wait for escape key
|
escapeTime = 0; # do not wait for escape key
|
||||||
terminal = "xterm-256color";
|
terminal = "xterm-256color";
|
||||||
@@ -31,8 +32,8 @@ in
|
|||||||
plugin = continuum;
|
plugin = continuum;
|
||||||
extraConfig = ''
|
extraConfig = ''
|
||||||
set -g @continuum-save-interval '15'
|
set -g @continuum-save-interval '15'
|
||||||
|
|
||||||
# Option to display current status of tmux continuum in tmux status line.
|
# Option to display current status of tmux continuum in tmux status line.
|
||||||
set -g status-right 'Continuum status: #{continuum_status}'
|
set -g status-right 'Continuum status: #{continuum_status}'
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
@@ -41,7 +42,7 @@ in
|
|||||||
# Manually persists tmux environment across system restarts.
|
# Manually persists tmux environment across system restarts.
|
||||||
# prefix + Ctrl-s - save
|
# prefix + Ctrl-s - save
|
||||||
# prefix + Ctrl-r - restore
|
# prefix + Ctrl-r - restore
|
||||||
#
|
#
|
||||||
plugin = resurrect;
|
plugin = resurrect;
|
||||||
# Restore Neovim sessions
|
# Restore Neovim sessions
|
||||||
extraConfig = "set -g @resurrect-strategy-nvim 'session'";
|
extraConfig = "set -g @resurrect-strategy-nvim 'session'";
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
{ ... }:
|
{...}: {
|
||||||
|
|
||||||
{
|
|
||||||
programs.zellij = {
|
programs.zellij = {
|
||||||
enable = true;
|
enable = true;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
{ pkgs, ... }:
|
{pkgs, ...}: {
|
||||||
{
|
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
#
|
#
|
||||||
# MacOS specific home configuration
|
# MacOS specific home configuration
|
||||||
#
|
#
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
{ ... }:
|
{ username, ... }: {
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
imports = [
|
||||||
../base/desktop
|
../base/desktop
|
||||||
|
|
||||||
./core.nix
|
./core.nix
|
||||||
./nushell.nix
|
./nushell.nix
|
||||||
./rime-squirrel.nix
|
./rime-squirrel.nix
|
||||||
@@ -12,9 +10,9 @@
|
|||||||
# Home Manager needs a bit of information about you and the
|
# Home Manager needs a bit of information about you and the
|
||||||
# paths it should manage.
|
# paths it should manage.
|
||||||
home = {
|
home = {
|
||||||
username = "ryan";
|
username = username;
|
||||||
# set homeDirectory make build fail
|
# set homeDirectory make build fail
|
||||||
homeDirectory = "/Users/ryan";
|
homeDirectory = "/Users/${username}";
|
||||||
|
|
||||||
# This value determines the Home Manager release that your
|
# This value determines the Home Manager release that your
|
||||||
# configuration is compatible with. This helps avoid breakage
|
# configuration is compatible with. This helps avoid breakage
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{ config, ... }: {
|
{config, ...}: {
|
||||||
# nix-darwin do not set PATH for nushell! so we need to do it manually
|
# nix-darwin do not set PATH for nushell! so we need to do it manually
|
||||||
# this is a workaround to add nix's PATH to nushell
|
# this is a workaround to add nix's PATH to nushell
|
||||||
programs.nushell.extraConfig = ''
|
programs.nushell.extraConfig = ''
|
||||||
@@ -15,4 +15,4 @@
|
|||||||
($env.PATH | split row (char esep))
|
($env.PATH | split row (char esep))
|
||||||
] | flatten)
|
] | flatten)
|
||||||
'';
|
'';
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,10 @@
|
|||||||
{ lib, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
# remove existing rime data (squirrel)
|
# remove existing rime data (squirrel)
|
||||||
home.activation.removeExistingRimeData = lib.hm.dag.entryBefore [ "checkLinkTargets" ] ''
|
home.activation.removeExistingRimeData = lib.hm.dag.entryBefore ["checkLinkTargets"] ''
|
||||||
rm -rf "~/Library/Rime/build/flypy.prism.bin"
|
rm -rf "~/Library/Rime/build/flypy.prism.bin"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
|||||||
@@ -1,11 +1,8 @@
|
|||||||
{ config, ... }:
|
{config, ...}: let
|
||||||
|
|
||||||
let
|
|
||||||
d = config.xdg.dataHome;
|
d = config.xdg.dataHome;
|
||||||
c = config.xdg.configHome;
|
c = config.xdg.configHome;
|
||||||
cache = config.xdg.cacheHome;
|
cache = config.xdg.cacheHome;
|
||||||
in
|
in rec {
|
||||||
rec {
|
|
||||||
# add environment variables
|
# add environment variables
|
||||||
systemd.user.sessionVariables = {
|
systemd.user.sessionVariables = {
|
||||||
# clean up ~
|
# clean up ~
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
{ pkgs, ... }:
|
{pkgs, ...}: {
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
# Linux Only Packages, not available on Darwin
|
# Linux Only Packages, not available on Darwin
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
btop # replacement of htop/nmon
|
btop # replacement of htop/nmon
|
||||||
@@ -13,7 +10,7 @@
|
|||||||
# misc
|
# misc
|
||||||
libnotify
|
libnotify
|
||||||
wireguard-tools # manage wireguard vpn manually, via wg-quick
|
wireguard-tools # manage wireguard vpn manually, via wg-quick
|
||||||
|
|
||||||
# need to run `conda-install` before using it
|
# need to run `conda-install` before using it
|
||||||
# need to run `conda-shell` before using command `conda`
|
# need to run `conda-shell` before using command `conda`
|
||||||
# conda is not available for MacOS
|
# conda is not available for MacOS
|
||||||
@@ -30,7 +27,7 @@
|
|||||||
ethtool
|
ethtool
|
||||||
pciutils # lspci
|
pciutils # lspci
|
||||||
usbutils # lsusb
|
usbutils # lsusb
|
||||||
hdparm # for disk performance, command
|
hdparm # for disk performance, command
|
||||||
dmidecode # a tool that reads information about your system's hardware from the BIOS according to the SMBIOS/DMI standard
|
dmidecode # a tool that reads information about your system's hardware from the BIOS according to the SMBIOS/DMI standard
|
||||||
];
|
];
|
||||||
|
|
||||||
@@ -42,5 +39,4 @@
|
|||||||
services = {
|
services = {
|
||||||
# syncthing.enable = true;
|
# syncthing.enable = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
{ ... }:
|
{ username, ... }: {
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
imports = [
|
||||||
../base/desktop
|
../base/desktop
|
||||||
|
|
||||||
@@ -13,12 +11,9 @@
|
|||||||
|
|
||||||
# Home Manager needs a bit of information about you and the
|
# Home Manager needs a bit of information about you and the
|
||||||
# paths it should manage.
|
# paths it should manage.
|
||||||
home = let
|
home = {
|
||||||
name = "ryan";
|
username = username;
|
||||||
in
|
homeDirectory = "/home/${username}";
|
||||||
{
|
|
||||||
username = name;
|
|
||||||
homeDirectory = "/home/${name}";
|
|
||||||
|
|
||||||
# This value determines the Home Manager release that your
|
# This value determines the Home Manager release that your
|
||||||
# configuration is compatible with. This helps avoid breakage
|
# configuration is compatible with. This helps avoid breakage
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
{ ... }:
|
{ username, ... }: {
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
imports = [
|
||||||
../base/desktop
|
../base/desktop
|
||||||
|
|
||||||
@@ -9,16 +7,13 @@
|
|||||||
./desktop
|
./desktop
|
||||||
|
|
||||||
./i3
|
./i3
|
||||||
];
|
];
|
||||||
|
|
||||||
# Home Manager needs a bit of information about you and the
|
# Home Manager needs a bit of information about you and the
|
||||||
# paths it should manage.
|
# paths it should manage.
|
||||||
home = let
|
home = {
|
||||||
name = "ryan";
|
username = username;
|
||||||
in
|
homeDirectory = "/home/${username}";
|
||||||
{
|
|
||||||
username = name;
|
|
||||||
homeDirectory = "/home/${name}";
|
|
||||||
|
|
||||||
# This value determines the Home Manager release that your
|
# This value determines the Home Manager release that your
|
||||||
# configuration is compatible with. This helps avoid breakage
|
# configuration is compatible with. This helps avoid breakage
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
{ pkgs, ... }:
|
{pkgs, ...}: {
|
||||||
{
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
# creative
|
# creative
|
||||||
# blender # 3d modeling
|
# blender # 3d modeling
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
{ pkgs, ... }:
|
{pkgs, ...}: {
|
||||||
{
|
|
||||||
imports = [
|
imports = [
|
||||||
./creative.nix
|
./creative.nix
|
||||||
./immutable-file.nix
|
./immutable-file.nix
|
||||||
@@ -10,7 +9,7 @@
|
|||||||
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
# GUI apps
|
# GUI apps
|
||||||
insomnia # REST client
|
insomnia # REST client
|
||||||
wireshark # network analyzer
|
wireshark # network analyzer
|
||||||
|
|
||||||
# e-book viewer(.epub/.mobi/...)
|
# e-book viewer(.epub/.mobi/...)
|
||||||
|
|||||||
@@ -1,26 +1,24 @@
|
|||||||
{ config
|
{
|
||||||
, lib
|
config,
|
||||||
, pkgs
|
lib,
|
||||||
, ...
|
pkgs,
|
||||||
|
...
|
||||||
}:
|
}:
|
||||||
|
|
||||||
##############################################################################################
|
##############################################################################################
|
||||||
#
|
#
|
||||||
# Provide a option `home.immutable-file`, it works like `home.file` but make the generated file immutable.
|
# Provide a option `home.immutable-file`, it works like `home.file` but make the generated file immutable.
|
||||||
#
|
#
|
||||||
# Copy from https://github.com/iosmanthus/nixos-config/blob/349917b/modules/immutable-file.nix
|
# Copy from https://github.com/iosmanthus/nixos-config/blob/349917b/modules/immutable-file.nix
|
||||||
#
|
#
|
||||||
# this module use the `chattr +i` to make the file immutable, `i` indicates `immutable`,
|
# this module use the `chattr +i` to make the file immutable, `i` indicates `immutable`,
|
||||||
# it's a i-node flags only works on Linux.
|
# it's a i-node flags only works on Linux.
|
||||||
#
|
#
|
||||||
# TODO not used yet, need to test it.
|
# TODO not used yet, need to test it.
|
||||||
#
|
#
|
||||||
##############################################################################################
|
##############################################################################################
|
||||||
|
with lib; let
|
||||||
with lib;
|
|
||||||
let
|
|
||||||
cfg = config.home.immutable-file;
|
cfg = config.home.immutable-file;
|
||||||
immutableFileOpts = { ... }: {
|
immutableFileOpts = {...}: {
|
||||||
options = {
|
options = {
|
||||||
src = mkOption {
|
src = mkOption {
|
||||||
type = types.path;
|
type = types.path;
|
||||||
@@ -44,21 +42,24 @@ let
|
|||||||
sudo cp $2 $1
|
sudo cp $2 $1
|
||||||
sudo chattr +i $1
|
sudo chattr +i $1
|
||||||
'';
|
'';
|
||||||
in
|
in {
|
||||||
{
|
|
||||||
options.home.immutable-file = mkOption {
|
options.home.immutable-file = mkOption {
|
||||||
type = with types; attrsOf (submodule immutableFileOpts);
|
type = with types; attrsOf (submodule immutableFileOpts);
|
||||||
default = { };
|
default = {};
|
||||||
};
|
};
|
||||||
|
|
||||||
config = mkIf (cfg != { }) {
|
config = mkIf (cfg != {}) {
|
||||||
home.activation = mapAttrs'
|
home.activation =
|
||||||
(name: { src, dst }:
|
mapAttrs'
|
||||||
|
(name: {
|
||||||
|
src,
|
||||||
|
dst,
|
||||||
|
}:
|
||||||
nameValuePair
|
nameValuePair
|
||||||
"make-immutable-${name}"
|
"make-immutable-${name}"
|
||||||
(lib.hm.dag.entryAfter [ "writeBoundary" ] ''
|
(lib.hm.dag.entryAfter ["writeBoundary"] ''
|
||||||
${mkImmutableFile} ${dst} ${src}
|
${mkImmutableFile} ${dst} ${src}
|
||||||
''))
|
''))
|
||||||
cfg;
|
cfg;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
{ pkgs
|
{
|
||||||
, config
|
pkgs,
|
||||||
, ...
|
config,
|
||||||
|
...
|
||||||
}:
|
}:
|
||||||
# media - control and enjoy audio/video
|
# media - control and enjoy audio/video
|
||||||
{
|
{
|
||||||
@@ -23,8 +24,8 @@
|
|||||||
programs = {
|
programs = {
|
||||||
mpv = {
|
mpv = {
|
||||||
enable = true;
|
enable = true;
|
||||||
defaultProfiles = [ "gpu-hq" ];
|
defaultProfiles = ["gpu-hq"];
|
||||||
scripts = [ pkgs.mpvScripts.mpris ];
|
scripts = [pkgs.mpvScripts.mpris];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
{ pkgs
|
{pkgs, ...}: {
|
||||||
, ...
|
|
||||||
}: {
|
|
||||||
programs.ssh = {
|
programs.ssh = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
@@ -35,7 +33,7 @@
|
|||||||
Host gtr5
|
Host gtr5
|
||||||
HostName 192.168.5.172
|
HostName 192.168.5.172
|
||||||
Port 22
|
Port 22
|
||||||
|
|
||||||
Host um560
|
Host um560
|
||||||
HostName 192.168.5.173
|
HostName 192.168.5.173
|
||||||
Port 22
|
Port 22
|
||||||
|
|||||||
+54
-55
@@ -1,9 +1,12 @@
|
|||||||
# XDG stands for "Cross-Desktop Group", with X used to mean "cross".
|
# XDG stands for "Cross-Desktop Group", with X used to mean "cross".
|
||||||
# It's a bunch of specifications from freedesktop.org intended to standardize desktops and
|
# It's a bunch of specifications from freedesktop.org intended to standardize desktops and
|
||||||
# other GUI applications on various systems (primarily Unix-like) to be interoperable:
|
# other GUI applications on various systems (primarily Unix-like) to be interoperable:
|
||||||
# https://www.freedesktop.org/wiki/Specifications/
|
# https://www.freedesktop.org/wiki/Specifications/
|
||||||
{ config, pkgs, ... }:
|
|
||||||
{
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
xdg-utils # provides cli tools such as `xdg-mime` `xdg-open`
|
xdg-utils # provides cli tools such as `xdg-mime` `xdg-open`
|
||||||
xdg-user-dirs
|
xdg-user-dirs
|
||||||
@@ -15,68 +18,64 @@
|
|||||||
|
|
||||||
# manage $XDG_CONFIG_HOME/mimeapps.list
|
# manage $XDG_CONFIG_HOME/mimeapps.list
|
||||||
# xdg search all desktop entries from $XDG_DATA_DIRS, check it by command:
|
# xdg search all desktop entries from $XDG_DATA_DIRS, check it by command:
|
||||||
# echo $XDG_DATA_DIRS
|
# echo $XDG_DATA_DIRS
|
||||||
# the system-level desktop entries can be list by command:
|
# the system-level desktop entries can be list by command:
|
||||||
# ls -l /run/current-system/sw/share/applications/
|
# ls -l /run/current-system/sw/share/applications/
|
||||||
# the user-level desktop entries can be list by command(user ryan):
|
# the user-level desktop entries can be list by command(user ryan):
|
||||||
# ls /etc/profiles/per-user/ryan/share/applications/
|
# ls /etc/profiles/per-user/ryan/share/applications/
|
||||||
mimeApps = {
|
mimeApps = {
|
||||||
enable = true;
|
enable = true;
|
||||||
defaultApplications =
|
defaultApplications = let
|
||||||
let
|
browser = ["firefox.desktop"];
|
||||||
browser = [ "firefox.desktop" ];
|
in {
|
||||||
in
|
"application/json" = browser;
|
||||||
{
|
"application/pdf" = browser; # TODO: pdf viewer
|
||||||
"application/json" = browser;
|
|
||||||
"application/pdf" = browser; # TODO: pdf viewer
|
|
||||||
|
|
||||||
"text/html" = browser;
|
"text/html" = browser;
|
||||||
"text/xml" = browser;
|
"text/xml" = browser;
|
||||||
"application/xml" = browser;
|
"application/xml" = browser;
|
||||||
"application/xhtml+xml" = browser;
|
"application/xhtml+xml" = browser;
|
||||||
"application/xhtml_xml" = browser;
|
"application/xhtml_xml" = browser;
|
||||||
"application/rdf+xml" = browser;
|
"application/rdf+xml" = browser;
|
||||||
"application/rss+xml" = browser;
|
"application/rss+xml" = browser;
|
||||||
"application/x-extension-htm" = browser;
|
"application/x-extension-htm" = browser;
|
||||||
"application/x-extension-html" = browser;
|
"application/x-extension-html" = browser;
|
||||||
"application/x-extension-shtml" = browser;
|
"application/x-extension-shtml" = browser;
|
||||||
"application/x-extension-xht" = browser;
|
"application/x-extension-xht" = browser;
|
||||||
"application/x-extension-xhtml" = browser;
|
"application/x-extension-xhtml" = browser;
|
||||||
|
|
||||||
"x-scheme-handler/about" = browser;
|
"x-scheme-handler/about" = browser;
|
||||||
"x-scheme-handler/ftp" = browser;
|
"x-scheme-handler/ftp" = browser;
|
||||||
"x-scheme-handler/http" = browser;
|
"x-scheme-handler/http" = browser;
|
||||||
"x-scheme-handler/https" = browser;
|
"x-scheme-handler/https" = browser;
|
||||||
"x-scheme-handler/unknown" = browser;
|
"x-scheme-handler/unknown" = browser;
|
||||||
|
|
||||||
"x-scheme-handler/discord" = [ "discord.desktop" ];
|
"x-scheme-handler/discord" = ["discord.desktop"];
|
||||||
"x-scheme-handler/tg" = [ "telegramdesktop.desktop" ];
|
"x-scheme-handler/tg" = ["telegramdesktop.desktop"];
|
||||||
|
|
||||||
"audio/*" = [ "mpv.desktop" ];
|
"audio/*" = ["mpv.desktop"];
|
||||||
"video/*" = [ "mpv.dekstop" ];
|
"video/*" = ["mpv.dekstop"];
|
||||||
"image/*" = [ "imv.desktop" ];
|
"image/*" = ["imv.desktop"];
|
||||||
};
|
};
|
||||||
|
|
||||||
associations.removed =
|
associations.removed = let
|
||||||
let
|
browser = ["google-chrome.desktop"];
|
||||||
browser = [ "google-chrome.desktop" ];
|
in {
|
||||||
in
|
"text/html" = browser;
|
||||||
{
|
"text/xml" = browser;
|
||||||
"text/html" = browser;
|
"application/xml" = browser;
|
||||||
"text/xml" = browser;
|
"application/xhtml+xml" = browser;
|
||||||
"application/xml" = browser;
|
"application/xhtml_xml" = browser;
|
||||||
"application/xhtml+xml" = browser;
|
"application/rdf+xml" = browser;
|
||||||
"application/xhtml_xml" = browser;
|
"application/rss+xml" = browser;
|
||||||
"application/rdf+xml" = browser;
|
"image/gif" = browser;
|
||||||
"application/rss+xml" = browser;
|
"image/jpeg" = browser;
|
||||||
"image/gif" = browser;
|
"image/png" = browser;
|
||||||
"image/jpeg" = browser;
|
"image/webp" = browser;
|
||||||
"image/png" = browser;
|
"x-scheme-handler/http" = browser;
|
||||||
"image/webp" = browser;
|
"x-scheme-handler/https" = browser;
|
||||||
"x-scheme-handler/http" = browser;
|
"application/pdf" = browser;
|
||||||
"x-scheme-handler/https" = browser;
|
};
|
||||||
"application/pdf" = browser;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
userDirs = {
|
userDirs = {
|
||||||
|
|||||||
@@ -1,12 +1,16 @@
|
|||||||
{ pkgs, config, lib, ... }: {
|
{
|
||||||
|
pkgs,
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
home.file.".config/fcitx5/profile".source = ./profile;
|
home.file.".config/fcitx5/profile".source = ./profile;
|
||||||
home.file.".config/fcitx5/profile-bak".source = ./profile; # used for backup
|
home.file.".config/fcitx5/profile-bak".source = ./profile; # used for backup
|
||||||
|
|
||||||
# every time fcitx5 switch input method, it will modify ~/.config/fcitx5/profile file,
|
# every time fcitx5 switch input method, it will modify ~/.config/fcitx5/profile file,
|
||||||
# which will override my config managed by home-manager
|
# which will override my config managed by home-manager
|
||||||
# so we need to remove it before everytime we rebuild the config
|
# so we need to remove it before everytime we rebuild the config
|
||||||
home.activation.removeExistingFcitx5Profile = lib.hm.dag.entryBefore [ "checkLinkTargets" ] ''
|
home.activation.removeExistingFcitx5Profile = lib.hm.dag.entryBefore ["checkLinkTargets"] ''
|
||||||
rm -f "${config.xdg.configHome}/fcitx5/profile"
|
rm -f "${config.xdg.configHome}/fcitx5/profile"
|
||||||
'';
|
'';
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
{ pkgs, ...}:
|
{pkgs, ...}: {
|
||||||
{
|
|
||||||
imports = [
|
imports = [
|
||||||
./wayland-apps.nix
|
./wayland-apps.nix
|
||||||
];
|
];
|
||||||
@@ -22,7 +21,6 @@
|
|||||||
home.file.".gtkrc-2.0".source = ./gtkrc-2.0;
|
home.file.".gtkrc-2.0".source = ./gtkrc-2.0;
|
||||||
home.file.".config/hypr/wallpapers/wallpaper.png".source = ../wallpapers/wallpaper.png;
|
home.file.".config/hypr/wallpapers/wallpaper.png".source = ../wallpapers/wallpaper.png;
|
||||||
|
|
||||||
|
|
||||||
# music player - mpd
|
# music player - mpd
|
||||||
home.file.".config/mpd" = {
|
home.file.".config/mpd" = {
|
||||||
source = ./mpd;
|
source = ./mpd;
|
||||||
@@ -58,5 +56,4 @@
|
|||||||
package = pkgs.qogir-theme;
|
package = pkgs.qogir-theme;
|
||||||
size = 64;
|
size = 64;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,18 +1,13 @@
|
|||||||
{ pkgs
|
{pkgs, ...}: {
|
||||||
, ...
|
|
||||||
}:
|
|
||||||
|
|
||||||
{
|
|
||||||
# TODO vscode & chrome both have wayland support, but they don't work with fcitx5, need to fix it.
|
# TODO vscode & chrome both have wayland support, but they don't work with fcitx5, need to fix it.
|
||||||
programs = {
|
programs = {
|
||||||
|
|
||||||
# source code: https://github.com/nix-community/home-manager/blob/master/modules/programs/chromium.nix
|
# source code: https://github.com/nix-community/home-manager/blob/master/modules/programs/chromium.nix
|
||||||
google-chrome = {
|
google-chrome = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
commandLineArgs = [
|
commandLineArgs = [
|
||||||
# make it use GTK_IM_MODULE if it runs with Gtk4, so fcitx5 can work with it.
|
# make it use GTK_IM_MODULE if it runs with Gtk4, so fcitx5 can work with it.
|
||||||
# (only supported by chromium/chrome at this time, not electron)
|
# (only supported by chromium/chrome at this time, not electron)
|
||||||
"--gtk-version=4"
|
"--gtk-version=4"
|
||||||
# make it use text-input-v1, which works for kwin 5.27 and weston
|
# make it use text-input-v1, which works for kwin 5.27 and weston
|
||||||
# "--enable-wayland-ime"
|
# "--enable-wayland-ime"
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
{ pkgs, ...}:
|
{pkgs, ...}: {
|
||||||
{
|
|
||||||
# i3 window manager's config, based on https://github.com/endeavouros-team/endeavouros-i3wm-setup
|
# i3 window manager's config, based on https://github.com/endeavouros-team/endeavouros-i3wm-setup
|
||||||
|
|
||||||
imports = [
|
imports = [
|
||||||
|
|||||||
@@ -1,15 +1,11 @@
|
|||||||
{ pkgs
|
{pkgs, ...}: {
|
||||||
, ...
|
|
||||||
}: {
|
|
||||||
home.packages = with pkgs; [
|
home.packages = with pkgs; [
|
||||||
firefox
|
firefox
|
||||||
xsel # for clipboard support in x11, required by tmux's clipboard support
|
xsel # for clipboard support in x11, required by tmux's clipboard support
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
# TODO vscode & chrome both have wayland support, but they don't work with fcitx5, need to fix it.
|
# TODO vscode & chrome both have wayland support, but they don't work with fcitx5, need to fix it.
|
||||||
programs = {
|
programs = {
|
||||||
|
|
||||||
# source code: https://github.com/nix-community/home-manager/blob/master/modules/programs/chromium.nix
|
# source code: https://github.com/nix-community/home-manager/blob/master/modules/programs/chromium.nix
|
||||||
google-chrome = {
|
google-chrome = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
{ ... }:
|
{ username, ... }: {
|
||||||
|
|
||||||
{
|
|
||||||
imports = [
|
imports = [
|
||||||
../base/server
|
../base/server
|
||||||
|
|
||||||
@@ -9,12 +7,9 @@
|
|||||||
|
|
||||||
# Home Manager needs a bit of information about you and the
|
# Home Manager needs a bit of information about you and the
|
||||||
# paths it should manage.
|
# paths it should manage.
|
||||||
home = let
|
home = {
|
||||||
name = "ryan";
|
username = username;
|
||||||
in
|
homeDirectory = "/home/${username}";
|
||||||
{
|
|
||||||
username = name;
|
|
||||||
homeDirectory = "/home/${name}";
|
|
||||||
|
|
||||||
# This value determines the Home Manager release that your
|
# This value determines the Home Manager release that your
|
||||||
# configuration is compatible with. This helps avoid breakage
|
# configuration is compatible with. This helps avoid breakage
|
||||||
|
|||||||
+20
-11
@@ -1,25 +1,34 @@
|
|||||||
{ ... } @ args:
|
{ username, ... } @ args:
|
||||||
|
|
||||||
#############################################################
|
#############################################################
|
||||||
#
|
#
|
||||||
# Harmonica - my MacBook Pro 2020 13-inch, mainly for business.
|
# Harmonica - my MacBook Pro 2020 13-inch, mainly for business.
|
||||||
#
|
#
|
||||||
#############################################################
|
#############################################################
|
||||||
|
|
||||||
let
|
let
|
||||||
name = "harmonica";
|
hostname = "harmonica";
|
||||||
in
|
in {
|
||||||
{
|
|
||||||
imports = [
|
imports = [
|
||||||
../../modules/darwin/core.nix
|
../../modules/darwin
|
||||||
../../modules/darwin/apps.nix
|
|
||||||
|
|
||||||
../../secrets/darwin.nix
|
../../secrets/darwin.nix
|
||||||
];
|
];
|
||||||
|
|
||||||
nixpkgs.overlays = import ../../overlays args;
|
nixpkgs.overlays = import ../../overlays args;
|
||||||
|
|
||||||
networking.hostName = name;
|
networking.hostName = hostname;
|
||||||
networking.computerName = name;
|
networking.computerName = hostname;
|
||||||
system.defaults.smb.NetBIOSName = name;
|
system.defaults.smb.NetBIOSName = hostname;
|
||||||
|
|
||||||
|
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||||
|
users.users."${username}" = {
|
||||||
|
home = "/Users/${username}";
|
||||||
|
description = username;
|
||||||
|
|
||||||
|
# set user's default shell back to zsh
|
||||||
|
# `chsh -s /bin/zsh`
|
||||||
|
# DO NOT change the system's default shell to nushell! it will break some apps!
|
||||||
|
# It's better to change only starship/alacritty/vscode's shell to nushell!
|
||||||
|
};
|
||||||
|
|
||||||
|
nix.settings.trusted-users = [username];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,12 @@
|
|||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
|
||||||
|
username,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
# mount a smb/cifs share
|
# mount a smb/cifs share
|
||||||
fileSystems."/home/ryan/SMB-Downloads" = {
|
fileSystems."/home/${username}/SMB-Downloads" = {
|
||||||
device = "//192.168.5.194/Downloads";
|
device = "//192.168.5.194/Downloads";
|
||||||
fsType = "cifs";
|
fsType = "cifs";
|
||||||
options = [
|
options = [
|
||||||
@@ -10,5 +14,3 @@
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+11
-12
@@ -1,11 +1,9 @@
|
|||||||
{ config, ... } @ args:
|
{config, ...} @ args:
|
||||||
|
|
||||||
#############################################################
|
#############################################################
|
||||||
#
|
#
|
||||||
# Ai - my main computer, with NixOS + I5-13600KF + RTX 4090 GPU, for gaming & daily use.
|
# Ai - my main computer, with NixOS + I5-13600KF + RTX 4090 GPU, for gaming & daily use.
|
||||||
#
|
#
|
||||||
#############################################################
|
#############################################################
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
./cifs-mount.nix
|
./cifs-mount.nix
|
||||||
@@ -24,7 +22,7 @@
|
|||||||
nixpkgs.overlays = import ../../../overlays args;
|
nixpkgs.overlays = import ../../../overlays args;
|
||||||
|
|
||||||
# Enable binfmt emulation of aarch64-linux, this is required for cross compilation.
|
# Enable binfmt emulation of aarch64-linux, this is required for cross compilation.
|
||||||
boot.binfmt.emulatedSystems = [ "aarch64-linux" "riscv64-linux" ];
|
boot.binfmt.emulatedSystems = ["aarch64-linux" "riscv64-linux"];
|
||||||
# supported fil systems, so we can mount any removable disks with these filesystems
|
# supported fil systems, so we can mount any removable disks with these filesystems
|
||||||
boot.supportedFilesystems = [
|
boot.supportedFilesystems = [
|
||||||
"ext4"
|
"ext4"
|
||||||
@@ -60,10 +58,12 @@
|
|||||||
enableIPv6 = false; # disable ipv6
|
enableIPv6 = false; # disable ipv6
|
||||||
interfaces.enp5s0 = {
|
interfaces.enp5s0 = {
|
||||||
useDHCP = false;
|
useDHCP = false;
|
||||||
ipv4.addresses = [{
|
ipv4.addresses = [
|
||||||
address = "192.168.5.100";
|
{
|
||||||
prefixLength = 24;
|
address = "192.168.5.100";
|
||||||
}];
|
prefixLength = 24;
|
||||||
|
}
|
||||||
|
];
|
||||||
};
|
};
|
||||||
defaultGateway = "192.168.5.201";
|
defaultGateway = "192.168.5.201";
|
||||||
nameservers = [
|
nameservers = [
|
||||||
@@ -75,17 +75,17 @@
|
|||||||
virtualisation.docker.storageDriver = "btrfs";
|
virtualisation.docker.storageDriver = "btrfs";
|
||||||
|
|
||||||
# for Nvidia GPU
|
# for Nvidia GPU
|
||||||
services.xserver.videoDrivers = [ "nvidia" ]; # will install nvidia-vaapi-driver by default
|
services.xserver.videoDrivers = ["nvidia"]; # will install nvidia-vaapi-driver by default
|
||||||
hardware.nvidia = {
|
hardware.nvidia = {
|
||||||
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
package = config.boot.kernelPackages.nvidiaPackages.stable;
|
||||||
modesetting.enable = true;
|
modesetting.enable = true;
|
||||||
powerManagement.enable = true;
|
powerManagement.enable = true;
|
||||||
};
|
};
|
||||||
virtualisation.docker.enableNvidia = true; # for nvidia-docker
|
virtualisation.docker.enableNvidia = true; # for nvidia-docker
|
||||||
|
|
||||||
hardware.opengl = {
|
hardware.opengl = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# if hardware.opengl.driSupport is enabled, mesa is installed and provides Vulkan for supported hardware.
|
# if hardware.opengl.driSupport is enabled, mesa is installed and provides Vulkan for supported hardware.
|
||||||
driSupport = true;
|
driSupport = true;
|
||||||
# needed by nvidia-docker
|
# needed by nvidia-docker
|
||||||
driSupport32Bit = true;
|
driSupport32Bit = true;
|
||||||
@@ -98,5 +98,4 @@
|
|||||||
# Before changing this value read the documentation for this option
|
# Before changing this value read the documentation for this option
|
||||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
system.stateVersion = "22.11"; # Did you read the comment?
|
system.stateVersion = "22.11"; # Did you read the comment?
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,34 +1,34 @@
|
|||||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||||
# and may be overwritten by future invocations. Please make changes
|
# and may be overwritten by future invocations. Please make changes
|
||||||
# to /etc/nixos/configuration.nix instead.
|
# to /etc/nixos/configuration.nix instead.
|
||||||
{ config, lib, pkgs, modulesPath, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports =
|
config,
|
||||||
[
|
lib,
|
||||||
(modulesPath + "/installer/scan/not-detected.nix")
|
pkgs,
|
||||||
];
|
modulesPath,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
imports = [
|
||||||
|
(modulesPath + "/installer/scan/not-detected.nix")
|
||||||
|
];
|
||||||
|
|
||||||
boot.initrd.availableKernelModules = [ "xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod" ];
|
boot.initrd.availableKernelModules = ["xhci_pci" "ahci" "nvme" "usbhid" "usb_storage" "sd_mod"];
|
||||||
boot.initrd.kernelModules = [ ];
|
boot.initrd.kernelModules = [];
|
||||||
boot.kernelModules = [ "kvm-intel" ];
|
boot.kernelModules = ["kvm-intel"];
|
||||||
boot.extraModulePackages = [ ];
|
boot.extraModulePackages = [];
|
||||||
|
|
||||||
fileSystems."/" =
|
fileSystems."/" = {
|
||||||
{
|
device = "/dev/disk/by-uuid/231466f6-cdf3-40e1-b9d2-6b4e8d10a4d3";
|
||||||
device = "/dev/disk/by-uuid/231466f6-cdf3-40e1-b9d2-6b4e8d10a4d3";
|
fsType = "btrfs";
|
||||||
fsType = "btrfs";
|
options = ["subvol=@"];
|
||||||
options = [ "subvol=@" ];
|
};
|
||||||
};
|
|
||||||
|
|
||||||
fileSystems."/boot/efi" =
|
fileSystems."/boot/efi" = {
|
||||||
{
|
device = "/dev/disk/by-uuid/87ED-8B2E";
|
||||||
device = "/dev/disk/by-uuid/87ED-8B2E";
|
fsType = "vfat";
|
||||||
fsType = "vfat";
|
};
|
||||||
};
|
|
||||||
|
|
||||||
swapDevices =
|
swapDevices = [{device = "/dev/disk/by-uuid/17391ca0-8cdb-4598-a40b-fd9548fd9b37";}];
|
||||||
[{ device = "/dev/disk/by-uuid/17391ca0-8cdb-4598-a40b-fd9548fd9b37"; }];
|
|
||||||
|
|
||||||
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
# Enables DHCP on each ethernet and wireless interface. In case of scripted networking
|
||||||
# (the default) this is the recommended approach. When using systemd-networkd it's
|
# (the default) this is the recommended approach. When using systemd-networkd it's
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{ ... } @args:
|
{...} @ args:
|
||||||
|
|
||||||
#############################################################
|
#############################################################
|
||||||
#
|
#
|
||||||
# Aquamarine - A NixOS VM running on Proxmox
|
# Aquamarine - A NixOS VM running on Proxmox
|
||||||
#
|
#
|
||||||
#############################################################
|
#############################################################
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
{
|
{
|
||||||
@@ -21,9 +19,8 @@
|
|||||||
|
|
||||||
nixpkgs.overlays = import ../../../overlays args;
|
nixpkgs.overlays = import ../../../overlays args;
|
||||||
|
|
||||||
|
|
||||||
# Enable binfmt emulation of aarch64-linux, this is required for cross compilation.
|
# Enable binfmt emulation of aarch64-linux, this is required for cross compilation.
|
||||||
boot.binfmt.emulatedSystems = [ "aarch64-linux" "riscv64-linux" ];
|
boot.binfmt.emulatedSystems = ["aarch64-linux" "riscv64-linux"];
|
||||||
# supported fil systems, so we can mount any removable disks with these filesystems
|
# supported fil systems, so we can mount any removable disks with these filesystems
|
||||||
boot.supportedFilesystems = [
|
boot.supportedFilesystems = [
|
||||||
"ext4"
|
"ext4"
|
||||||
@@ -48,10 +45,12 @@
|
|||||||
networkmanager.enable = true;
|
networkmanager.enable = true;
|
||||||
interfaces.ens18 = {
|
interfaces.ens18 = {
|
||||||
useDHCP = false;
|
useDHCP = false;
|
||||||
ipv4.addresses = [{
|
ipv4.addresses = [
|
||||||
address = "192.168.5.101";
|
{
|
||||||
prefixLength = 24;
|
address = "192.168.5.101";
|
||||||
}];
|
prefixLength = 24;
|
||||||
|
}
|
||||||
|
];
|
||||||
};
|
};
|
||||||
defaultGateway = "192.168.5.201";
|
defaultGateway = "192.168.5.201";
|
||||||
nameservers = [
|
nameservers = [
|
||||||
@@ -67,5 +66,4 @@
|
|||||||
# Before changing this value read the documentation for this option
|
# Before changing this value read the documentation for this option
|
||||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
system.stateVersion = "22.11"; # Did you read the comment?
|
system.stateVersion = "22.11"; # Did you read the comment?
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
{ ... } @args:
|
{...} @ args:
|
||||||
|
|
||||||
#############################################################
|
#############################################################
|
||||||
#
|
#
|
||||||
# Kana - a NixOS VM running on Proxmox
|
# Kana - a NixOS VM running on Proxmox
|
||||||
#
|
#
|
||||||
#############################################################
|
#############################################################
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
{
|
{
|
||||||
@@ -21,9 +19,8 @@
|
|||||||
|
|
||||||
nixpkgs.overlays = import ../../../overlays args;
|
nixpkgs.overlays = import ../../../overlays args;
|
||||||
|
|
||||||
|
|
||||||
# Enable binfmt emulation of aarch64-linux, this is required for cross compilation.
|
# Enable binfmt emulation of aarch64-linux, this is required for cross compilation.
|
||||||
boot.binfmt.emulatedSystems = [ "aarch64-linux" "riscv64-linux" ];
|
boot.binfmt.emulatedSystems = ["aarch64-linux" "riscv64-linux"];
|
||||||
# supported fil systems, so we can mount any removable disks with these filesystems
|
# supported fil systems, so we can mount any removable disks with these filesystems
|
||||||
boot.supportedFilesystems = [
|
boot.supportedFilesystems = [
|
||||||
"ext4"
|
"ext4"
|
||||||
@@ -48,10 +45,12 @@
|
|||||||
networkmanager.enable = true;
|
networkmanager.enable = true;
|
||||||
interfaces.ens18 = {
|
interfaces.ens18 = {
|
||||||
useDHCP = false;
|
useDHCP = false;
|
||||||
ipv4.addresses = [{
|
ipv4.addresses = [
|
||||||
address = "192.168.5.103";
|
{
|
||||||
prefixLength = 24;
|
address = "192.168.5.103";
|
||||||
}];
|
prefixLength = 24;
|
||||||
|
}
|
||||||
|
];
|
||||||
};
|
};
|
||||||
defaultGateway = "192.168.5.201";
|
defaultGateway = "192.168.5.201";
|
||||||
nameservers = [
|
nameservers = [
|
||||||
@@ -67,5 +66,4 @@
|
|||||||
# Before changing this value read the documentation for this option
|
# Before changing this value read the documentation for this option
|
||||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
system.stateVersion = "23.05"; # Did you read the comment?
|
system.stateVersion = "23.05"; # Did you read the comment?
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,9 @@
|
|||||||
{ ... } @args:
|
{...} @ args:
|
||||||
|
|
||||||
|
|
||||||
#############################################################
|
#############################################################
|
||||||
#
|
#
|
||||||
# Ruby - a NixOS VM running on Proxmox
|
# Ruby - a NixOS VM running on Proxmox
|
||||||
#
|
#
|
||||||
#############################################################
|
#############################################################
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
imports = [
|
imports = [
|
||||||
{
|
{
|
||||||
@@ -23,9 +19,8 @@
|
|||||||
|
|
||||||
nixpkgs.overlays = import ../../../overlays args;
|
nixpkgs.overlays = import ../../../overlays args;
|
||||||
|
|
||||||
|
|
||||||
# Enable binfmt emulation of aarch64-linux, this is required for cross compilation.
|
# Enable binfmt emulation of aarch64-linux, this is required for cross compilation.
|
||||||
boot.binfmt.emulatedSystems = [ "aarch64-linux" "riscv64-linux" ];
|
boot.binfmt.emulatedSystems = ["aarch64-linux" "riscv64-linux"];
|
||||||
# supported fil systems, so we can mount any removable disks with these filesystems
|
# supported fil systems, so we can mount any removable disks with these filesystems
|
||||||
boot.supportedFilesystems = [
|
boot.supportedFilesystems = [
|
||||||
"ext4"
|
"ext4"
|
||||||
@@ -50,10 +45,12 @@
|
|||||||
networkmanager.enable = true;
|
networkmanager.enable = true;
|
||||||
interfaces.ens18 = {
|
interfaces.ens18 = {
|
||||||
useDHCP = false;
|
useDHCP = false;
|
||||||
ipv4.addresses = [{
|
ipv4.addresses = [
|
||||||
address = "192.168.5.102";
|
{
|
||||||
prefixLength = 24;
|
address = "192.168.5.102";
|
||||||
}];
|
prefixLength = 24;
|
||||||
|
}
|
||||||
|
];
|
||||||
};
|
};
|
||||||
defaultGateway = "192.168.5.201";
|
defaultGateway = "192.168.5.201";
|
||||||
nameservers = [
|
nameservers = [
|
||||||
@@ -69,5 +66,4 @@
|
|||||||
# Before changing this value read the documentation for this option
|
# Before changing this value read the documentation for this option
|
||||||
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
# (e.g. man configuration.nix or on https://nixos.org/nixos/options.html).
|
||||||
system.stateVersion = "23.05"; # Did you read the comment?
|
system.stateVersion = "23.05"; # Did you read the comment?
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
nix-darwin,
|
||||||
|
home-manager,
|
||||||
|
system,
|
||||||
|
specialArgs,
|
||||||
|
darwin-modules,
|
||||||
|
home-module,
|
||||||
|
}: let
|
||||||
|
username = specialArgs.username;
|
||||||
|
in
|
||||||
|
nix-darwin.lib.darwinSystem {
|
||||||
|
inherit system specialArgs;
|
||||||
|
modules =
|
||||||
|
darwin-modules
|
||||||
|
++ [
|
||||||
|
home-manager.darwinModules.home-manager
|
||||||
|
{
|
||||||
|
home-manager.useGlobalPkgs = true;
|
||||||
|
home-manager.useUserPackages = true;
|
||||||
|
|
||||||
|
home-manager.extraSpecialArgs = specialArgs;
|
||||||
|
home-manager.users."${username}" = home-module;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
{
|
||||||
|
nixpkgs,
|
||||||
|
home-manager,
|
||||||
|
nixos-generators,
|
||||||
|
system,
|
||||||
|
specialArgs,
|
||||||
|
nixos-modules,
|
||||||
|
home-module,
|
||||||
|
}: let
|
||||||
|
username = specialArgs.username;
|
||||||
|
in
|
||||||
|
nixpkgs.lib.nixosSystem {
|
||||||
|
inherit system specialArgs;
|
||||||
|
modules =
|
||||||
|
nixos-modules
|
||||||
|
++ [
|
||||||
|
nixos-generators.nixosModules.all-formats
|
||||||
|
{
|
||||||
|
# formatConfigs.iso = {config, ...}: {};
|
||||||
|
formatConfigs.proxmox = {config, ...}: {
|
||||||
|
# custom proxmox's image name
|
||||||
|
proxmox.qemuConf.name = "${config.networking.hostName}-nixos-${config.system.nixos.label}";
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
home-manager.nixosModules.home-manager
|
||||||
|
{
|
||||||
|
home-manager.useGlobalPkgs = true;
|
||||||
|
home-manager.useUserPackages = true;
|
||||||
|
|
||||||
|
home-manager.extraSpecialArgs = specialArgs;
|
||||||
|
home-manager.users."${username}" = home-module;
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
+53
-156
@@ -1,140 +1,35 @@
|
|||||||
{ pkgs, ...}: {
|
{pkgs, ...}: {
|
||||||
|
|
||||||
##########################################################################
|
##########################################################################
|
||||||
#
|
|
||||||
# MacOS specific nix-darwin configuration
|
|
||||||
#
|
#
|
||||||
# Nix is not well supported on macOS, I met some strange bug recently.
|
# Install all apps and packages here.
|
||||||
# So install apps using [homebrew](https://daiderd.com/nix-darwin/manual/index.html#opt-homebrew.enable) here.
|
#
|
||||||
#
|
# NOTE: Your can find all available options in:
|
||||||
|
# https://daiderd.com/nix-darwin/manual/index.html
|
||||||
|
#
|
||||||
|
# TODO Fell free to modify this file to fit your needs.
|
||||||
|
#
|
||||||
##########################################################################
|
##########################################################################
|
||||||
|
|
||||||
system = {
|
# Install packages from nix's official package repository.
|
||||||
|
#
|
||||||
|
# The packages installed here are available to all users, and are reproducible across machines, and are rollbackable.
|
||||||
|
# But on macOS, it's less stable than homebrew.
|
||||||
|
#
|
||||||
|
# Related Discussion: https://discourse.nixos.org/t/darwin-again/29331
|
||||||
|
environment.systemPackages = with pkgs; [
|
||||||
|
neovim
|
||||||
|
git
|
||||||
|
nushell # my custom shell
|
||||||
|
];
|
||||||
|
environment.variables.EDITOR = "nvim";
|
||||||
|
|
||||||
# activationScripts are executed every time you boot the system or run `nixos-rebuild` / `darwin-rebuild`.
|
# Create /etc/zshrc that loads the nix-darwin environment.
|
||||||
activationScripts.postUserActivation.text = ''
|
# this is required if you want to use darwin's default shell - zsh
|
||||||
# activateSettings -u will reload the settings from the database and apply them to the current session,
|
programs.zsh.enable = true;
|
||||||
# so we do not need to logout and login again to make the changes take effect.
|
environment.shells = [
|
||||||
/System/Library/PrivateFrameworks/SystemAdministration.framework/Resources/activateSettings -u
|
pkgs.zsh
|
||||||
'';
|
pkgs.nushell # my custom shell
|
||||||
|
];
|
||||||
defaults = {
|
|
||||||
menuExtraClock.Show24Hour = true; # show 24 hour clock
|
|
||||||
|
|
||||||
# customize dock
|
|
||||||
dock = {
|
|
||||||
autohide = true;
|
|
||||||
show-recents = false; # disable recent apps
|
|
||||||
|
|
||||||
# customize Hot Corners(触发角, 鼠标移动到屏幕角落时触发的动作)
|
|
||||||
wvous-tl-corner = 2; # top-left - Mission Control
|
|
||||||
wvous-tr-corner = 13; # top-right - Lock Screen
|
|
||||||
wvous-bl-corner = 3; # bottom-left - Application Windows
|
|
||||||
wvous-br-corner = 4; # bottom-right - Desktop
|
|
||||||
};
|
|
||||||
|
|
||||||
# customize finder
|
|
||||||
finder = {
|
|
||||||
_FXShowPosixPathInTitle = true; # show full path in finder title
|
|
||||||
AppleShowAllExtensions = true; # show all file extensions
|
|
||||||
FXEnableExtensionChangeWarning = false; # disable warning when changing file extension
|
|
||||||
QuitMenuItem = true; # enable quit menu item
|
|
||||||
ShowPathbar = true; # show path bar
|
|
||||||
ShowStatusBar = true; # show status bar
|
|
||||||
};
|
|
||||||
|
|
||||||
# customize trackpad
|
|
||||||
trackpad = {
|
|
||||||
# tap - 轻触触摸板, click - 点击触摸板
|
|
||||||
Clicking = true; # enable tap to click(轻触触摸板相当于点击)
|
|
||||||
TrackpadRightClick = true; # enable two finger right click
|
|
||||||
TrackpadThreeFingerDrag = true; # enable three finger drag
|
|
||||||
};
|
|
||||||
|
|
||||||
# customize macOS
|
|
||||||
NSGlobalDomain = {
|
|
||||||
# `defaults read NSGlobalDomain "xxx"`
|
|
||||||
"com.apple.swipescrolldirection" = true; # enable natural scrolling(default to true)
|
|
||||||
"com.apple.sound.beep.feedback" = 0; # disable beep sound when pressing volume up/down key
|
|
||||||
AppleInterfaceStyle = "Dark"; # dark mode
|
|
||||||
AppleKeyboardUIMode = 3; # Mode 3 enables full keyboard control.
|
|
||||||
ApplePressAndHoldEnabled = true; # enable press and hold
|
|
||||||
|
|
||||||
# If you press and hold certain keyboard keys when in a text area, the key’s character begins to repeat.
|
|
||||||
# This is very useful for vim users, they use `hjkl` to move cursor.
|
|
||||||
# sets how long it takes before it starts repeating.
|
|
||||||
InitialKeyRepeat = 15; # normal minimum is 15 (225 ms), maximum is 120 (1800 ms)
|
|
||||||
# sets how fast it repeats once it starts.
|
|
||||||
KeyRepeat = 3; # normal minimum is 2 (30 ms), maximum is 120 (1800 ms)
|
|
||||||
|
|
||||||
NSAutomaticCapitalizationEnabled = false; # disable auto capitalization(自动大写)
|
|
||||||
NSAutomaticDashSubstitutionEnabled = false; # disable auto dash substitution(智能破折号替换)
|
|
||||||
NSAutomaticPeriodSubstitutionEnabled = false; # disable auto period substitution(智能句号替换)
|
|
||||||
NSAutomaticQuoteSubstitutionEnabled = false; # disable auto quote substitution(智能引号替换)
|
|
||||||
NSAutomaticSpellingCorrectionEnabled = false; # disable auto spelling correction(自动拼写检查)
|
|
||||||
NSNavPanelExpandedStateForSaveMode = true; # expand save panel by default(保存文件时的路径选择/文件名输入页)
|
|
||||||
NSNavPanelExpandedStateForSaveMode2 = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
# customize settings that not supported by nix-darwin directly
|
|
||||||
CustomUserPreferences = {
|
|
||||||
NSGlobalDomain = {
|
|
||||||
# Add a context menu item for showing the Web Inspector in web views
|
|
||||||
WebKitDeveloperExtras = true;
|
|
||||||
};
|
|
||||||
"com.apple.finder" = {
|
|
||||||
ShowExternalHardDrivesOnDesktop = true;
|
|
||||||
ShowHardDrivesOnDesktop = true;
|
|
||||||
ShowMountedServersOnDesktop = true;
|
|
||||||
ShowRemovableMediaOnDesktop = true;
|
|
||||||
_FXSortFoldersFirst = true;
|
|
||||||
# When performing a search, search the current folder by default
|
|
||||||
FXDefaultSearchScope = "SCcf";
|
|
||||||
};
|
|
||||||
"com.apple.desktopservices" = {
|
|
||||||
# Avoid creating .DS_Store files on network or USB volumes
|
|
||||||
DSDontWriteNetworkStores = true;
|
|
||||||
DSDontWriteUSBStores = true;
|
|
||||||
};
|
|
||||||
"com.apple.screensaver" = {
|
|
||||||
# Require password immediately after sleep or screen saver begins
|
|
||||||
askForPassword = 1;
|
|
||||||
askForPasswordDelay = 0;
|
|
||||||
};
|
|
||||||
"com.apple.screencapture" = {
|
|
||||||
location = "~/Desktop";
|
|
||||||
type = "png";
|
|
||||||
};
|
|
||||||
"com.apple.AdLib" = {
|
|
||||||
allowApplePersonalizedAdvertising = false;
|
|
||||||
};
|
|
||||||
# Prevent Photos from opening automatically when devices are plugged in
|
|
||||||
"com.apple.ImageCapture".disableHotPlug = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
loginwindow = {
|
|
||||||
GuestEnabled = false; # disable guest user
|
|
||||||
SHOWFULLNAME = true; # show full name in login window
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# keyboard settings is not very useful on macOS
|
|
||||||
# the most important thing is to remap option key to alt key globally,
|
|
||||||
# but it's not supported by macOS yet.
|
|
||||||
keyboard = {
|
|
||||||
enableKeyMapping = true; # enable key mapping so that we can use `option` as `control`
|
|
||||||
|
|
||||||
# NOTE: do NOT support remap capslock to both control and escape at the same time
|
|
||||||
remapCapsLockToControl = false; # remap caps lock to control, useful for emac users
|
|
||||||
remapCapsLockToEscape = true; # remap caps lock to escape, useful for vim users
|
|
||||||
|
|
||||||
# swap left command and left alt
|
|
||||||
# so it matches common keyboard layout: `ctrl | command | alt`
|
|
||||||
#
|
|
||||||
# disabled, caused only problems!
|
|
||||||
swapLeftCommandAndLeftAlt = false;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
# Homebrew Mirror
|
# Homebrew Mirror
|
||||||
environment.variables = {
|
environment.variables = {
|
||||||
@@ -145,12 +40,11 @@
|
|||||||
HOMEBREW_PIP_INDEX_URL = "https://pypi.tuna.tsinghua.edu.cn/simple";
|
HOMEBREW_PIP_INDEX_URL = "https://pypi.tuna.tsinghua.edu.cn/simple";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
# homebrew need to be installed manually, see https://brew.sh
|
# homebrew need to be installed manually, see https://brew.sh
|
||||||
homebrew = {
|
homebrew = {
|
||||||
# TODO Homebrew install takes a long time,
|
# TODO Homebrew install takes a long time,
|
||||||
# So only enable this when you make changes.
|
# So only enable this when you make changes.
|
||||||
enable = false;
|
enable = true;
|
||||||
|
|
||||||
onActivation = {
|
onActivation = {
|
||||||
autoUpdate = false;
|
autoUpdate = false;
|
||||||
@@ -161,12 +55,12 @@
|
|||||||
# Applications to install from Mac App Store using mas.
|
# Applications to install from Mac App Store using mas.
|
||||||
# You need to install all these Apps manually first so that your apple account have records for them.
|
# You need to install all these Apps manually first so that your apple account have records for them.
|
||||||
# otherwise Apple Store will refuse to install them.
|
# otherwise Apple Store will refuse to install them.
|
||||||
# For details, see https://github.com/mas-cli/mas
|
# For details, see https://github.com/mas-cli/mas
|
||||||
masApps = {
|
masApps = {
|
||||||
# Xcode = 497799835;
|
# Xcode = 497799835;
|
||||||
Wechat = 836500024;
|
Wechat = 836500024;
|
||||||
QQ = 451108668;
|
QQ = 451108668;
|
||||||
WeCom = 1189898970; # Wechat for Work
|
WeCom = 1189898970; # Wechat for Work
|
||||||
TecentMetting = 1484048379;
|
TecentMetting = 1484048379;
|
||||||
NeteaseCloudMusic = 944848654;
|
NeteaseCloudMusic = 944848654;
|
||||||
QQMusic = 595615424;
|
QQMusic = 595615424;
|
||||||
@@ -184,22 +78,25 @@
|
|||||||
|
|
||||||
brews = [
|
brews = [
|
||||||
# `brew install`
|
# `brew install`
|
||||||
"wget" # download tool
|
"wget" # download tool
|
||||||
"curl" # no not install curl via nixpkgs, it's not working well on macOS!
|
"curl" # no not install curl via nixpkgs, it's not working well on macOS!
|
||||||
"aria2" # download tool
|
"aria2" # download tool
|
||||||
"httpie" # http client
|
"httpie" # http client
|
||||||
"wireguard-tools" # wireguard
|
"wireguard-tools" # wireguard
|
||||||
|
|
||||||
# Usage:
|
# Usage:
|
||||||
# https://github.com/tailscale/tailscale/wiki/Tailscaled-on-macOS#run-the-tailscaled-daemon
|
# https://github.com/tailscale/tailscale/wiki/Tailscaled-on-macOS#run-the-tailscaled-daemon
|
||||||
# 1. `sudo tailscaled install-system-daemon`
|
# 1. `sudo tailscaled install-system-daemon`
|
||||||
# 2. `tailscale up --accept-routes`
|
# 2. `tailscale up --accept-routes`
|
||||||
"tailscale" # tailscale
|
"tailscale" # tailscale
|
||||||
|
|
||||||
|
# https://github.com/rgcr/m-cli
|
||||||
|
"m-cli" # Swiss Army Knife for macOS
|
||||||
];
|
];
|
||||||
|
|
||||||
# `brew install --cask`
|
# `brew install --cask`
|
||||||
casks = [
|
casks = [
|
||||||
"squirrel" # input method for Chinese, rime-squirrel
|
"squirrel" # input method for Chinese, rime-squirrel
|
||||||
|
|
||||||
"firefox"
|
"firefox"
|
||||||
"google-chrome"
|
"google-chrome"
|
||||||
@@ -213,20 +110,20 @@
|
|||||||
"microsoft-remote-desktop"
|
"microsoft-remote-desktop"
|
||||||
|
|
||||||
# "anki"
|
# "anki"
|
||||||
"clashx" # proxy tool
|
"clashx" # proxy tool
|
||||||
"iina" # video player
|
"iina" # video player
|
||||||
"openinterminal-lite" # open current folder in terminal
|
"openinterminal-lite" # open current folder in terminal
|
||||||
"syncthing" # file sync
|
"syncthing" # file sync
|
||||||
"raycast" # (HotKey: alt/option + space)search, caculate and run scripts(with many plugins)
|
"raycast" # (HotKey: alt/option + space)search, caculate and run scripts(with many plugins)
|
||||||
"iglance" # beautiful system monitor
|
"iglance" # beautiful system monitor
|
||||||
"eudic" # 欧路词典
|
"eudic" # 欧路词典
|
||||||
# "reaper" # audio editor
|
# "reaper" # audio editor
|
||||||
|
|
||||||
# Development
|
# Development
|
||||||
"insomnia" # REST client
|
"insomnia" # REST client
|
||||||
"wireshark" # network analyzer
|
"wireshark" # network analyzer
|
||||||
"jdk-mission-control" # Java Mission Control
|
"jdk-mission-control" # Java Mission Control
|
||||||
"google-cloud-sdk" # Google Cloud SDK
|
"google-cloud-sdk" # Google Cloud SDK
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,102 +0,0 @@
|
|||||||
|
|
||||||
{ pkgs, lib, ... }:
|
|
||||||
{
|
|
||||||
###################################################################################
|
|
||||||
#
|
|
||||||
# Core configuration for nix-darwin
|
|
||||||
#
|
|
||||||
# All the configuration options are documented here:
|
|
||||||
# https://daiderd.com/nix-darwin/manual/index.html#sec-options
|
|
||||||
#
|
|
||||||
###################################################################################
|
|
||||||
|
|
||||||
|
|
||||||
# enable flakes globally
|
|
||||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
|
||||||
|
|
||||||
nix.settings.trusted-users = ["ryan"];
|
|
||||||
|
|
||||||
# Allow unfree packages
|
|
||||||
nixpkgs.config.allowUnfree = true;
|
|
||||||
|
|
||||||
# Auto upgrade nix package and the daemon service.
|
|
||||||
services.nix-daemon.enable = true;
|
|
||||||
# Use this instead of services.nix-daemon.enable if you
|
|
||||||
# don't wan't the daemon service to be managed for you.
|
|
||||||
# nix.useDaemon = true;
|
|
||||||
|
|
||||||
nix.package = pkgs.nix;
|
|
||||||
|
|
||||||
programs.nix-index.enable = true;
|
|
||||||
|
|
||||||
# boot.loader.grub.configurationLimit = 10;
|
|
||||||
# do garbage collection weekly to keep disk usage low
|
|
||||||
nix.gc = {
|
|
||||||
automatic = lib.mkDefault true;
|
|
||||||
options = lib.mkDefault "--delete-older-than 1w";
|
|
||||||
};
|
|
||||||
|
|
||||||
# Manual optimise storage: nix-store --optimise
|
|
||||||
# https://nixos.org/manual/nix/stable/command-ref/conf-file.html#conf-auto-optimise-store
|
|
||||||
nix.settings.auto-optimise-store = true;
|
|
||||||
|
|
||||||
# Add ability to used TouchID for sudo authentication
|
|
||||||
security.pam.enableSudoTouchIdAuth = true;
|
|
||||||
|
|
||||||
# Set your time zone.
|
|
||||||
# comment this due to the issue:
|
|
||||||
# https://github.com/LnL7/nix-darwin/issues/359
|
|
||||||
# time.timeZone = "Asia/shanghai";
|
|
||||||
|
|
||||||
# Apps
|
|
||||||
# `home-manager` currently has issues adding them to `~/Applications`
|
|
||||||
# Issue: https://github.com/nix-community/home-manager/issues/1341
|
|
||||||
environment.systemPackages = with pkgs; [
|
|
||||||
neovim
|
|
||||||
git
|
|
||||||
nushell # my custom shell
|
|
||||||
];
|
|
||||||
|
|
||||||
environment.variables.EDITOR = "nvim";
|
|
||||||
|
|
||||||
# Fonts
|
|
||||||
fonts = {
|
|
||||||
# use fonts specified by user rather than default ones
|
|
||||||
fontDir.enable = true;
|
|
||||||
|
|
||||||
fonts = with pkgs; [
|
|
||||||
# icon fonts
|
|
||||||
material-design-icons
|
|
||||||
font-awesome
|
|
||||||
|
|
||||||
# nerdfonts
|
|
||||||
(nerdfonts.override {
|
|
||||||
fonts = [
|
|
||||||
"FiraCode"
|
|
||||||
"JetBrainsMono"
|
|
||||||
"Iosevka"
|
|
||||||
];
|
|
||||||
})
|
|
||||||
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
|
||||||
users.users.ryan = {
|
|
||||||
home = "/Users/ryan";
|
|
||||||
description = "ryan";
|
|
||||||
|
|
||||||
# set user's default shell back to zsh
|
|
||||||
# `chsh -s /bin/zsh`
|
|
||||||
# DO NOT change the system's default shell to nushell! it will break some apps!
|
|
||||||
# It's better to change only starship/alacritty/vscode's shell to nushell!
|
|
||||||
};
|
|
||||||
|
|
||||||
# Create /etc/zshrc that loads the nix-darwin environment.
|
|
||||||
# this is required if you want to use darwin's default shell - zsh
|
|
||||||
programs.zsh.enable = true;
|
|
||||||
environment.shells = [
|
|
||||||
pkgs.zsh
|
|
||||||
pkgs.nushell # my custom shell
|
|
||||||
];
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
imports = [
|
||||||
|
./apps.nix
|
||||||
|
./nix-core.nix
|
||||||
|
./system.nix
|
||||||
|
];
|
||||||
|
}
|
||||||
@@ -0,0 +1,41 @@
|
|||||||
|
{
|
||||||
|
pkgs,
|
||||||
|
lib,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
|
###################################################################################
|
||||||
|
#
|
||||||
|
# Core configuration for nix-darwin
|
||||||
|
#
|
||||||
|
# All the configuration options are documented here:
|
||||||
|
# https://daiderd.com/nix-darwin/manual/index.html#sec-options
|
||||||
|
#
|
||||||
|
###################################################################################
|
||||||
|
|
||||||
|
# enable flakes globally
|
||||||
|
nix.settings.experimental-features = ["nix-command" "flakes"];
|
||||||
|
|
||||||
|
# Allow unfree packages
|
||||||
|
nixpkgs.config.allowUnfree = true;
|
||||||
|
|
||||||
|
# Auto upgrade nix package and the daemon service.
|
||||||
|
services.nix-daemon.enable = true;
|
||||||
|
# Use this instead of services.nix-daemon.enable if you
|
||||||
|
# don't wan't the daemon service to be managed for you.
|
||||||
|
# nix.useDaemon = true;
|
||||||
|
|
||||||
|
nix.package = pkgs.nix;
|
||||||
|
|
||||||
|
programs.nix-index.enable = true;
|
||||||
|
|
||||||
|
# boot.loader.grub.configurationLimit = 10;
|
||||||
|
# do garbage collection weekly to keep disk usage low
|
||||||
|
nix.gc = {
|
||||||
|
automatic = lib.mkDefault true;
|
||||||
|
options = lib.mkDefault "--delete-older-than 1w";
|
||||||
|
};
|
||||||
|
|
||||||
|
# Manual optimise storage: nix-store --optimise
|
||||||
|
# https://nixos.org/manual/nix/stable/command-ref/conf-file.html#conf-auto-optimise-store
|
||||||
|
nix.settings.auto-optimise-store = true;
|
||||||
|
}
|
||||||
@@ -0,0 +1,165 @@
|
|||||||
|
{pkgs, ...}:
|
||||||
|
###################################################################################
|
||||||
|
#
|
||||||
|
# macOS's System configuration
|
||||||
|
#
|
||||||
|
# All the configuration options are documented here:
|
||||||
|
# https://daiderd.com/nix-darwin/manual/index.html#sec-options
|
||||||
|
#
|
||||||
|
###################################################################################
|
||||||
|
{
|
||||||
|
# Add ability to used TouchID for sudo authentication
|
||||||
|
security.pam.enableSudoTouchIdAuth = true;
|
||||||
|
|
||||||
|
system = {
|
||||||
|
# activationScripts are executed every time you boot the system or run `nixos-rebuild` / `darwin-rebuild`.
|
||||||
|
activationScripts.postUserActivation.text = ''
|
||||||
|
# activateSettings -u will reload the settings from the database and apply them to the current session,
|
||||||
|
# so we do not need to logout and login again to make the changes take effect.
|
||||||
|
/System/Library/PrivateFrameworks/SystemAdministration.framework/Resources/activateSettings -u
|
||||||
|
'';
|
||||||
|
|
||||||
|
defaults = {
|
||||||
|
menuExtraClock.Show24Hour = true; # show 24 hour clock
|
||||||
|
|
||||||
|
# customize dock
|
||||||
|
dock = {
|
||||||
|
autohide = true;
|
||||||
|
show-recents = false; # disable recent apps
|
||||||
|
|
||||||
|
# customize Hot Corners(触发角, 鼠标移动到屏幕角落时触发的动作)
|
||||||
|
wvous-tl-corner = 2; # top-left - Mission Control
|
||||||
|
wvous-tr-corner = 13; # top-right - Lock Screen
|
||||||
|
wvous-bl-corner = 3; # bottom-left - Application Windows
|
||||||
|
wvous-br-corner = 4; # bottom-right - Desktop
|
||||||
|
};
|
||||||
|
|
||||||
|
# customize finder
|
||||||
|
finder = {
|
||||||
|
_FXShowPosixPathInTitle = true; # show full path in finder title
|
||||||
|
AppleShowAllExtensions = true; # show all file extensions
|
||||||
|
FXEnableExtensionChangeWarning = false; # disable warning when changing file extension
|
||||||
|
QuitMenuItem = true; # enable quit menu item
|
||||||
|
ShowPathbar = true; # show path bar
|
||||||
|
ShowStatusBar = true; # show status bar
|
||||||
|
};
|
||||||
|
|
||||||
|
# customize trackpad
|
||||||
|
trackpad = {
|
||||||
|
# tap - 轻触触摸板, click - 点击触摸板
|
||||||
|
Clicking = true; # enable tap to click(轻触触摸板相当于点击)
|
||||||
|
TrackpadRightClick = true; # enable two finger right click
|
||||||
|
TrackpadThreeFingerDrag = true; # enable three finger drag
|
||||||
|
};
|
||||||
|
|
||||||
|
# customize macOS
|
||||||
|
NSGlobalDomain = {
|
||||||
|
# `defaults read NSGlobalDomain "xxx"`
|
||||||
|
"com.apple.swipescrolldirection" = true; # enable natural scrolling(default to true)
|
||||||
|
"com.apple.sound.beep.feedback" = 0; # disable beep sound when pressing volume up/down key
|
||||||
|
AppleInterfaceStyle = "Dark"; # dark mode
|
||||||
|
AppleKeyboardUIMode = 3; # Mode 3 enables full keyboard control.
|
||||||
|
ApplePressAndHoldEnabled = true; # enable press and hold
|
||||||
|
|
||||||
|
# If you press and hold certain keyboard keys when in a text area, the key’s character begins to repeat.
|
||||||
|
# This is very useful for vim users, they use `hjkl` to move cursor.
|
||||||
|
# sets how long it takes before it starts repeating.
|
||||||
|
InitialKeyRepeat = 15; # normal minimum is 15 (225 ms), maximum is 120 (1800 ms)
|
||||||
|
# sets how fast it repeats once it starts.
|
||||||
|
KeyRepeat = 3; # normal minimum is 2 (30 ms), maximum is 120 (1800 ms)
|
||||||
|
|
||||||
|
NSAutomaticCapitalizationEnabled = false; # disable auto capitalization(自动大写)
|
||||||
|
NSAutomaticDashSubstitutionEnabled = false; # disable auto dash substitution(智能破折号替换)
|
||||||
|
NSAutomaticPeriodSubstitutionEnabled = false; # disable auto period substitution(智能句号替换)
|
||||||
|
NSAutomaticQuoteSubstitutionEnabled = false; # disable auto quote substitution(智能引号替换)
|
||||||
|
NSAutomaticSpellingCorrectionEnabled = false; # disable auto spelling correction(自动拼写检查)
|
||||||
|
NSNavPanelExpandedStateForSaveMode = true; # expand save panel by default(保存文件时的路径选择/文件名输入页)
|
||||||
|
NSNavPanelExpandedStateForSaveMode2 = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
# customize settings that not supported by nix-darwin directly
|
||||||
|
CustomUserPreferences = {
|
||||||
|
NSGlobalDomain = {
|
||||||
|
# Add a context menu item for showing the Web Inspector in web views
|
||||||
|
WebKitDeveloperExtras = true;
|
||||||
|
};
|
||||||
|
"com.apple.finder" = {
|
||||||
|
ShowExternalHardDrivesOnDesktop = true;
|
||||||
|
ShowHardDrivesOnDesktop = true;
|
||||||
|
ShowMountedServersOnDesktop = true;
|
||||||
|
ShowRemovableMediaOnDesktop = true;
|
||||||
|
_FXSortFoldersFirst = true;
|
||||||
|
# When performing a search, search the current folder by default
|
||||||
|
FXDefaultSearchScope = "SCcf";
|
||||||
|
};
|
||||||
|
"com.apple.desktopservices" = {
|
||||||
|
# Avoid creating .DS_Store files on network or USB volumes
|
||||||
|
DSDontWriteNetworkStores = true;
|
||||||
|
DSDontWriteUSBStores = true;
|
||||||
|
};
|
||||||
|
"com.apple.screensaver" = {
|
||||||
|
# Require password immediately after sleep or screen saver begins
|
||||||
|
askForPassword = 1;
|
||||||
|
askForPasswordDelay = 0;
|
||||||
|
};
|
||||||
|
"com.apple.screencapture" = {
|
||||||
|
location = "~/Desktop";
|
||||||
|
type = "png";
|
||||||
|
};
|
||||||
|
"com.apple.AdLib" = {
|
||||||
|
allowApplePersonalizedAdvertising = false;
|
||||||
|
};
|
||||||
|
# Prevent Photos from opening automatically when devices are plugged in
|
||||||
|
"com.apple.ImageCapture".disableHotPlug = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
loginwindow = {
|
||||||
|
GuestEnabled = false; # disable guest user
|
||||||
|
SHOWFULLNAME = true; # show full name in login window
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# keyboard settings is not very useful on macOS
|
||||||
|
# the most important thing is to remap option key to alt key globally,
|
||||||
|
# but it's not supported by macOS yet.
|
||||||
|
keyboard = {
|
||||||
|
enableKeyMapping = true; # enable key mapping so that we can use `option` as `control`
|
||||||
|
|
||||||
|
# NOTE: do NOT support remap capslock to both control and escape at the same time
|
||||||
|
remapCapsLockToControl = false; # remap caps lock to control, useful for emac users
|
||||||
|
remapCapsLockToEscape = true; # remap caps lock to escape, useful for vim users
|
||||||
|
|
||||||
|
# swap left command and left alt
|
||||||
|
# so it matches common keyboard layout: `ctrl | command | alt`
|
||||||
|
#
|
||||||
|
# disabled, caused only problems!
|
||||||
|
swapLeftCommandAndLeftAlt = false;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# Set your time zone.
|
||||||
|
# comment this due to the issue:
|
||||||
|
# https://github.com/LnL7/nix-darwin/issues/359
|
||||||
|
# time.timeZone = "Asia/shanghai";
|
||||||
|
|
||||||
|
# Fonts
|
||||||
|
fonts = {
|
||||||
|
# use fonts specified by user rather than default ones
|
||||||
|
fontDir.enable = true;
|
||||||
|
|
||||||
|
fonts = with pkgs; [
|
||||||
|
# icon fonts
|
||||||
|
material-design-icons
|
||||||
|
font-awesome
|
||||||
|
|
||||||
|
# nerdfonts
|
||||||
|
(nerdfonts.override {
|
||||||
|
fonts = [
|
||||||
|
"FiraCode"
|
||||||
|
"JetBrainsMono"
|
||||||
|
"Iosevka"
|
||||||
|
];
|
||||||
|
})
|
||||||
|
];
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
{ lib, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
###################################################################################
|
###################################################################################
|
||||||
#
|
#
|
||||||
# NixOS's core configuration suitable for my desktop computer
|
# NixOS's core configuration suitable for my desktop computer
|
||||||
@@ -17,20 +19,6 @@
|
|||||||
# Enable CUPS to print documents.
|
# Enable CUPS to print documents.
|
||||||
services.printing.enable = true;
|
services.printing.enable = true;
|
||||||
|
|
||||||
# DO NOT promote ryan to input password for `nix-store` and `nix-copy-closure`
|
|
||||||
security.sudo.extraRules = [
|
|
||||||
{ users = [ "ryan" ];
|
|
||||||
commands = [
|
|
||||||
{ command = "/run/current-system/sw/bin/nix-store" ;
|
|
||||||
options = [ "NOPASSWD" ];
|
|
||||||
}
|
|
||||||
{ command = "/run/current-system/sw/bin/nix-copy-closure" ;
|
|
||||||
options = [ "NOPASSWD" ];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
# all fonts are linked to /nix/var/nix/profiles/system/sw/share/X11/fonts
|
# all fonts are linked to /nix/var/nix/profiles/system/sw/share/X11/fonts
|
||||||
fonts = {
|
fonts = {
|
||||||
# use fonts specified by user rather than default ones
|
# use fonts specified by user rather than default ones
|
||||||
@@ -65,17 +53,17 @@
|
|||||||
];
|
];
|
||||||
})
|
})
|
||||||
|
|
||||||
(pkgs.callPackage ../../fonts/icomoon-feather-icon-font.nix { })
|
(pkgs.callPackage ../../fonts/icomoon-feather-icon-font.nix {})
|
||||||
];
|
];
|
||||||
|
|
||||||
# user defined fonts
|
# user defined fonts
|
||||||
# the reason there's Noto Color Emoji everywhere is to override DejaVu's
|
# the reason there's Noto Color Emoji everywhere is to override DejaVu's
|
||||||
# B&W emojis that would sometimes show instead of some Color emojis
|
# B&W emojis that would sometimes show instead of some Color emojis
|
||||||
fontconfig.defaultFonts = {
|
fontconfig.defaultFonts = {
|
||||||
serif = [ "Noto Serif" "Noto Color Emoji" ];
|
serif = ["Noto Serif" "Noto Color Emoji"];
|
||||||
sansSerif = [ "Noto Sans" "Noto Color Emoji" ];
|
sansSerif = ["Noto Sans" "Noto Color Emoji"];
|
||||||
monospace = [ "JetBrainsMono Nerd Font" "Noto Color Emoji" ];
|
monospace = ["JetBrainsMono Nerd Font" "Noto Color Emoji"];
|
||||||
emoji = [ "Noto Color Emoji" ];
|
emoji = ["Noto Color Emoji"];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -99,7 +87,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
# The OpenSSH agent remembers private keys for you
|
# The OpenSSH agent remembers private keys for you
|
||||||
# so that you don’t have to type in passphrases every time you make an SSH connection.
|
# so that you don’t have to type in passphrases every time you make an SSH connection.
|
||||||
# Use `ssh-add` to add a key to the agent.
|
# Use `ssh-add` to add a key to the agent.
|
||||||
programs.ssh.startAgent = true;
|
programs.ssh.startAgent = true;
|
||||||
|
|
||||||
@@ -107,18 +95,19 @@
|
|||||||
# $ nix search wget
|
# $ nix search wget
|
||||||
environment.systemPackages = with pkgs; [
|
environment.systemPackages = with pkgs; [
|
||||||
# python, some times I may need to use python with root permission.
|
# python, some times I may need to use python with root permission.
|
||||||
(python310.withPackages (ps: with ps; [
|
(python310.withPackages (ps:
|
||||||
ipython
|
with ps; [
|
||||||
pandas
|
ipython
|
||||||
requests
|
pandas
|
||||||
pyquery
|
requests
|
||||||
pyyaml
|
pyquery
|
||||||
]))
|
pyyaml
|
||||||
|
]))
|
||||||
];
|
];
|
||||||
|
|
||||||
# PipeWire is a new low-level multimedia framework.
|
# PipeWire is a new low-level multimedia framework.
|
||||||
# It aims to offer capture and playback for both audio and video with minimal latency.
|
# It aims to offer capture and playback for both audio and video with minimal latency.
|
||||||
# It support for PulseAudio-, JACK-, ALSA- and GStreamer-based applications.
|
# It support for PulseAudio-, JACK-, ALSA- and GStreamer-based applications.
|
||||||
# PipeWire has a great bluetooth support, it can be a good alternative to PulseAudio.
|
# PipeWire has a great bluetooth support, it can be a good alternative to PulseAudio.
|
||||||
# https://nixos.wiki/wiki/PipeWire
|
# https://nixos.wiki/wiki/PipeWire
|
||||||
services.pipewire = {
|
services.pipewire = {
|
||||||
@@ -167,28 +156,27 @@
|
|||||||
services.gnome.gnome-keyring.enable = true;
|
services.gnome.gnome-keyring.enable = true;
|
||||||
security.pam.services.greetd.enableGnomeKeyring = true;
|
security.pam.services.greetd.enableGnomeKeyring = true;
|
||||||
|
|
||||||
|
# A key remapping daemon for linux.
|
||||||
# A key remapping daemon for linux.
|
|
||||||
# https://github.com/rvaiya/keyd
|
# https://github.com/rvaiya/keyd
|
||||||
services.keyd = {
|
services.keyd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
settings = {
|
settings = {
|
||||||
main = {
|
main = {
|
||||||
# overloads the capslock key to function as both escape (when tapped) and control (when held)
|
# overloads the capslock key to function as both escape (when tapped) and control (when held)
|
||||||
capslock = "overload(control, esc)";
|
capslock = "overload(control, esc)";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
services = {
|
services = {
|
||||||
dbus.packages = [ pkgs.gcr ];
|
dbus.packages = [pkgs.gcr];
|
||||||
|
|
||||||
geoclue2.enable = true;
|
geoclue2.enable = true;
|
||||||
|
|
||||||
udev.packages = with pkgs; [
|
udev.packages = with pkgs; [
|
||||||
gnome.gnome-settings-daemon
|
gnome.gnome-settings-daemon
|
||||||
platformio # udev rules for platformio
|
platformio # udev rules for platformio
|
||||||
openocd # required by paltformio, see https://github.com/NixOS/nixpkgs/issues/224895
|
openocd # required by paltformio, see https://github.com/NixOS/nixpkgs/issues/224895
|
||||||
android-udev-rules
|
android-udev-rules
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
{ lib, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
###################################################################################
|
###################################################################################
|
||||||
#
|
#
|
||||||
# NixOS's core configuration suitable for all my machines
|
# NixOS's core configuration suitable for all my machines
|
||||||
@@ -22,8 +24,7 @@
|
|||||||
nix.settings.auto-optimise-store = true;
|
nix.settings.auto-optimise-store = true;
|
||||||
|
|
||||||
# enable flakes globally
|
# enable flakes globally
|
||||||
nix.settings.experimental-features = [ "nix-command" "flakes" ];
|
nix.settings.experimental-features = ["nix-command" "flakes"];
|
||||||
|
|
||||||
|
|
||||||
# Allow unfree packages
|
# Allow unfree packages
|
||||||
nixpkgs.config.allowUnfree = lib.mkDefault false;
|
nixpkgs.config.allowUnfree = lib.mkDefault false;
|
||||||
@@ -74,14 +75,17 @@
|
|||||||
|
|
||||||
# create a fhs environment by command `fhs`, so we can run non-nixos packages in nixos!
|
# create a fhs environment by command `fhs`, so we can run non-nixos packages in nixos!
|
||||||
(
|
(
|
||||||
let base = pkgs.appimageTools.defaultFhsEnvArgs; in
|
let
|
||||||
pkgs.buildFHSUserEnv (base // {
|
base = pkgs.appimageTools.defaultFhsEnvArgs;
|
||||||
name = "fhs";
|
in
|
||||||
targetPkgs = pkgs: (base.targetPkgs pkgs) ++ [ pkgs.pkg-config ];
|
pkgs.buildFHSUserEnv (base
|
||||||
profile = "export FHS=1";
|
// {
|
||||||
runScript = "bash";
|
name = "fhs";
|
||||||
extraOutputsToInstall = [ "dev" ];
|
targetPkgs = pkgs: (base.targetPkgs pkgs) ++ [pkgs.pkg-config];
|
||||||
})
|
profile = "export FHS=1";
|
||||||
|
runScript = "bash";
|
||||||
|
extraOutputsToInstall = ["dev"];
|
||||||
|
})
|
||||||
)
|
)
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|||||||
+21
-21
@@ -1,33 +1,33 @@
|
|||||||
{ config, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
###################################################################################
|
###################################################################################
|
||||||
#
|
#
|
||||||
# Copy from https://github.com/NixOS/nixpkgs/issues/119433#issuecomment-1326957279
|
# Copy from https://github.com/NixOS/nixpkgs/issues/119433#issuecomment-1326957279
|
||||||
# Mainly for flatpak
|
# Mainly for flatpak
|
||||||
# 1. bindfs resolves all symlink,
|
# 1. bindfs resolves all symlink,
|
||||||
# 2. allowing all fonts to be accessed at `/usr/share/fonts`
|
# 2. allowing all fonts to be accessed at `/usr/share/fonts`
|
||||||
# 3. without letting /nix into the sandbox.
|
# 3. without letting /nix into the sandbox.
|
||||||
#
|
#
|
||||||
###################################################################################
|
###################################################################################
|
||||||
|
|
||||||
system.fsPackages = [ pkgs.bindfs ];
|
system.fsPackages = [pkgs.bindfs];
|
||||||
fileSystems =
|
fileSystems = let
|
||||||
let
|
mkRoSymBind = path: {
|
||||||
mkRoSymBind = path: {
|
device = path;
|
||||||
device = path;
|
fsType = "fuse.bindfs";
|
||||||
fsType = "fuse.bindfs";
|
options = ["ro" "resolve-symlinks" "x-gvfs-hide"];
|
||||||
options = [ "ro" "resolve-symlinks" "x-gvfs-hide" ];
|
|
||||||
};
|
|
||||||
aggregatedFonts = pkgs.buildEnv {
|
|
||||||
name = "system-fonts";
|
|
||||||
paths = config.fonts.fonts;
|
|
||||||
pathsToLink = [ "/share/fonts" ];
|
|
||||||
};
|
|
||||||
in
|
|
||||||
{
|
|
||||||
# Create an FHS mount to support flatpak host icons/fonts
|
|
||||||
"/usr/share/icons" = mkRoSymBind (config.system.path + "/share/icons");
|
|
||||||
"/usr/share/fonts" = mkRoSymBind (aggregatedFonts + "/share/fonts");
|
|
||||||
};
|
};
|
||||||
|
aggregatedFonts = pkgs.buildEnv {
|
||||||
|
name = "system-fonts";
|
||||||
|
paths = config.fonts.fonts;
|
||||||
|
pathsToLink = ["/share/fonts"];
|
||||||
|
};
|
||||||
|
in {
|
||||||
|
# Create an FHS mount to support flatpak host icons/fonts
|
||||||
|
"/usr/share/icons" = mkRoSymBind (config.system.path + "/share/icons");
|
||||||
|
"/usr/share/fonts" = mkRoSymBind (aggregatedFonts + "/share/fonts");
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,4 @@
|
|||||||
{ pkgs, ... }:
|
{pkgs, ...}: {
|
||||||
|
|
||||||
|
|
||||||
{
|
|
||||||
|
|
||||||
##########################################################################################################
|
##########################################################################################################
|
||||||
#
|
#
|
||||||
# NixOS's Configuration for Hyprland Window Manager
|
# NixOS's Configuration for Hyprland Window Manager
|
||||||
@@ -13,8 +9,7 @@
|
|||||||
#
|
#
|
||||||
##########################################################################################################
|
##########################################################################################################
|
||||||
|
|
||||||
|
environment.pathsToLink = ["/libexec"]; # links /libexec from derivations to /run/current-system/sw
|
||||||
environment.pathsToLink = [ "/libexec" ]; # links /libexec from derivations to /run/current-system/sw
|
|
||||||
services.xserver = {
|
services.xserver = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
@@ -44,7 +39,6 @@
|
|||||||
};
|
};
|
||||||
programs.light.enable = true; # monitor backlight control
|
programs.light.enable = true; # monitor backlight control
|
||||||
|
|
||||||
|
|
||||||
# thunar file manager(part of xfce) related options
|
# thunar file manager(part of xfce) related options
|
||||||
programs.thunar.plugins = with pkgs.xfce; [
|
programs.thunar.plugins = with pkgs.xfce; [
|
||||||
thunar-archive-plugin
|
thunar-archive-plugin
|
||||||
@@ -74,12 +68,12 @@
|
|||||||
yad # a fork of zenity, for creating dialogs
|
yad # a fork of zenity, for creating dialogs
|
||||||
|
|
||||||
# audio
|
# audio
|
||||||
alsa-utils # provides amixer/alsamixer/...
|
alsa-utils # provides amixer/alsamixer/...
|
||||||
cava # for visualizing audio
|
cava # for visualizing audio
|
||||||
mpd # for playing system sounds
|
mpd # for playing system sounds
|
||||||
mpc-cli # command-line mpd client
|
mpc-cli # command-line mpd client
|
||||||
ncmpcpp # a mpd client with a UI
|
ncmpcpp # a mpd client with a UI
|
||||||
networkmanagerapplet # provide GUI app: nm-connection-editor
|
networkmanagerapplet # provide GUI app: nm-connection-editor
|
||||||
|
|
||||||
xfce.thunar # xfce4's file manager
|
xfce.thunar # xfce4's file manager
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
{ pkgs, ... }:
|
{pkgs, ...}: {
|
||||||
|
|
||||||
{
|
|
||||||
####################################################################
|
####################################################################
|
||||||
#
|
#
|
||||||
# NixOS's Configuration for I3 Window Manager
|
# NixOS's Configuration for I3 Window Manager
|
||||||
@@ -8,7 +6,7 @@
|
|||||||
####################################################################
|
####################################################################
|
||||||
|
|
||||||
# i3 related options
|
# i3 related options
|
||||||
environment.pathsToLink = [ "/libexec" ]; # links /libexec from derivations to /run/current-system/sw
|
environment.pathsToLink = ["/libexec"]; # links /libexec from derivations to /run/current-system/sw
|
||||||
services.xserver = {
|
services.xserver = {
|
||||||
enable = true;
|
enable = true;
|
||||||
|
|
||||||
@@ -42,7 +40,7 @@
|
|||||||
xorg.xdpyinfo # get screen information
|
xorg.xdpyinfo # get screen information
|
||||||
scrot # minimal screen capture tool, used by i3 blur lock to take a screenshot
|
scrot # minimal screen capture tool, used by i3 blur lock to take a screenshot
|
||||||
sysstat # get system information
|
sysstat # get system information
|
||||||
alsa-utils # provides amixer/alsamixer/...
|
alsa-utils # provides amixer/alsamixer/...
|
||||||
|
|
||||||
xfce.thunar # xfce4's file manager
|
xfce.thunar # xfce4's file manager
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
|
|
||||||
{ lib, pkgs, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
lib,
|
||||||
|
pkgs,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
###################################################################################
|
###################################################################################
|
||||||
#
|
#
|
||||||
# Enable Libvirt(QEMU/KVM), install qemu-system-riscv64/qemu-system-loongarch64/...)
|
# Enable Libvirt(QEMU/KVM), install qemu-system-riscv64/qemu-system-loongarch64/...)
|
||||||
@@ -11,7 +12,7 @@
|
|||||||
virtualisation = {
|
virtualisation = {
|
||||||
libvirtd = {
|
libvirtd = {
|
||||||
enable = true;
|
enable = true;
|
||||||
# hanging this option to false may cause file permission issues for existing guests.
|
# hanging this option to false may cause file permission issues for existing guests.
|
||||||
# To fix these, manually change ownership of affected files in /var/lib/libvirt/qemu to qemu-libvirtd.
|
# To fix these, manually change ownership of affected files in /var/lib/libvirt/qemu to qemu-libvirtd.
|
||||||
qemu.runAsRoot = true;
|
qemu.runAsRoot = true;
|
||||||
};
|
};
|
||||||
@@ -37,12 +38,11 @@
|
|||||||
qemu_full
|
qemu_full
|
||||||
];
|
];
|
||||||
|
|
||||||
boot.kernelModules = [ "kvm-amd" "kvm-intel" ];
|
boot.kernelModules = ["kvm-amd" "kvm-intel"];
|
||||||
# Enable nested virsualization, required by security containers and nested vm.
|
# Enable nested virsualization, required by security containers and nested vm.
|
||||||
boot.extraModprobeConfig = "options kvm_intel nested=1"; # for intel cpu
|
boot.extraModprobeConfig = "options kvm_intel nested=1"; # for intel cpu
|
||||||
# boot.extraModprobeConfig = "options kvm_amd nested=1"; # for amd cpu
|
# boot.extraModprobeConfig = "options kvm_amd nested=1"; # for amd cpu
|
||||||
|
|
||||||
|
|
||||||
# NixOS VM should enable this:
|
# NixOS VM should enable this:
|
||||||
# services.qemuGuest = {
|
# services.qemuGuest = {
|
||||||
# enable = true;
|
# enable = true;
|
||||||
|
|||||||
@@ -1,24 +1,28 @@
|
|||||||
{ config, lib, ... }:
|
{
|
||||||
|
config,
|
||||||
|
lib,
|
||||||
|
username,
|
||||||
|
...
|
||||||
|
}:
|
||||||
##############################################################################
|
##############################################################################
|
||||||
#
|
#
|
||||||
# Template for Proxmox's VM, mainly based on:
|
# Template for Proxmox's VM, mainly based on:
|
||||||
# https://github.com/NixOS/nixpkgs/blob/nixos-unstable/nixos/modules/virtualisation/proxmox-image.nix
|
# https://github.com/NixOS/nixpkgs/blob/nixos-unstable/nixos/modules/virtualisation/proxmox-image.nix
|
||||||
#
|
#
|
||||||
# the url above is used by `nixos-generator` to generate the Proxmox's VMA image file.
|
# the url above is used by `nixos-generator` to generate the Proxmox's VMA image file.
|
||||||
#
|
#
|
||||||
##############################################################################
|
##############################################################################
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
# DO NOT promote ryan to input password for sudo.
|
# DO NOT promote ryan to input password for sudo.
|
||||||
# this is a workaround for the issue of remote deploy:
|
# this is a workaround for the issue of remote deploy:
|
||||||
# https://github.com/NixOS/nixpkgs/issues/118655
|
# https://github.com/NixOS/nixpkgs/issues/118655
|
||||||
security.sudo.extraRules = [
|
security.sudo.extraRules = [
|
||||||
{ users = [ "ryan" ];
|
{
|
||||||
|
users = [ username ];
|
||||||
commands = [
|
commands = [
|
||||||
{ command = "ALL" ;
|
{
|
||||||
options = [ "NOPASSWD" ];
|
command = "ALL";
|
||||||
|
options = ["NOPASSWD"];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -27,7 +31,7 @@
|
|||||||
boot = {
|
boot = {
|
||||||
# after resize the disk, it will grow partition automatically.
|
# after resize the disk, it will grow partition automatically.
|
||||||
growPartition = true;
|
growPartition = true;
|
||||||
kernelParams = [ "console=ttyS0" ];
|
kernelParams = ["console=ttyS0"];
|
||||||
loader.grub = {
|
loader.grub = {
|
||||||
device = "/dev/vda";
|
device = "/dev/vda";
|
||||||
|
|
||||||
@@ -36,8 +40,8 @@
|
|||||||
efiInstallAsRemovable = false;
|
efiInstallAsRemovable = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
loader.timeout = 3; # wait for 3 seconds to select the boot entry
|
loader.timeout = lib.mkForce 3; # wait for 3 seconds to select the boot entry
|
||||||
initrd.availableKernelModules = [ "uas" "virtio_blk" "virtio_pci" ];
|
initrd.availableKernelModules = ["uas" "virtio_blk" "virtio_pci"];
|
||||||
};
|
};
|
||||||
|
|
||||||
fileSystems."/" = {
|
fileSystems."/" = {
|
||||||
@@ -47,7 +51,6 @@
|
|||||||
};
|
};
|
||||||
# we do not have a /boot partition, so do not mount it.
|
# we do not have a /boot partition, so do not mount it.
|
||||||
|
|
||||||
|
|
||||||
# it alse had qemu-guest-agent installed by default.
|
# it alse had qemu-guest-agent installed by default.
|
||||||
services.qemuGuest.enable = lib.mkDefault true;
|
services.qemuGuest.enable = lib.mkDefault true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{ ... }: {
|
{ username, ... }:
|
||||||
|
{
|
||||||
####################################################################
|
####################################################################
|
||||||
#
|
#
|
||||||
# NixOS's Configuration for Remote Building / Distributed Building
|
# NixOS's Configuration for Remote Building / Distributed Building
|
||||||
@@ -8,68 +8,67 @@
|
|||||||
# 1. https://github.com/NixOS/nix/issues/7380
|
# 1. https://github.com/NixOS/nix/issues/7380
|
||||||
# 2. https://nixos.wiki/wiki/Distributed_build
|
# 2. https://nixos.wiki/wiki/Distributed_build
|
||||||
# 3. https://github.com/NixOS/nix/issues/2589
|
# 3. https://github.com/NixOS/nix/issues/2589
|
||||||
|
#
|
||||||
####################################################################
|
####################################################################
|
||||||
|
|
||||||
# set local's max-job to 0 to force remote building(disable local building)
|
# set local's max-job to 0 to force remote building(disable local building)
|
||||||
# nix.settings.max-jobs = 0;
|
# nix.settings.max-jobs = 0;
|
||||||
nix.distributedBuilds = true;
|
nix.distributedBuilds = true;
|
||||||
nix.buildMachines =
|
nix.buildMachines = let
|
||||||
let
|
sshUser = username;
|
||||||
sshUser = "ryan";
|
# ssh key's path on local machine
|
||||||
# ssh key's path on local machine
|
sshKey = "/home/${username}/.ssh/ai-idols";
|
||||||
sshKey = "/home/ryan/.ssh/ai-idols";
|
systems = [
|
||||||
systems = [
|
# native arch
|
||||||
# native arch
|
"x86_64-linux"
|
||||||
"x86_64-linux"
|
|
||||||
|
|
||||||
# emulated arch using binfmt_misc and qemu-user
|
# emulated arch using binfmt_misc and qemu-user
|
||||||
"aarch64-linux"
|
"aarch64-linux"
|
||||||
"riscv64-linux"
|
"riscv64-linux"
|
||||||
];
|
];
|
||||||
# all available system features are poorly documentd here:
|
# all available system features are poorly documentd here:
|
||||||
# https://github.com/NixOS/nix/blob/e503ead/src/libstore/globals.hh#L673-L687
|
# https://github.com/NixOS/nix/blob/e503ead/src/libstore/globals.hh#L673-L687
|
||||||
supportedFeatures = [
|
supportedFeatures = [
|
||||||
"benchmark"
|
"benchmark"
|
||||||
"big-parallel"
|
"big-parallel"
|
||||||
"kvm"
|
"kvm"
|
||||||
];
|
];
|
||||||
in
|
in [
|
||||||
[
|
# Nix seems always try to build on the machine remotely
|
||||||
# Nix seems always try to build on the machine remotely
|
# to make use of the local machine's high-performance CPU, do not set remote builder's maxJobs too high.
|
||||||
# to make use of the local machine's high-performance CPU, do not set remote builder's maxJobs too high.
|
{
|
||||||
{
|
# some of my remote builders are running NixOS
|
||||||
# some of my remote builders are running NixOS
|
# and has the same sshUser, sshKey, systems, etc.
|
||||||
# and has the same sshUser, sshKey, systems, etc.
|
inherit sshUser sshKey systems supportedFeatures;
|
||||||
inherit sshUser sshKey systems supportedFeatures;
|
|
||||||
|
|
||||||
# the hostName should be:
|
# the hostName should be:
|
||||||
# 1. a hostname that can be resolved by DNS
|
# 1. a hostname that can be resolved by DNS
|
||||||
# 2. the ip address of the remote builder
|
# 2. the ip address of the remote builder
|
||||||
# 3. a host alias defined globally in /etc/ssh/ssh_config
|
# 3. a host alias defined globally in /etc/ssh/ssh_config
|
||||||
hostName = "aquamarine";
|
hostName = "aquamarine";
|
||||||
# remote builder's max-job
|
# remote builder's max-job
|
||||||
maxJobs = 3;
|
maxJobs = 3;
|
||||||
# speedFactor's a signed integer
|
# speedFactor's a signed integer
|
||||||
# but it seems that it's not used by Nix, takes no effect
|
# but it seems that it's not used by Nix, takes no effect
|
||||||
speedFactor = 1;
|
speedFactor = 1;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
inherit sshUser sshKey systems supportedFeatures;
|
inherit sshUser sshKey systems supportedFeatures;
|
||||||
hostName = "ruby";
|
hostName = "ruby";
|
||||||
maxJobs = 2;
|
maxJobs = 2;
|
||||||
speedFactor = 1;
|
speedFactor = 1;
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
inherit sshUser sshKey systems supportedFeatures;
|
inherit sshUser sshKey systems supportedFeatures;
|
||||||
hostName = "kana";
|
hostName = "kana";
|
||||||
maxJobs = 2;
|
maxJobs = 2;
|
||||||
speedFactor = 1;
|
speedFactor = 1;
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
# optional, useful when the builder has a faster internet connection than yours
|
# optional, useful when the builder has a faster internet connection than yours
|
||||||
nix.extraOptions = ''
|
nix.extraOptions = ''
|
||||||
builders-use-substitutes = true
|
builders-use-substitutes = true
|
||||||
'';
|
'';
|
||||||
|
|
||||||
# define the host alias for remote builders
|
# define the host alias for remote builders
|
||||||
# this config will be written to /etc/ssh/ssh_config
|
# this config will be written to /etc/ssh/ssh_config
|
||||||
@@ -77,11 +76,11 @@
|
|||||||
Host ai
|
Host ai
|
||||||
HostName 192.168.5.100
|
HostName 192.168.5.100
|
||||||
Port 22
|
Port 22
|
||||||
|
|
||||||
Host aquamarine
|
Host aquamarine
|
||||||
HostName 192.168.5.101
|
HostName 192.168.5.101
|
||||||
Port 22
|
Port 22
|
||||||
|
|
||||||
Host ruby
|
Host ruby
|
||||||
HostName 192.168.5.102
|
HostName 192.168.5.102
|
||||||
Port 22
|
Port 22
|
||||||
@@ -96,19 +95,19 @@
|
|||||||
programs.ssh.knownHosts = {
|
programs.ssh.knownHosts = {
|
||||||
# 星野 愛久愛海, Hoshino Aquamarine
|
# 星野 愛久愛海, Hoshino Aquamarine
|
||||||
aquamarine = {
|
aquamarine = {
|
||||||
hostNames = [ "aquamarine" "192.168.5.101" ];
|
hostNames = ["aquamarine" "192.168.5.101"];
|
||||||
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDnCQXlllHoLX5EvU+t6yP/npsmuxKt0skHVeJashizE";
|
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDnCQXlllHoLX5EvU+t6yP/npsmuxKt0skHVeJashizE";
|
||||||
};
|
};
|
||||||
|
|
||||||
# 星野 瑠美衣, Hoshino Rubii
|
# 星野 瑠美衣, Hoshino Rubii
|
||||||
ruby = {
|
ruby = {
|
||||||
hostNames = [ "ruby" "192.168.5.102" ];
|
hostNames = ["ruby" "192.168.5.102"];
|
||||||
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE7n11XxB8B3HjdyAsL3PuLVDZxWCzEOUTJAY8+goQmW";
|
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIE7n11XxB8B3HjdyAsL3PuLVDZxWCzEOUTJAY8+goQmW";
|
||||||
};
|
};
|
||||||
|
|
||||||
# 有馬 かな, Arima Kana
|
# 有馬 かな, Arima Kana
|
||||||
kana = {
|
kana = {
|
||||||
hostNames = [ "kana" "192.168.5.103" ];
|
hostNames = ["kana" "192.168.5.103"];
|
||||||
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ3dDLOZERP1nZfRz3zIeVDm1q2Trer+fWFVvVXrgXM1";
|
publicKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJ3dDLOZERP1nZfRz3zIeVDm1q2Trer+fWFVvVXrgXM1";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,24 +1,24 @@
|
|||||||
{ ... }:
|
{ username, ... }:
|
||||||
|
|
||||||
{
|
{
|
||||||
nix.settings.trusted-users = ["ryan"];
|
nix.settings.trusted-users = [username];
|
||||||
|
|
||||||
users.groups = {
|
users.groups = {
|
||||||
ryan = { };
|
"${username}" = {};
|
||||||
docker = { };
|
docker = {};
|
||||||
wireshark = { };
|
wireshark = {};
|
||||||
};
|
};
|
||||||
# Define a user account. Don't forget to set a password with ‘passwd’.
|
# Define a user account. Don't forget to set a password with ‘passwd’.
|
||||||
users.users.ryan = {
|
users.users."${username}" = {
|
||||||
# the hashed password with salt is generated by run `mkpasswd`.
|
# the hashed password with salt is generated by run `mkpasswd`.
|
||||||
hashedPassword = "$y$j9T$YQu5vhlnogjDFDWp9QkPh0$Eu85OiwllqvLg5fzRVMLVHNO7InA3ro8grTJJIepyH1";
|
hashedPassword = "$y$j9T$YQu5vhlnogjDFDWp9QkPh0$Eu85OiwllqvLg5fzRVMLVHNO7InA3ro8grTJJIepyH1";
|
||||||
home = "/home/ryan";
|
home = "/home/${username}";
|
||||||
isNormalUser = true;
|
isNormalUser = true;
|
||||||
description = "ryan";
|
description = username;
|
||||||
extraGroups = [
|
extraGroups = [
|
||||||
"ryan"
|
username
|
||||||
"users"
|
"users"
|
||||||
"networkmanager"
|
"networkmanager"
|
||||||
"wheel"
|
"wheel"
|
||||||
"docker"
|
"docker"
|
||||||
"wireshark"
|
"wireshark"
|
||||||
@@ -29,4 +29,21 @@
|
|||||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDiipi59EnVbi6bK1bGrcbfEM263wgdNfbrt6VBC1rHx ryan@ai-idols"
|
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIDiipi59EnVbi6bK1bGrcbfEM263wgdNfbrt6VBC1rHx ryan@ai-idols"
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
# DO NOT promote the specified user to input password for `nix-store` and `nix-copy-closure`
|
||||||
|
security.sudo.extraRules = [
|
||||||
|
{
|
||||||
|
users = [username];
|
||||||
|
commands = [
|
||||||
|
{
|
||||||
|
command = "/run/current-system/sw/bin/nix-store";
|
||||||
|
options = ["NOPASSWD"];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = "/run/current-system/sw/bin/nix-copy-closure";
|
||||||
|
options = ["NOPASSWD"];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
args:
|
args:
|
||||||
# execute and import all overlay files in the current directory with the given args
|
# execute and import all overlay files in the current directory with the given args
|
||||||
builtins.map
|
builtins.map
|
||||||
(f: (import (./. + "/${f}") args)) # execute and import the overlay file
|
(f: (import (./. + "/${f}") args)) # execute and import the overlay file
|
||||||
(builtins.filter # find all overlay files in the current directory
|
|
||||||
(f: f != "default.nix")
|
(builtins.filter # find all overlay files in the current directory
|
||||||
(builtins.attrNames (builtins.readDir ./.)))
|
|
||||||
|
(f: f != "default.nix")
|
||||||
|
(builtins.attrNames (builtins.readDir ./.)))
|
||||||
|
|||||||
@@ -1,12 +1,10 @@
|
|||||||
# 为了不使用默认的 rime-data,改用我自定义的小鹤音形数据,这里需要 override
|
# 为了不使用默认的 rime-data,改用我自定义的小鹤音形数据,这里需要 override
|
||||||
# 参考 https://github.com/NixOS/nixpkgs/blob/e4246ae1e7f78b7087dce9c9da10d28d3725025f/pkgs/tools/inputmethods/fcitx5/fcitx5-rime.nix
|
# 参考 https://github.com/NixOS/nixpkgs/blob/e4246ae1e7f78b7087dce9c9da10d28d3725025f/pkgs/tools/inputmethods/fcitx5/fcitx5-rime.nix
|
||||||
{ ... }:
|
{...}: (self: super: {
|
||||||
|
|
||||||
(self: super: {
|
|
||||||
# 小鹤音形配置,配置来自 flypy.com 官方网盘的鼠须管配置压缩包「小鹤音形“鼠须管”for macOS.zip」
|
# 小鹤音形配置,配置来自 flypy.com 官方网盘的鼠须管配置压缩包「小鹤音形“鼠须管”for macOS.zip」
|
||||||
# 我仅修改了 default.yaml 文件,将其中的半角括号改为了直角括号「 与 」。
|
# 我仅修改了 default.yaml 文件,将其中的半角括号改为了直角括号「 与 」。
|
||||||
rime-data = ./rime-data-flypy;
|
rime-data = ./rime-data-flypy;
|
||||||
fcitx5-rime = super.fcitx5-rime.override { rimeDataPkgs = [ ./rime-data-flypy ]; };
|
fcitx5-rime = super.fcitx5-rime.override {rimeDataPkgs = [./rime-data-flypy];};
|
||||||
|
|
||||||
# used by macOS Squirrel
|
# used by macOS Squirrel
|
||||||
flypy-squirrel = ./rime-data-flypy;
|
flypy-squirrel = ./rime-data-flypy;
|
||||||
|
|||||||
+12
-8
@@ -1,7 +1,12 @@
|
|||||||
|
|
||||||
{ config, pkgs, agenix, mysecrets, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
agenix,
|
||||||
|
mysecrets,
|
||||||
|
|
||||||
|
username,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
imports = [
|
imports = [
|
||||||
agenix.darwinModules.default
|
agenix.darwinModules.default
|
||||||
];
|
];
|
||||||
@@ -11,8 +16,8 @@
|
|||||||
];
|
];
|
||||||
|
|
||||||
# if you changed this key, you need to regenerate all encrypt files from the decrypt contents!
|
# if you changed this key, you need to regenerate all encrypt files from the decrypt contents!
|
||||||
age.identityPaths = [
|
age.identityPaths = [
|
||||||
"/Users/ryan/.ssh/juliet-age" # macOS
|
"/Users/${username}/.ssh/juliet-age" # macOS
|
||||||
];
|
];
|
||||||
|
|
||||||
age.secrets = {
|
age.secrets = {
|
||||||
@@ -31,7 +36,7 @@
|
|||||||
|
|
||||||
# place secrets in /etc/
|
# place secrets in /etc/
|
||||||
environment.etc = {
|
environment.etc = {
|
||||||
# wireguard config used with `wg-quick up wg-business`
|
# wireguard config used with `wg-quick up wg-business`
|
||||||
# Fix DNS for WireGuard on macOS: https://github.com/ryan4yin/nix-config/issues/5
|
# Fix DNS for WireGuard on macOS: https://github.com/ryan4yin/nix-config/issues/5
|
||||||
"wireguard/wg-business.conf" = {
|
"wireguard/wg-business.conf" = {
|
||||||
source = config.age.secrets."wg-business.conf".path;
|
source = config.age.secrets."wg-business.conf".path;
|
||||||
@@ -39,7 +44,7 @@
|
|||||||
|
|
||||||
# The following secrets are used by home-manager modules
|
# The following secrets are used by home-manager modules
|
||||||
# But nix-darwin doesn't support environment.etc.<name>.mode
|
# But nix-darwin doesn't support environment.etc.<name>.mode
|
||||||
# So we need to change its mode manually
|
# So we need to change its mode manually
|
||||||
"agenix/alias-for-work.nushell" = {
|
"agenix/alias-for-work.nushell" = {
|
||||||
source = config.age.secrets."alias-for-work.nushell".path;
|
source = config.age.secrets."alias-for-work.nushell".path;
|
||||||
};
|
};
|
||||||
@@ -56,5 +61,4 @@
|
|||||||
system.activationScripts.postUserActivation.text = ''
|
system.activationScripts.postUserActivation.text = ''
|
||||||
sudo chmod 644 /etc/agenix/*
|
sudo chmod 644 /etc/agenix/*
|
||||||
'';
|
'';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+11
-6
@@ -1,7 +1,12 @@
|
|||||||
|
|
||||||
{ config, pkgs, agenix, mysecrets, ... }:
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
config,
|
||||||
|
pkgs,
|
||||||
|
agenix,
|
||||||
|
mysecrets,
|
||||||
|
|
||||||
|
username,
|
||||||
|
...
|
||||||
|
}: {
|
||||||
imports = [
|
imports = [
|
||||||
agenix.nixosModules.default
|
agenix.nixosModules.default
|
||||||
];
|
];
|
||||||
@@ -11,8 +16,8 @@
|
|||||||
];
|
];
|
||||||
|
|
||||||
# if you changed this key, you need to regenerate all encrypt files from the decrypt contents!
|
# if you changed this key, you need to regenerate all encrypt files from the decrypt contents!
|
||||||
age.identityPaths = [
|
age.identityPaths = [
|
||||||
"/home/ryan/.ssh/juliet-age" # Linux
|
"/home/${username}/.ssh/juliet-age" # Linux
|
||||||
];
|
];
|
||||||
|
|
||||||
# Used only by NixOS Modules
|
# Used only by NixOS Modules
|
||||||
@@ -37,7 +42,7 @@
|
|||||||
|
|
||||||
# place secrets in /etc/
|
# place secrets in /etc/
|
||||||
environment.etc = {
|
environment.etc = {
|
||||||
# wireguard config used with `wg-quick up wg-business`
|
# wireguard config used with `wg-quick up wg-business`
|
||||||
"wireguard/wg-business.conf" = {
|
"wireguard/wg-business.conf" = {
|
||||||
source = config.age.secrets."wg-business.conf".path;
|
source = config.age.secrets."wg-business.conf".path;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user