aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFuwn <[email protected]>2024-10-13 08:48:54 +0000
committerFuwn <[email protected]>2024-10-13 08:48:54 +0000
commit898acdb368307d9fff8f7605f24f42ca0ef19936 (patch)
tree6ad20068fa1ddf6dae13095ead7da8a3adaad84d
parentdocs(readme): update remote repository (diff)
downloadpia.nix-898acdb368307d9fff8f7605f24f42ca0ef19936.tar.xz
pia.nix-898acdb368307d9fff8f7605f24f42ca0ef19936.zip
feat(flake): helper commands
-rw-r--r--.gitignore1
-rw-r--r--README.md8
-rw-r--r--flake.nix155
3 files changed, 105 insertions, 59 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..e2f5dd2
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+result \ No newline at end of file
diff --git a/README.md b/README.md
index 54b5418..3975c13 100644
--- a/README.md
+++ b/README.md
@@ -40,14 +40,14 @@ attribute set.
```sh
# Activate VPN in a specific region
-sudo systemctl start openvpn-japan
+pia-start japan
# Deactivate VPN
-sudo systemctl stop openvpn-japan
+pia-stop japan
# List all available VPN regions
-ls /etc/systemd/system/ | grep openvpn
+pia-list
# List all available VPN regions with fuzzy search support
-ls /etc/systemd/system/ | awk '/openvpn/ { print $1 }' | fzf
+pia-search
```
diff --git a/flake.nix b/flake.nix
index 6f04811..734ea11 100644
--- a/flake.nix
+++ b/flake.nix
@@ -10,70 +10,115 @@
nixpkgs,
self,
}:
- flake-utils.lib.eachDefaultSystem (system: {
- nixosModules.default =
- { config, ... }:
- {
- options.services.pia = {
- enable = nixpkgs.lib.mkOption {
- default = false;
- type = nixpkgs.lib.types.bool;
- };
+ flake-utils.lib.eachDefaultSystem (
+ system:
+ let
+ pkgs = import nixpkgs {
+ inherit system;
+ };
+
+ lib = pkgs.lib;
+ in
+ {
+ packages =
+ let
+ makeShellScript =
+ name: action:
+ pkgs.writeScriptBin name ''
+ #!${pkgs.runtimeShell}
+
+ if [ "$(id -u)" -ne 0 ]; then
+ exec sudo "$0" "$@"
+ fi
+
+ ${action}
+ '';
+ in
+ {
+ pia-start = makeShellScript "pia-start" "sudo systemctl start openvpn-$1.service";
+ pia-stop = makeShellScript "pia-stop" "sudo systemctl stop openvpn-$1.service";
+ pia-list = makeShellScript "pia-list" "ls /etc/systemd/system/ | awk '/openvpn/ {gsub(/openvpn-|.service/, \"\"); print}'";
- authUserPass = {
- username = nixpkgs.lib.mkOption {
+ pia-search = makeShellScript "pia-search" "${
+ lib.getExe self.packages.${system}.pia-list
+ } | ${lib.getExe pkgs.fzf}";
+ };
+
+ nixosModules.default =
+ { config, ... }:
+ {
+ options.services.pia = {
+ enable = nixpkgs.lib.mkOption {
default = false;
- type = nixpkgs.lib.types.str;
+ type = nixpkgs.lib.types.bool;
};
- password = nixpkgs.lib.mkOption {
- default = false;
- type = nixpkgs.lib.types.str;
+ authUserPass = {
+ username = nixpkgs.lib.mkOption {
+ default = false;
+ type = nixpkgs.lib.types.str;
+ };
+
+ password = nixpkgs.lib.mkOption {
+ default = false;
+ type = nixpkgs.lib.types.str;
+ };
};
};
- };
- config = nixpkgs.lib.mkIf config.services.pia.enable {
- services.openvpn.servers =
- let
- resources = nixpkgs.legacyPackages.${system}.fetchzip {
- name = "pia-vpn-config";
- url = "https://www.privateinternetaccess.com/openvpn/openvpn.zip";
- sha256 = "ZA8RS6eIjMVQfBt+9hYyhaq8LByy5oJaO9Ed+x8KtW8=";
- stripRoot = false;
- };
- in
- builtins.listToAttrs (
- map
- (name: {
- name =
- (builtins.replaceStrings
- [
- ".ovpn"
- "_"
- ]
- [
- ""
- "-"
- ]
- )
- name;
+ config = nixpkgs.lib.mkIf config.services.pia.enable {
+ environment.systemPackages =
+ let
+ piaPackages = self.packages.${system};
+ in
+ [
+ piaPackages.pia-start
+ piaPackages.pia-stop
+ piaPackages.pia-list
+ piaPackages.pia-search
+ ];
- value = {
- inherit (config.services.pia) authUserPass;
+ services.openvpn.servers =
+ let
+ resources = nixpkgs.legacyPackages.${system}.fetchzip {
+ name = "pia-vpn-config";
+ url = "https://www.privateinternetaccess.com/openvpn/openvpn.zip";
+ sha256 = "ZA8RS6eIjMVQfBt+9hYyhaq8LByy5oJaO9Ed+x8KtW8=";
+ stripRoot = false;
+ };
+ in
+ builtins.listToAttrs (
+ map
+ (name: {
+ name =
+ (builtins.replaceStrings
+ [
+ ".ovpn"
+ "_"
+ ]
+ [
+ ""
+ "-"
+ ]
+ )
+ name;
- autoStart = false;
- config = "config ${resources}/${name}";
- updateResolvConf = true;
- };
- })
- (
- builtins.filter (name: (builtins.match ".+ovpn$" name) != null) (
- builtins.attrNames (builtins.readDir resources)
+ value = {
+ inherit (config.services.pia) authUserPass;
+
+ autoStart = false;
+ config = "config ${resources}/${name}";
+ updateResolvConf = true;
+ };
+ })
+ (
+ builtins.filter (name: (builtins.match ".+ovpn$" name) != null) (
+ builtins.attrNames (builtins.readDir resources)
+ )
)
- )
- );
+ );
+ };
};
- };
- });
+ }
+ );
}