mirror of
https://github.com/tomasriveral/nixos.git
synced 2026-10-13 09:43:05 +02:00
Compare commits
38
Commits
1071ce70d7
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3ac5aaa396 | ||
|
|
21349e4585 | ||
|
|
1a19380962 | ||
|
|
f23ec09369 | ||
|
|
7d5ae9fa2c | ||
|
|
8f4117f3e7 | ||
|
|
bd97ba4df7 | ||
|
|
bd678ae32d | ||
|
|
3a51d3c14a | ||
|
|
9879131aca | ||
|
|
c2f733d4c9 | ||
|
|
44709a3b7c | ||
|
|
ce8c4f7d73 | ||
|
|
2f2d3cd2ba | ||
|
|
b738cbb8ef | ||
|
|
fdb4d53ec0 | ||
|
|
1a29fda1f9 | ||
|
|
bc5f00cf1d | ||
|
|
b760904557 | ||
|
|
28d56cf671 | ||
|
|
4db1f329f2 | ||
|
|
7afe2cf7b6 | ||
|
|
434e6ed31d | ||
|
|
f1e266331c | ||
|
|
f745a79af8 | ||
|
|
a99cb710b3 | ||
|
|
9805986c10 | ||
|
|
bc67f2b0e8 | ||
|
|
7cd934c58c | ||
|
|
6e3286419f | ||
|
|
c7781b7483 | ||
|
|
682a5c13df | ||
|
|
82bd78bc73 | ||
|
|
98bc46e67f | ||
|
|
07c2293f77 | ||
|
|
7f74878433 | ||
|
|
c235a0a724 | ||
|
|
3fc66623f2 |
No files matched your search
@@ -430,7 +430,6 @@ The macros in the layout generate combinations involving `CTRL`, `ALT`, `SUPER`,
|
||||
| Row 2, Col 2 | Change audio output (`CTRL + ALT + SHIFT + 0`) |
|
||||
| Row 2, Col 3 | Special characters (`CTRL + SUPER + 5`) |
|
||||
| Row 2, Col 4 | Color picker (`CTRL + ALT + 8`) |
|
||||
| Row 3, Col 1 | Pomodoro timer (`CTRL + ALT + 0`) |
|
||||
| Row 4, Col 1 | Launch Anki (`CTRL + ALT + 9`) |
|
||||
|
||||
The physical layout file contains additional transparent/unused positions, but the bindings above are the active shortcuts documented for the macropad.
|
||||
@@ -569,6 +568,9 @@ secrets/
|
||||
|
||||
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
|
||||
@@ -650,6 +652,7 @@ Some application state may need to be configured manually after installation:
|
||||
* Birdtray settings
|
||||
* Inkscape settings
|
||||
* other application-specific user data
|
||||
* git configuration
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -64,12 +64,15 @@
|
||||
flake = let
|
||||
system = "x86_64-linux";
|
||||
unfreePkgs = [
|
||||
"code"
|
||||
"hplip"
|
||||
"nvidia-x11"
|
||||
"nvidia-settings"
|
||||
"steam"
|
||||
"steam-unwrapped"
|
||||
"cheatsheet.nvim"
|
||||
"vscode"
|
||||
"vscode-fhs"
|
||||
"zoom-us"
|
||||
"zoom"
|
||||
];
|
||||
|
||||
@@ -402,6 +402,24 @@
|
||||
keyword = "nix function search";
|
||||
url = "https://noogle.dev";
|
||||
}
|
||||
{
|
||||
name = "EPFL Moodle";
|
||||
tags = ["epfl" "moodle"];
|
||||
keyword = "epfl moodle";
|
||||
url = "https://moodle.epfl.ch/my/courses.php";
|
||||
}
|
||||
{
|
||||
name = "EPFL ICC Courseware";
|
||||
tags = ["icc" "epfl" "courseware"];
|
||||
keyword = "icc epfl courseware";
|
||||
url = "https://courseware.epfl.ch/learner-dashboard/";
|
||||
}
|
||||
{
|
||||
name = "Detexify";
|
||||
tags = ["draw" "Latex" "symbols"];
|
||||
keyword = "draw latex symbols";
|
||||
url = "https://detexify.kirelabs.org/";
|
||||
}
|
||||
];
|
||||
};
|
||||
search = {
|
||||
|
||||
@@ -24,16 +24,16 @@
|
||||
inhibitWhenAudio = true;
|
||||
timeouts = [
|
||||
{
|
||||
timeout = 180;
|
||||
timeout = 1000;
|
||||
idleAction = "lock";
|
||||
}
|
||||
{
|
||||
timeout = 300;
|
||||
timeout = 1010;
|
||||
idleAction = "dpms off"; # what's that?
|
||||
returnAction = "dpms on";
|
||||
}
|
||||
{
|
||||
timeout = 600;
|
||||
timeout = 12200;
|
||||
idleAction = ["systemctl" "suspend-then-hibernate"];
|
||||
}
|
||||
];
|
||||
|
||||
@@ -3,6 +3,8 @@ _: {
|
||||
programs.git = {
|
||||
enable = true;
|
||||
/*
|
||||
for some reason this doesnt work really well. So it's best to setup git imperatively
|
||||
push.autoSetupRemote to true
|
||||
settings = {
|
||||
init.defaultBranch = "main";
|
||||
};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{...}: {
|
||||
_: {
|
||||
flake.nixosModules.hyprland = {
|
||||
pkgs,
|
||||
pkgs-unstable,
|
||||
@@ -35,23 +35,22 @@
|
||||
services.xserver.enable = true;
|
||||
};
|
||||
flake.homeModules.hyprland-laptop = {
|
||||
home.file.".config/hypr/host.lua" = {
|
||||
text = ''
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("qtbatticon")
|
||||
hl.exec_cmd("source /run/agenix/ntfy && nixpkgs-notifier listen")
|
||||
end)
|
||||
home.file.".config/hypr/host.lua" = {
|
||||
text = ''
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("qtbatticon")
|
||||
end)
|
||||
|
||||
hl.monitor({
|
||||
output = "eDP-1",
|
||||
mode = "highres@highrr",
|
||||
position = "0x0",
|
||||
scale = 1,
|
||||
})
|
||||
'';
|
||||
enable = true;
|
||||
force = true;
|
||||
};
|
||||
hl.monitor({
|
||||
output = "eDP-1",
|
||||
mode = "highres@highrr",
|
||||
position = "0x0",
|
||||
scale = 1,
|
||||
})
|
||||
'';
|
||||
enable = true;
|
||||
force = true;
|
||||
};
|
||||
};
|
||||
flake.homeModules.hyprland-desktop = {
|
||||
home.file.".config/hypr/host.lua" = {
|
||||
@@ -93,6 +92,7 @@ let
|
||||
(builtins.readFile ../../other/hyprland/hyprland.lua);
|
||||
in
|
||||
{
|
||||
|
||||
#refer to https://wiki.hypr.land/Nix/Hyprland-on-Home-Manager/
|
||||
wayland.windowManager.hyprland.enable = true;
|
||||
wayland.windowManager.hyprland.package = pkgs-unstable.hyprland;
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
flake.nixosModules.kdrive-desktop = {pkgs-unstable, ...}: {
|
||||
environment.systemPackages = with pkgs-unstable; [
|
||||
rclone
|
||||
icloudpd
|
||||
self.packages.${pkgs-unstable.system}.custom-checkKdrive
|
||||
self.packages.${pkgs-unstable.system}.custom-synckdrive-desktop
|
||||
];
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
_: {
|
||||
flake.nixosModules.mullvad = _: {
|
||||
services.mullvad-vpn = {
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
flake.homeModules.mullvad = _: {
|
||||
programs.mullvad-vpn = {
|
||||
# gui
|
||||
enable = true;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -8,7 +8,7 @@
|
||||
force = true;
|
||||
text = ''
|
||||
{
|
||||
"directory": ["~/kdrive/Notes/"],
|
||||
"directory": ["~/Documents/Notes/"],
|
||||
"render": true,
|
||||
"jumpToEndOfFileOnLaunch": true,
|
||||
"editor": "neovim",
|
||||
@@ -16,13 +16,17 @@
|
||||
"dateEntry": "# %Y %m %d %a",
|
||||
"newLineOnOpening": true,
|
||||
"backup": {
|
||||
"enable": false,
|
||||
"enable": true,
|
||||
"directory": {
|
||||
"~/Documents/Notes/": "~/kdrive/Notes/",
|
||||
"~/test/": "~/backupTest/"
|
||||
"~/Documents/Notes/": "~/kdrive/Notes/"
|
||||
},
|
||||
"interval": "daily",
|
||||
"rsyncArgs": ["-Lqah", "--update"]
|
||||
"rsyncArgs": ["-Lqah", "--update"],
|
||||
"git": {
|
||||
"enable": true,
|
||||
"name": "Tomas Rivera",
|
||||
"email": "tomas.riveral@icloud.com"
|
||||
}
|
||||
}
|
||||
}
|
||||
'';
|
||||
@@ -47,7 +51,7 @@
|
||||
"backup": {
|
||||
"enable": false,
|
||||
"directory": {
|
||||
"~/Documents/Notes/": "~/kdrive/Notes/",
|
||||
"~/Documents/Notes/": "~/hdd/kdrive/Notes/",
|
||||
"~/test/": "~/backupTest/"
|
||||
},
|
||||
"interval": "daily",
|
||||
|
||||
@@ -43,6 +43,11 @@ _: {
|
||||
enable = true;
|
||||
autosuggestion.enable = false; # zsh-autocomplete is replaced by deja
|
||||
initContent = ''
|
||||
# those aliases can't be written in nix, because of ö
|
||||
# l and ö are very close
|
||||
alias -- ös=ls
|
||||
alias -- öös=ls
|
||||
|
||||
# Safe cat that uses colorize plugin ccat
|
||||
custom-cat() {
|
||||
if [[ -t 1 ]]; then
|
||||
@@ -61,7 +66,11 @@ _: {
|
||||
}
|
||||
eval "$(direnv hook zsh)"
|
||||
eval "$(deja init zsh)"
|
||||
fastfetch''\n'';
|
||||
if [[ "$TERM_PROGRAM" != "vscode" ]]; then
|
||||
fastfetch
|
||||
fi
|
||||
|
||||
'';
|
||||
shellAliases = {
|
||||
".." = "z ..";
|
||||
grep = "rg";
|
||||
|
||||
@@ -336,184 +336,5 @@
|
||||
install -m755 qtbatticon $out/bin/
|
||||
'';
|
||||
};
|
||||
# This was replaced by caelestia shell's Game Mode
|
||||
packages.custom-performance = pkgs.writeShellApplication {
|
||||
name = "custom-performance";
|
||||
runtimeInputs = with pkgs; [
|
||||
hyprland
|
||||
brightnessctl
|
||||
swaynotificationcenter
|
||||
self.packages.${pkgs.system}.custom-wallpaper
|
||||
libnotify
|
||||
inputs.caelestia-shell.packages.${pkgs.system}.default
|
||||
];
|
||||
text = ''
|
||||
STATE="$HOME/.cache/hypr-battery-saver"
|
||||
|
||||
enable() {
|
||||
mkdir -p "$(dirname "$STATE")"
|
||||
|
||||
echo "Enabling battery saver mode..."
|
||||
|
||||
# Save brightness
|
||||
brightnessctl get > "''${STATE}.brightness" 2>/dev/null || true
|
||||
|
||||
# Kill heavy UI components
|
||||
pkill -f caelestia-shell || true
|
||||
pkill -f caelestia || true
|
||||
pkill shell || true
|
||||
pkill -f custom-wallpaper || true
|
||||
|
||||
# Start lightweight notifications
|
||||
pkill swaync || true
|
||||
swaync & disown
|
||||
|
||||
# Start lightweight waybar
|
||||
pkill waybar || true
|
||||
waybar & disown
|
||||
|
||||
# Lower refresh rate (BIGGEST win)
|
||||
hyprctl keyword monitor "eDP-1,2560x1600@60,0x0,1"
|
||||
|
||||
# Core performance toggles
|
||||
hyprctl --batch "\
|
||||
keyword animations:enabled 0;\
|
||||
keyword animation borderangle,0;\
|
||||
keyword decoration:shadow:enabled 0;\
|
||||
keyword decoration:blur:enabled 0;\
|
||||
keyword decoration:rounding 0;\
|
||||
keyword decoration:fullscreen_opacity 1;\
|
||||
keyword general:gaps_in 0;\
|
||||
keyword general:gaps_out 0;\
|
||||
keyword general:border_size 1;\
|
||||
keyword decoration:active_opacity 1;\
|
||||
keyword decoration:inactive_opacity 1;\
|
||||
keyword misc:vfr true"
|
||||
|
||||
# Lower brightness
|
||||
brightnessctl set 5% 2>/dev/null || true
|
||||
|
||||
touch "$STATE"
|
||||
|
||||
notify-send "Battery Saver" "Enabled"
|
||||
}
|
||||
|
||||
disable() {
|
||||
echo "Disabling battery saver mode..."
|
||||
|
||||
# Restore refresh rate
|
||||
hyprctl keyword monitor "eDP-1,2560x1600@165,0x0,1"
|
||||
|
||||
# Restore Caelestia
|
||||
pkill swaync || true
|
||||
pkill waybar || true
|
||||
caelestia shell -d >/dev/null 2>&1 &
|
||||
disown
|
||||
|
||||
|
||||
# Restart wallpaper
|
||||
custom-wallpaper >/dev/null 2>&1 &
|
||||
disown
|
||||
|
||||
# Restore full UI via reload (safe here on exit)
|
||||
hyprctl reload
|
||||
|
||||
# Restore brightness
|
||||
if [[ -f "''${STATE}.brightness" ]]; then
|
||||
brightnessctl set "$(cat "''${STATE}.brightness")" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
rm -f "$STATE" "''${STATE}.brightness"
|
||||
|
||||
notify-send "Battery Saver" "Disabled"
|
||||
}
|
||||
|
||||
if [[ -f "$STATE" ]]; then
|
||||
disable
|
||||
else
|
||||
enable
|
||||
fi
|
||||
'';
|
||||
};
|
||||
# Old script that was used for the battery. Might not work.
|
||||
packages.custom-olddeprecatedbatterynotify = pkgs.writeShellApplication {
|
||||
name = "custom-olddeprecatedbatterynotify";
|
||||
|
||||
runtimeInputs = with pkgs; [
|
||||
libnotify # provides notify-send
|
||||
systemd # provides systemctl
|
||||
];
|
||||
|
||||
text = ''
|
||||
set -euo pipefail
|
||||
|
||||
LOW="''${BATTERY_LOW_THRESHOLD:-20}"
|
||||
CRITICAL="''${BATTERY_CRITICAL_THRESHOLD:-5}"
|
||||
FULL="''${BATTERY_FULL_THRESHOLD:-95}"
|
||||
INTERVAL="''${BATTERY_INTERVAL:-30}"
|
||||
ACTION="''${BATTERY_CRITICAL_ACTION:-systemctl suspend}"
|
||||
|
||||
notify() {
|
||||
notify-send -a "Battery" -u "$1" "$2" "$3"
|
||||
}
|
||||
|
||||
get_info() {
|
||||
total=0
|
||||
count=0
|
||||
|
||||
for bat in /sys/class/power_supply/BAT*; do
|
||||
[ -f "$bat/capacity" ] || continue
|
||||
capacity=$(<"$bat/capacity")
|
||||
status=$(<"$bat/status")
|
||||
total=$((total + capacity))
|
||||
count=$((count + 1))
|
||||
done
|
||||
|
||||
[ "$count" -gt 0 ] || exit 0
|
||||
percentage=$((total / count))
|
||||
}
|
||||
|
||||
last_state=""
|
||||
|
||||
while true; do
|
||||
get_info
|
||||
|
||||
if [[ "$status" == "Discharging" && "$percentage" -le "$CRITICAL" ]]; then
|
||||
notify critical "Battery Critically Low" "$percentage% — suspending."
|
||||
$ACTION
|
||||
|
||||
elif [[ "$status" == "Discharging" && "$percentage" -le "$LOW" ]]; then
|
||||
if [[ "$last_state" != "low" ]]; then
|
||||
notify normal "Battery Low" "$percentage% remaining."
|
||||
last_state="low"
|
||||
fi
|
||||
|
||||
elif [[ "$status" != "Discharging" && "$percentage" -ge "$FULL" ]]; then
|
||||
if [[ "$last_state" != "full" ]]; then
|
||||
notify normal "Battery Full" "$percentage% — unplug charger."
|
||||
last_state="full"
|
||||
fi
|
||||
|
||||
else
|
||||
last_state=""
|
||||
fi
|
||||
|
||||
sleep "$INTERVAL"
|
||||
done
|
||||
'';
|
||||
};
|
||||
};
|
||||
flake.homeModules.cbatticon = _: {
|
||||
# don't works. some GTK error. I let it here if someday, someone is interest in this shit.
|
||||
# ChatGPT half baked a replacement that works on my system.
|
||||
# see qtbatticon
|
||||
services.cbatticon = {
|
||||
enable = true;
|
||||
lowLevelPercent = 20;
|
||||
criticalLevelPercent = 5;
|
||||
batteryId = "BAT1";
|
||||
hideNotification = true; # we use another script for battery notifications
|
||||
updateIntervalSeconds = 10;
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -1,10 +1,26 @@
|
||||
_: {
|
||||
flake.nixosModules.hardwareUtils-laptop = {pkgs, ...}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
flake.nixosModules.hardwareUtils-laptop = {pkgs-unstable, ...}: {
|
||||
environment.systemPackages = with pkgs-unstable; [
|
||||
# used for the framework 16 laptop
|
||||
framework-tool
|
||||
framework-tool-tui
|
||||
vial # Open-source GUI and QMK fork for configuring your keyboard in real time
|
||||
netwatch
|
||||
(diskwatch.override {
|
||||
withSmartmontools = true;
|
||||
})
|
||||
syswatch
|
||||
];
|
||||
services.fwupd.enable = true; # update device firmware
|
||||
};
|
||||
flake.nixosModules.hardwareUtils-desktop = {pkgs-unstable, ...}: {
|
||||
environment.systemPackages = with pkgs-unstable; [
|
||||
netwatch
|
||||
(diskwatch.override {
|
||||
withSmartmontools = true;
|
||||
})
|
||||
syswatch
|
||||
];
|
||||
services.fwupd.enable = true; # update device firmware
|
||||
};
|
||||
}
|
||||
@@ -29,6 +29,7 @@
|
||||
fonts
|
||||
games
|
||||
hardware-configuration-desktop
|
||||
hardwareUtils-desktop
|
||||
hdd
|
||||
hledger
|
||||
hledger-desktop
|
||||
@@ -38,7 +39,6 @@
|
||||
latex
|
||||
ly
|
||||
mathematics
|
||||
mullvad
|
||||
networking
|
||||
nixUtils
|
||||
notifications
|
||||
@@ -51,6 +51,7 @@
|
||||
rss
|
||||
udev
|
||||
user
|
||||
vpn
|
||||
];
|
||||
};
|
||||
flake.homeModules.desktop = {...}: {
|
||||
@@ -68,7 +69,6 @@
|
||||
hyprland-desktop
|
||||
kitty
|
||||
librewolf
|
||||
mullvad
|
||||
neovim
|
||||
nix-git-cherry-picker-desktop
|
||||
desktop-notewrapper
|
||||
|
||||
@@ -23,10 +23,12 @@
|
||||
bootloader
|
||||
browsers
|
||||
caelestia
|
||||
cs-119l # I'm obliged to use vscode. RIP neovim
|
||||
development
|
||||
documentation
|
||||
disk
|
||||
disk-laptop
|
||||
epfl
|
||||
fonts
|
||||
gitBackup
|
||||
hardware-configuration-laptop
|
||||
@@ -39,7 +41,6 @@
|
||||
latex
|
||||
ly
|
||||
mathematics
|
||||
mullvad
|
||||
networking
|
||||
nixUtils-laptop
|
||||
nixUtils
|
||||
@@ -51,6 +52,7 @@
|
||||
rss
|
||||
udev
|
||||
user
|
||||
vpn
|
||||
];
|
||||
};
|
||||
flake.homeModules.laptop = {...}: {
|
||||
@@ -69,7 +71,6 @@
|
||||
hyprland-laptop
|
||||
kitty
|
||||
librewolf
|
||||
mullvad
|
||||
neovim
|
||||
nix-git-cherry-picker-laptop
|
||||
laptop-notewrapper
|
||||
|
||||
@@ -44,6 +44,18 @@ _: {
|
||||
command = "${pkgs-unstable.nixos-rebuild}/bin/nixos-rebuild";
|
||||
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";
|
||||
mode = "0400";
|
||||
};
|
||||
age.secrets.epfl = {
|
||||
file = ../../secrets/epfl.age;
|
||||
owner = "tomasr";
|
||||
group = "users";
|
||||
mode = "0400";
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -4,8 +4,8 @@
|
||||
libnotify # Library that sends desktop notifications to a notification daemon
|
||||
socat # Utility for bidirectional data transfer between two independent data channels (used to communicate between hyprland and awww to change wallpapers dinamically)
|
||||
# battery notifications
|
||||
self.packages.${pkgs.system}.custom-batterynotify
|
||||
self.packages.${pkgs.system}.custom-batterywarning
|
||||
/*self.packages.${pkgs.system}.custom-batterynotify
|
||||
self.packages.${pkgs.system}.custom-batterywarning*/
|
||||
self.packages.${pkgs.system}.custom-gitnotify # checks if git is set up
|
||||
self.packages.${pkgs.system}.custom-checkKdrive # check if kdrive is set up with rclone
|
||||
zoom-us
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
{self, ...}: {
|
||||
flake.nixosModules.epfl = {pkgs, ...}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
openconnect
|
||||
self.packages.${pkgs.system}.custom-mountEpflDrive
|
||||
];
|
||||
};
|
||||
|
||||
flake.nixosModules.cs-119l = {pkgs, ...}: let
|
||||
user = "tomasr";
|
||||
home = "/home/${user}";
|
||||
src = "${home}/epfl/cs-119l-ICC/";
|
||||
dst = "${home}/kdrive/Travail/2 - Bachelor/BA1/Information, calcul, communication CS-119l/code/";
|
||||
in {
|
||||
environment.systemPackages = with pkgs; [
|
||||
vscode-fhs
|
||||
];
|
||||
systemd.services.sync-cs119l-to-kdrive = {
|
||||
description = "Sync CS-119l ICC to kDrive";
|
||||
|
||||
serviceConfig = {
|
||||
Type = "oneshot";
|
||||
User = user;
|
||||
|
||||
ExecStart = "${pkgs.rsync}/bin/rsync -a '${src}' '${dst}'";
|
||||
};
|
||||
};
|
||||
|
||||
systemd.timers.sync-cs119l-to-kdrive = {
|
||||
description = "Sync CS-119l ICC to kDrive every Thursday and Friday evening";
|
||||
|
||||
wantedBy = ["timers.target"];
|
||||
|
||||
timerConfig = {
|
||||
OnCalendar = [
|
||||
"Thu *-*-* 20:00:00"
|
||||
"Fri *-*-* 20:00:00"
|
||||
];
|
||||
Persistent = true;
|
||||
};
|
||||
};
|
||||
};
|
||||
perSystem = {pkgs, ...}: {
|
||||
packages.custom-mountEpflDrive = pkgs.writeShellApplication {
|
||||
name = "custom-mountEpflDrive";
|
||||
runtimeInputs = with pkgs; [
|
||||
rclone
|
||||
libnotify
|
||||
];
|
||||
text = ''
|
||||
REMOTE_NAME="epfl"
|
||||
MOUNT_POINT="$HOME/epfl/drive"
|
||||
|
||||
if rclone listremotes | rg "^''${REMOTE_NAME}:"; then
|
||||
echo "Mounting ''${REMOTE_NAME}..."
|
||||
rclone mount "''${REMOTE_NAME}:" "$MOUNT_POINT" --vfs-cache-mode writes --allow-non-empty &
|
||||
else
|
||||
notify-send "rclone mount failed" \
|
||||
"Remote ''${REMOTE_NAME} not found.\nConfigure rclone and create the dir ~/epfl/drive/ or comment out the exec line in hyprland.lua."
|
||||
echo "Remote ''${REMOTE_NAME} not found. Configure rclone or comment out the exec line in hyprland.lua."
|
||||
fi
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
@@ -45,6 +45,7 @@
|
||||
nix-index
|
||||
statix
|
||||
self.packages.${pkgs-unstable.system}.custom-trimmer
|
||||
nix-update # nix-update <package> --build --test --format # the review will be done by nixpkgs-review-gha
|
||||
];
|
||||
};
|
||||
perSystem = {pkgs, ...}: {
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{self, ...}: {
|
||||
flake.nixosModules.otherUtils =
|
||||
# try to keep packages here at a minium. Preferably use a dedicated file
|
||||
{pkgs, ...}: {
|
||||
{pkgs, pkgs-unstable, ...}: {
|
||||
environment.systemPackages = with pkgs; [
|
||||
gnome-calculator
|
||||
snapshot
|
||||
@@ -18,8 +18,7 @@
|
||||
usbutils # used for lsusb
|
||||
self.packages.${pkgs.system}.custom-tomato
|
||||
self.packages.${pkgs.system}.custom-syllabes
|
||||
# Electron 39 EOL. https://github.com/bitwarden/clients/pull/20448 should move it to 41. For the moment use the browser extension
|
||||
#pkgs-unstable.bitwarden-desktop
|
||||
pkgs-unstable.bitwarden-desktop
|
||||
fluffychat # matrix client
|
||||
];
|
||||
};
|
||||
|
||||
@@ -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
|
||||
'';
|
||||
};
|
||||
};
|
||||
}
|
||||
+155
-10
@@ -38,6 +38,7 @@ local function close_other_windows()
|
||||
end
|
||||
end
|
||||
|
||||
local wallpapers_enabled = true
|
||||
local wallpapers = {
|
||||
[1] = "WALLPAPER1/PATH/PLACEHOLDER",
|
||||
[2] = "WALLPAPER2/PATH/PLACEHOLDER",
|
||||
@@ -51,13 +52,144 @@ local wallpapers = {
|
||||
[10] = "WALLPAPER5/PATH/PLACEHOLDER",
|
||||
}
|
||||
|
||||
hl.on("workspace.active", function(workspace)
|
||||
local function set_wallpaper(workspace)
|
||||
if not wallpapers_enabled then
|
||||
return
|
||||
end
|
||||
|
||||
local wallpaper = wallpapers[workspace.id]
|
||||
|
||||
if wallpaper then
|
||||
hl.exec_cmd("awww img -t none " .. wallpaper)
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
hl.on("workspace.active", set_wallpaper)
|
||||
|
||||
local performance_mode = false
|
||||
local saved_brightness = nil
|
||||
|
||||
local function get_brightness()
|
||||
local handle = io.popen("brightnessctl get 2>/dev/null")
|
||||
|
||||
if not handle then
|
||||
return nil
|
||||
end
|
||||
|
||||
local value = handle:read("*a")
|
||||
handle:close()
|
||||
|
||||
if not value then
|
||||
return nil
|
||||
end
|
||||
|
||||
value = value:gsub("%s+$", "")
|
||||
return tonumber(value)
|
||||
end
|
||||
|
||||
local function set_performance_mode()
|
||||
if performance_mode then
|
||||
hl.monitor({
|
||||
output = "eDP-1",
|
||||
mode = "2560x1600@165",
|
||||
position = "0x0",
|
||||
scale = 1,
|
||||
})
|
||||
|
||||
hl.exec_cmd("pkill swaync || true")
|
||||
hl.exec_cmd("pkill waybar || true")
|
||||
hl.exec_cmd("caelestia shell -d")
|
||||
|
||||
if saved_brightness then
|
||||
hl.exec_cmd("brightnessctl set " .. saved_brightness)
|
||||
end
|
||||
|
||||
saved_brightness = nil
|
||||
wallpapers_enabled = true
|
||||
performance_mode = false
|
||||
|
||||
hl.exec_cmd("hyprctl reload")
|
||||
|
||||
local workspace = hl.get_active_workspace()
|
||||
if workspace then
|
||||
set_wallpaper(workspace)
|
||||
end
|
||||
|
||||
hl.notification.create({
|
||||
text = "Battery Saver",
|
||||
subtext = "Disabled",
|
||||
timeout = 3000,
|
||||
})
|
||||
|
||||
return
|
||||
end
|
||||
-- Save current brightness.
|
||||
saved_brightness = get_brightness()
|
||||
|
||||
-- Lower refresh rate.
|
||||
hl.monitor({
|
||||
output = "eDP-1",
|
||||
mode = "2560x1600@60",
|
||||
position = "0x0",
|
||||
scale = 1,
|
||||
})
|
||||
|
||||
-- Stop heavy UI components.
|
||||
hl.exec_cmd("pkill -f caelestia-shell || true")
|
||||
hl.exec_cmd("pkill -f caelestia || true")
|
||||
|
||||
-- Start lightweight notification daemon.
|
||||
hl.exec_cmd("pkill swaync || true")
|
||||
hl.exec_cmd("swaync")
|
||||
|
||||
-- Start lightweight status bar.
|
||||
hl.exec_cmd("pkill waybar || true")
|
||||
hl.exec_cmd("waybar")
|
||||
|
||||
-- Disable expensive Hyprland effects.
|
||||
hl.config({
|
||||
animations = {
|
||||
enabled = false,
|
||||
},
|
||||
|
||||
decoration = {
|
||||
shadow = {
|
||||
enabled = false,
|
||||
},
|
||||
blur = {
|
||||
enabled = false,
|
||||
},
|
||||
rounding = 0,
|
||||
fullscreen_opacity = 1,
|
||||
active_opacity = 1,
|
||||
inactive_opacity = 1,
|
||||
},
|
||||
|
||||
general = {
|
||||
gaps_in = 0,
|
||||
gaps_out = 0,
|
||||
border_size = 1,
|
||||
},
|
||||
|
||||
misc = {
|
||||
vfr = 1,
|
||||
},
|
||||
})
|
||||
|
||||
-- Lower brightness.
|
||||
hl.exec_cmd("brightnessctl set 5%")
|
||||
|
||||
-- Disable workspace wallpaper switching.
|
||||
wallpapers_enabled = false
|
||||
|
||||
performance_mode = true
|
||||
|
||||
hl.notification.create({
|
||||
text = "Battery Saver",
|
||||
subtext = "Enabled",
|
||||
timeout = 3000,
|
||||
})
|
||||
end
|
||||
|
||||
hl.curve("wind", { type = "bezier", points = { { 0.05, 0.9 }, { 0.1, 1.05 } } })
|
||||
hl.curve("winIn", { type = "bezier", points = { { 0.1, 1.1 }, { 0.1, 1.1 } } })
|
||||
@@ -168,22 +300,29 @@ hl.bind(mod .. " + D", hl.dsp.layout("move +col"))
|
||||
hl.bind(mod .. " + T", hl.dsp.exec_cmd(term))
|
||||
hl.bind(mod .. " + E", hl.dsp.exec_cmd(file))
|
||||
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 .. " + Q", close_or_move_special)
|
||||
hl.bind("CTRL + ALT + W", hl.dsp.exec_cmd("caelestia shell drawers toggle sidebar"))
|
||||
local function toggle_sidebar()
|
||||
if performance_mode then
|
||||
hl.exec_cmd("swaync-client -t")
|
||||
else
|
||||
hl.exec_cmd("caelestia shell drawers toggle sidebar")
|
||||
end
|
||||
end
|
||||
hl.bind("CTRL + ALT + W", toggle_sidebar)
|
||||
hl.bind(mod .. " + L", hl.dsp.exec_cmd("caelestia shell lock lock"))
|
||||
hl.bind("F11", hl.dsp.exec_cmd("caelestia screenshot"))
|
||||
hl.bind(mod .. " + SHIFT + S", hl.dsp.exec_cmd("caelestia shell picker open"))
|
||||
hl.bind(mod .. " + CTRL + 6", close_other_windows)
|
||||
hl.bind("CTRL + ALT + 7", hl.dsp.exec_cmd("custom-performance"))
|
||||
hl.bind("CTRL + ALT + 7", set_performance_mode)
|
||||
hl.bind("CTRL + ALT + 1", hl.dsp.exec_cmd("caelestia shell drawers toggle sidebar"))
|
||||
hl.bind(mod .. " + CTRL + 4", hl.dsp.exec_cmd("caelestia shell notifs toggleDnd"))
|
||||
hl.bind(mod .. " + CTRL + 3", hl.dsp.exec_cmd("pavucontrol"))
|
||||
hl.bind("CTRL + SHIFT + ALT + 0", hl.dsp.exec_cmd("kitty --hold --class \"custom-changeAudioOutput\" --name \"Select audio output\" zsh -c \"custom-changeAudioOutput\""))
|
||||
hl.bind(mod .. " + CTRL + 5", hl.dsp.exec_cmd("gnome-characters"))
|
||||
hl.bind("CTRL + ALT + 8", hl.dsp.exec_cmd("hyprpicker | tee >(wl-copy) | cliphist store"))
|
||||
hl.bind("CTRL + ALT + 0", hl.dsp.exec_cmd("custom-tomato"))
|
||||
-- hl.bind("CTRL + ALT + 0", hl.dsp.exec_cmd("custom-tomato"))
|
||||
hl.bind("CTRL + ALT + 2", hl.dsp.exec_cmd("custom-bottom"))
|
||||
hl.bind("CTRL + ALT + 9", hl.dsp.exec_cmd("anki"))
|
||||
|
||||
@@ -673,6 +812,13 @@ hl.window_rule({
|
||||
float = true,
|
||||
size = "400 225",
|
||||
})
|
||||
hl.window_rule({
|
||||
match = {
|
||||
class = "^(custom-vpn-picker)$",
|
||||
},
|
||||
float = true,
|
||||
size = "350 250",
|
||||
})
|
||||
|
||||
hl.window_rule({
|
||||
match = {
|
||||
@@ -780,7 +926,6 @@ hl.config({
|
||||
|
||||
hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("/nix/store/8kih8alkk4qzgjchg5501r1c3a8a71aw-dbus-1.16.2/bin/dbus-update-activation-environment --systemd DISPLAY HYPRLAND_INSTANCE_SIGNATURE WAYLAND_DISPLAY XDG_CURRENT_DESKTOP XDG_SESSION_TYPE && systemctl --user stop hyprland-session.target && systemctl --user start hyprland-session.target")
|
||||
hl.exec_cmd("qtbatticon")
|
||||
hl.exec_cmd("source /run/agenix/ntfy && nixpkgs-notifier listen")
|
||||
hl.exec_cmd("dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP")
|
||||
hl.exec_cmd("dbus-update-activation-environment --systemd --all")
|
||||
@@ -790,12 +935,12 @@ hl.on("hyprland.start", function()
|
||||
hl.exec_cmd("udiskie --no-automount --smart-tray")
|
||||
hl.exec_cmd("nm-applet --indicator")
|
||||
hl.exec_cmd("rm -rf ~/.cache/cliphist/ && wl-paste --type text --watch cliphist store & wl-paste --type image --watch cliphist store")
|
||||
hl.exec_cmd("custom-batterynotify")
|
||||
hl.exec_cmd("custom-batterywarning")
|
||||
-- hl.exec_cmd("custom-batterynotify")
|
||||
-- hl.exec_cmd("custom-batterywarning")
|
||||
hl.exec_cmd("awww img WALLPAPER/PATH/PLACEHOLDER")
|
||||
hl.exec_cmd("awww-daemon")
|
||||
hl.exec_cmd("sleep 1 && custom-wallpaper")
|
||||
hl.exec_cmd("custom-checkKdrive && custom-mountkdrive")
|
||||
hl.exec_cmd("custom-mountEpflDrive")
|
||||
hl.exec_cmd("custom-gitnotify")
|
||||
hl.exec_cmd("sleep 4 & caelestia-shell")
|
||||
hl.exec_cmd("sleep 20 && ngcp pull --automatic")
|
||||
|
||||
@@ -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
|
||||
laptopHostKey
|
||||
];
|
||||
"epfl.age".publicKeys = [
|
||||
backupAgeKey
|
||||
laptopHostKey
|
||||
];
|
||||
}
|
||||
Reference in new issue
Block a user