mirror of
https://github.com/tomasriveral/nixos.git
synced 2026-10-10 17:02:43 +02:00
custom-vpn-picker: init
This commit is contained in:
1 parent
9fa7397f5c
commit
7cf6867ece
11 files changed
+144
-19
No files matched your search
@@ -569,6 +569,9 @@ secrets/
|
|||||||
|
|
||||||
Encrypted secrets should remain encrypted in Git. Decrypted secret contents and private keys should not be committed.
|
Encrypted secrets should remain encrypted in Git. Decrypted secret contents and private keys should not be committed.
|
||||||
|
|
||||||
|
* To edit a secret use `agenix -e <secret_file>.age -i /etc/ssh/ssh_host_ed25519_key`.
|
||||||
|
* To decrypt a secret use `sudo agenix -d <secret_file>.age -i /etc/ssh/ssh_host_ed25519_key`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Quickshell
|
# Quickshell
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{...}: {
|
_: {
|
||||||
flake.nixosModules.hyprland = {
|
flake.nixosModules.hyprland = {
|
||||||
pkgs,
|
pkgs,
|
||||||
pkgs-unstable,
|
pkgs-unstable,
|
||||||
@@ -93,6 +93,7 @@ let
|
|||||||
(builtins.readFile ../../other/hyprland/hyprland.lua);
|
(builtins.readFile ../../other/hyprland/hyprland.lua);
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
|
|
||||||
#refer to https://wiki.hypr.land/Nix/Hyprland-on-Home-Manager/
|
#refer to https://wiki.hypr.land/Nix/Hyprland-on-Home-Manager/
|
||||||
wayland.windowManager.hyprland.enable = true;
|
wayland.windowManager.hyprland.enable = true;
|
||||||
wayland.windowManager.hyprland.package = pkgs-unstable.hyprland;
|
wayland.windowManager.hyprland.package = pkgs-unstable.hyprland;
|
||||||
|
|||||||
@@ -1,13 +0,0 @@
|
|||||||
_: {
|
|
||||||
flake.nixosModules.mullvad = _: {
|
|
||||||
services.mullvad-vpn = {
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
flake.homeModules.mullvad = _: {
|
|
||||||
programs.mullvad-vpn = {
|
|
||||||
# gui
|
|
||||||
enable = true;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
}
|
|
||||||
@@ -38,7 +38,6 @@
|
|||||||
latex
|
latex
|
||||||
ly
|
ly
|
||||||
mathematics
|
mathematics
|
||||||
mullvad
|
|
||||||
networking
|
networking
|
||||||
nixUtils
|
nixUtils
|
||||||
notifications
|
notifications
|
||||||
@@ -51,6 +50,7 @@
|
|||||||
rss
|
rss
|
||||||
udev
|
udev
|
||||||
user
|
user
|
||||||
|
vpn
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
flake.homeModules.desktop = {...}: {
|
flake.homeModules.desktop = {...}: {
|
||||||
@@ -68,7 +68,6 @@
|
|||||||
hyprland-desktop
|
hyprland-desktop
|
||||||
kitty
|
kitty
|
||||||
librewolf
|
librewolf
|
||||||
mullvad
|
|
||||||
neovim
|
neovim
|
||||||
nix-git-cherry-picker-desktop
|
nix-git-cherry-picker-desktop
|
||||||
desktop-notewrapper
|
desktop-notewrapper
|
||||||
|
|||||||
@@ -42,7 +42,6 @@
|
|||||||
latex
|
latex
|
||||||
ly
|
ly
|
||||||
mathematics
|
mathematics
|
||||||
mullvad
|
|
||||||
networking
|
networking
|
||||||
nixUtils-laptop
|
nixUtils-laptop
|
||||||
nixUtils
|
nixUtils
|
||||||
@@ -55,6 +54,7 @@
|
|||||||
rss
|
rss
|
||||||
udev
|
udev
|
||||||
user
|
user
|
||||||
|
vpn
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
flake.homeModules.laptop = {...}: {
|
flake.homeModules.laptop = {...}: {
|
||||||
@@ -73,7 +73,6 @@
|
|||||||
hyprland-laptop
|
hyprland-laptop
|
||||||
kitty
|
kitty
|
||||||
librewolf
|
librewolf
|
||||||
mullvad
|
|
||||||
neovim
|
neovim
|
||||||
nix-git-cherry-picker-laptop
|
nix-git-cherry-picker-laptop
|
||||||
laptop-notewrapper
|
laptop-notewrapper
|
||||||
|
|||||||
@@ -44,6 +44,18 @@ _: {
|
|||||||
command = "${pkgs-unstable.nixos-rebuild}/bin/nixos-rebuild";
|
command = "${pkgs-unstable.nixos-rebuild}/bin/nixos-rebuild";
|
||||||
options = ["NOPASSWD"];
|
options = ["NOPASSWD"];
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
command = "/run/current-system/sw/bin/open";
|
||||||
|
options = ["NOPASSWD"];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = "${pkgs.openconnect}/bin/openconnect";
|
||||||
|
options = ["NOPASSWD"];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
command = "${pkgs-unstable.openconnect}/bin/openconnect";
|
||||||
|
options = ["NOPASSWD"];
|
||||||
|
}
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -13,5 +13,11 @@
|
|||||||
group = "users";
|
group = "users";
|
||||||
mode = "0400";
|
mode = "0400";
|
||||||
};
|
};
|
||||||
|
age.secrets.epfl = {
|
||||||
|
file = ../../secrets/epfl.age;
|
||||||
|
owner = "tomasr";
|
||||||
|
group = "users";
|
||||||
|
mode = "0400";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,100 @@
|
|||||||
|
# config for openconnect is in ./epfl.nix
|
||||||
|
{self, ...}: {
|
||||||
|
flake.nixosModules.vpn = {pkgs,...}: {
|
||||||
|
services.mullvad-vpn = {
|
||||||
|
enable = true;
|
||||||
|
};
|
||||||
|
environment.systemPackages = [
|
||||||
|
self.packages.${pkgs.system}.custom-vpn-picker
|
||||||
|
];
|
||||||
|
age.secrets.epfl = {
|
||||||
|
file = ../../secrets/epfl.age;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
perSystem = {pkgs, ...}: {
|
||||||
|
packages.custom-vpn-picker = pkgs.writeShellApplication {
|
||||||
|
name = "custom-vpn-picker";
|
||||||
|
|
||||||
|
runtimeInputs = with pkgs; [
|
||||||
|
fzf
|
||||||
|
mullvad-compass
|
||||||
|
mullvad
|
||||||
|
openconnect
|
||||||
|
gawk
|
||||||
|
wl-clipboard
|
||||||
|
cliphist
|
||||||
|
];
|
||||||
|
|
||||||
|
text = ''
|
||||||
|
mullvad_connect () {
|
||||||
|
mullvad disconnect
|
||||||
|
mullvad relay set location "$1"
|
||||||
|
mullvad connect
|
||||||
|
}
|
||||||
|
|
||||||
|
profiles=(
|
||||||
|
"mullvad-best"
|
||||||
|
"mullvad-zurich"
|
||||||
|
"mullvad-tirana"
|
||||||
|
"mullvad-bogota"
|
||||||
|
"epfl"
|
||||||
|
"disconnect"
|
||||||
|
)
|
||||||
|
|
||||||
|
selected=$(printf "%s\n" "''${profiles[@]}" |
|
||||||
|
fzf --height 8 --reverse --prompt="Select vpn:")
|
||||||
|
|
||||||
|
[[ -z "$selected" ]] && exit 0
|
||||||
|
|
||||||
|
if [[ "$selected" == "mullvad-best" ]]; then
|
||||||
|
mullvad_connect "$(
|
||||||
|
mullvad-compass |
|
||||||
|
awk '/Best server:/ {
|
||||||
|
getline
|
||||||
|
split($1, a, "-")
|
||||||
|
print a[1]
|
||||||
|
}'
|
||||||
|
)"
|
||||||
|
|
||||||
|
elif [[ "$selected" == "mullvad-zurich" ]]; then
|
||||||
|
mullvad_connect ch
|
||||||
|
|
||||||
|
elif [[ "$selected" == "mullvad-tirana" ]]; then
|
||||||
|
mullvad_connect al
|
||||||
|
|
||||||
|
elif [[ "$selected" == "mullvad-bogota" ]]; then
|
||||||
|
mullvad_connect co
|
||||||
|
|
||||||
|
elif [[ "$selected" == "epfl" ]]; then
|
||||||
|
# shellcheck disable=SC1091
|
||||||
|
source /run/agenix/epfl
|
||||||
|
|
||||||
|
# Put password in clipboard so it can be pasted into openconnect.
|
||||||
|
printf '%s' "$EPFL_VPN_PASSWORD" | wl-copy
|
||||||
|
|
||||||
|
sudo openconnect \
|
||||||
|
--background \
|
||||||
|
--pid-file="$HOME/.local/state/epfl-openconnect.pid" \
|
||||||
|
--server="$EPFL_VPN_SERVER" \
|
||||||
|
--user="$EPFL_VPN_USER"
|
||||||
|
|
||||||
|
# Remove the password from cliphist and clear the current clipboard.
|
||||||
|
cliphist delete-query "$EPFL_VPN_PASSWORD" || true
|
||||||
|
wl-copy --clear
|
||||||
|
|
||||||
|
elif [[ "$selected" == "disconnect" ]]; then
|
||||||
|
if [[ -f "$HOME/.local/state/epfl-openconnect.pid" ]]; then
|
||||||
|
sudo kill "$(cat "$HOME/.local/state/epfl-openconnect.pid")" 2>/dev/null || true
|
||||||
|
fi
|
||||||
|
|
||||||
|
mullvad disconnect
|
||||||
|
rm "$HOME/.local/state/epfl-openconnect.pid"
|
||||||
|
fi
|
||||||
|
|
||||||
|
pkill -f "kitty.*Select vpn option" || true
|
||||||
|
exit
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -300,7 +300,7 @@ hl.bind(mod .. " + D", hl.dsp.layout("move +col"))
|
|||||||
hl.bind(mod .. " + T", hl.dsp.exec_cmd(term))
|
hl.bind(mod .. " + T", hl.dsp.exec_cmd(term))
|
||||||
hl.bind(mod .. " + E", hl.dsp.exec_cmd(file))
|
hl.bind(mod .. " + E", hl.dsp.exec_cmd(file))
|
||||||
hl.bind(mod .. " + F", hl.dsp.exec_cmd(browser))
|
hl.bind(mod .. " + F", hl.dsp.exec_cmd(browser))
|
||||||
hl.bind(mod .. " + N", hl.dsp.exec_cmd(notes))
|
hl.bind(mod .. " + N", hl.dsp.exec_cmd("kitty --hold --class \"custom-vpn-picker\" --name \"Select vpn option\" custom-vpn-picker"))
|
||||||
hl.bind(mod .. " + SHIFT + A", hl.dsp.exec_cmd("caelestia shell drawers toggle launcher"))
|
hl.bind(mod .. " + SHIFT + A", hl.dsp.exec_cmd("caelestia shell drawers toggle launcher"))
|
||||||
hl.bind(mod .. " + Q", close_or_move_special)
|
hl.bind(mod .. " + Q", close_or_move_special)
|
||||||
local function toggle_sidebar()
|
local function toggle_sidebar()
|
||||||
@@ -812,6 +812,13 @@ hl.window_rule({
|
|||||||
float = true,
|
float = true,
|
||||||
size = "400 225",
|
size = "400 225",
|
||||||
})
|
})
|
||||||
|
hl.window_rule({
|
||||||
|
match = {
|
||||||
|
class = "^(custom-vpn-picker)$",
|
||||||
|
},
|
||||||
|
float = true,
|
||||||
|
size = "350 250",
|
||||||
|
})
|
||||||
|
|
||||||
hl.window_rule({
|
hl.window_rule({
|
||||||
match = {
|
match = {
|
||||||
|
|||||||
@@ -0,0 +1,7 @@
|
|||||||
|
age-encryption.org/v1
|
||||||
|
-> X25519 XuDyuQL0WjW/IvtzxswKnOfXlJa42Itdu+inNPsiNhw
|
||||||
|
3z2v3GbNdMvX9QtgAMrWZB/5Y1HatgpoXGQUMnW91+M
|
||||||
|
-> ssh-ed25519 +tvThg i3NM64rsEgRRgah4PKWdrl4i0pmP6X2bgr2Etzm33Ag
|
||||||
|
OwUETps78LPyjIAcJo8eC9eh0m9qtRUh399xGzMCTwQ
|
||||||
|
--- 7LnVrVnmfA8YubysLVeGyRGlLI+ef0VxnIHRi6rRAlc
|
||||||
|
W¾TîópF’X±áì‘làBTœÝ"^ï”�-þµ‹à¤û§÷Ÿ(üÛ'™ghÕóÎôGÜqx5FË~6Èï6DÎí¬gŒz…¾w·nñSÏHtß…ÌÂÓT«Úè›æŒÅó¤˜sød@°1!P""WHA$Ÿ�›,d68Ñ“õˆ�k“tù\qXÞHŽ®R=�vÕîŸZ
|
||||||
@@ -6,4 +6,8 @@ in {
|
|||||||
backupAgeKey
|
backupAgeKey
|
||||||
laptopHostKey
|
laptopHostKey
|
||||||
];
|
];
|
||||||
|
"epfl.age".publicKeys = [
|
||||||
|
backupAgeKey
|
||||||
|
laptopHostKey
|
||||||
|
];
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user