dev #19

Open
tdpeuter wants to merge 120 commits from dev into main
104 changed files with 13863 additions and 1248 deletions

2
.gitignore vendored
View file

@ -1 +1,3 @@
result
.idea

BIN
assets/bluescreen.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

225
colors.sh Normal file
View file

@ -0,0 +1,225 @@
# tdpeuter color schemes
# The goal is to offer light and dark theme that is easy on the eyes,
# whilst also being unique and defining.
###############################
# tdpeuter-light color scheme #
###############################
# 171717 # Foreground
# FAFAFA # Daisy (Background)
# Regular colors (0-7)
# 000000 # Black (0)
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# Bright colors (8-15)
# 000000 # Black (8)
# 9
# 10
# 11
# 12
# 13
# 14
# 15
##############################
# tdpeuter-dark color scheme #
##############################
# FAFAFA # Daisy (Foreground)
printf "\033]10;#FAFAFA\007"
# 171717 # Background
printf "\033]11;#171717\007"
# Regular colors (0-7)
# 242124 # Black 0
printf "\033]4;0;#242124\007"
# B90E0A # Crimson (Red) 1
printf "\033]4;1;#B90E0A\007"
# B2BC68 # Leafy (Green) 2
printf "\033]4;2;#B2BC68\007"
# FFE135 # Banana (Yellow) 3
printf "\033]4;3;#FFE135\007"
# 80A2BE # Icicle (Blue) 4
printf "\033]4;4;#80A2BE\007"
# A45EE5 # Amethyst (Magenta) 5
printf "\033]4;5;#A45EE5\007"
# # (Cyan) 6
printf "\033]4;6;#80A2BE\007"
# FBFCF8 # Pearl (White) 7
printf "\033]4;7;#FBFCF8\007"
# Bright colors (8-15)
# 363636 # Grey-isch (Black) 8
printf "\033]4;8;#363636\007"
# BC544B # Blush (Red) 9
printf "\033]4;9;#BC544B\007"
# A6E3A1 # Lime (Green) 10
printf "\033]4;10;#A6E3A1\007"
# FCF4A3 # Banana (Yellow) 11
printf "\033]4;11;#FCF4A3\007"
# 74C7EC # Sapphire (Blue) 12
printf "\033]4;12;#74C7EC\007"
# B4BEFE # Lavender (Magenta) 13
# #CBA6F7
printf "\033]4;13;#B4BEFE\007"
# # (Cyan) 14
printf "\033]4;14;#74C7EC\007"
# FFFFFF # White 15
printf "\033]4;15;#FFFFFF\007"
# NEW COLORS 20241101
#
# Nr # R G B H S B # Name
# FG # 250 250 250 0 0 98 # Daisy (White)
printf "\033]10;#FAFAFA\007"
# BG # 19 19 19 0 0 7 # -
printf "\033]11;#131313\007"
# Regular colors (0-7)
# Nr # R G B H S B # Name
# 0 # 61 61 61 0 0 24 # - (Black)
printf "\033]4;0;#3D3D3D\007"
# 1 # 186 19 61 345 90 73 # - (Red)
printf "\033]4;1;#BA133D\007"
# 2 # 61 186 19 105 90 73 # - (Green)
printf "\033]4;2;#3DBA13\007"
# 3 # 186 144 19 45 90 73 # - (Yellow)
printf "\033]4;3;#BA9013\007"
# 4 # 19 61 186 225 90 73 # - (Blue)
printf "\033]4;4;#133DBA\007"
# 5 # 144 19 186 285 90 73 # - (Magenta)
printf "\033]4;5;#9013BA\007"
# 6 # 19 186 144 165 90 73 # - (Cyan)
printf "\033]4;6;#13BA90\007"
# 7 # 186 186 186 0 0 73 # - (White)
printf "\033]4;7;#BABABA\007"
# Bright colors (8-15)
# Nr # R G B H S B # Name
# 8 # 122 122 122 0 0 48 # - (Black)
printf "\033]4;8;#363636\007"
# 9 # 250 25 81 345 90 98 # - (Red)
printf "\033]4;9;#FA1951\007"
# 10 # 81 250 25 105 90 98 # - (Green)
printf "\033]4;10;#51FA19\007"
# 11 # 250 194 25 45 90 98 # - (Yellow)
printf "\033]4;11;#FAC219\007"
# 12 # 25 81 250 225 90 98 # - (Blue)
printf "\033]4;12;#1951FA\007"
# 13 # 194 25 250 285 90 98 # - (Magenta)
printf "\033]4;13;#C219FA\007"
# 14 # 25 259 194 165 90 98 # - (Cyan)
printf "\033]4;14;#19FAC2\007"
# 15 # 250 250 250 0 0 98 # - (White)
printf "\033]4;15;#FAFAFA\007"
# BRIGHTER
#
# Nr # R G B H S B # Name
# FG # 250 250 250 0 0 98 # Daisy (White)
printf "\033]11;#FAFAFA\007"
# BG # 19 19 19 0 0 7 # -
printf "\033]10;#131313\007"
# Regular colors (0-7)
# Nr # R G B H S B # Name
# 0 # 61 61 61 0 0 24 # - (Black)
printf "\033]4;0;#3D3D3D\007"
# 1 # 186 19 61 345 90 73 # - (Red)
printf "\033]4;1;#E62E4D\007"
# 2 # 61 186 19 105 90 73 # - (Green)
printf "\033]4;2;#4DE62E\007"
# 3 # 186 144 19 45 90 73 # - (Yellow)
printf "\033]4;3;#E6C72E\007"
# 4 # 19 61 186 225 90 73 # - (Blue)
printf "\033]4;4;#2E4CE6\007"
# 5 # 144 19 186 285 90 73 # - (Magenta)
printf "\033]4;5;#C52DE3\007"
# 6 # 19 186 144 165 90 73 # - (Cyan)
printf "\033]4;6;#2EE6C7\007"
# 7 # 186 186 186 0 0 73 # - (White)
printf "\033]4;7;#BABABA\007"
# Bright colors (8-15)
# Nr # R G B H S B # Name
# 8 # 122 122 122 0 0 48 # - (Black)
printf "\033]4;8;#7A7A7A\007"
# 9 # 250 25 81 345 90 98 # - (Red)
printf "\033]4;9;#FF002B\007"
# 10 # 81 250 25 105 90 98 # - (Green)
printf "\033]4;10;#2BFF00\007"
# 11 # 250 194 25 45 90 98 # - (Yellow)
printf "\033]4;11;#FFd500\007"
# 12 # 25 81 250 225 90 98 # - (Blue)
printf "\033]4;12;#002AFF\007"
# 13 # 194 25 250 285 90 98 # - (Magenta)
printf "\033]4;13;#D400FF\007"
# 14 # 25 259 194 165 90 98 # - (Cyan)
printf "\033]4;14;#00FFC0\007"
# 15 # 250 250 250 0 0 98 # - (White)
printf "\033]4;15;#FAFAFA\007"
# TEsting again
# Nr # R G B H S B # Name
# FG # 250 250 250 0 0 98 # Daisy (White)
# FAFAFA # Daisy (Foreground)
printf "\033]10;#FAFAFA\007"
# 171717 # Background
printf "\033]11;#171717\007"
# Nr # R G B H S B # Name
# 0 # 61 61 61 0 0 24 # - (Black)
printf "\033]4;0;#202124\007"
# 1 # 186 19 61 345 90 73 # - (Red)
printf "\033]4;1;#EA4335\007"
# 2 # 61 186 19 105 90 73 # - (Green)
printf "\033]4;2;#34A853\007"
# 3 # 186 144 19 45 90 73 # - (Yellow)
printf "\033]4;3;#FBBC04\007"
# 4 # 19 61 186 225 90 73 # - (Blue)
printf "\033]4;4;#4285F4\007"
# 5 # 144 19 186 285 90 73 # - (Magenta)
printf "\033]4;5;#A142F4\007"
# 6 # 19 186 144 165 90 73 # - (Cyan)
printf "\033]4;6;#24C1E0\007"
# 7 # 186 186 186 0 0 73 # - (White)
printf "\033]4;7;#FBFCF8\007"
# Bright colors (8-15)
# Nr # R G B H S B # Name
# 8 # 122 122 122 0 0 48 # - (Black)
printf "\033]4;8;#5F6368\007"
# 9 # 250 25 81 345 90 98 # - (Red)
printf "\033]4;9;#EA4335\007"
# 10 # 81 250 25 105 90 98 # - (Green)
printf "\033]4;10;#34A853\007"
# 11 # 250 194 25 45 90 98 # - (Yellow)
printf "\033]4;11;#FBBC05\007"
# 12 # 25 81 250 225 90 98 # - (Blue)
printf "\033]4;12;#4285F4\007"
# 13 # 194 25 250 285 90 98 # - (Magenta)
printf "\033]4;13;#A142F4\007"
# 14 # 25 259 194 165 90 98 # - (Cyan)
printf "\033]4;14;#24C1E0\007"
# 15 # 250 250 250 0 0 98 # - (White)
printf "\033]4;15;#FFFFFF\007"

View file

@ -1,13 +1,10 @@
keys:
- &tdpeuter age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y
- &server_H4G0 age1d4gvqz3anf082ja6xt03hnkzazfum80um9t45m4rerl4n3va2yuqgnsg03
- &Tibo-NixFatDesk age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y
- &Tibo-NixTop age1qzutny0mqpcccqw6myyfntu6wcskruu9ghzvt6r4te7afkqwnguq05ex37
creation_rules:
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
key_groups:
- age:
- *tdpeuter
- *server_H4G0
- *Tibo-NixFatDesk
- *Tibo-NixTop

249
nixos/flake.lock generated
View file

@ -1,54 +1,15 @@
{
"nodes": {
"devshell": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1713532798,
"narHash": "sha256-wtBhsdMJA3Wa32Wtm1eeo84GejtI43pMrFrmwLXrsEc=",
"owner": "numtide",
"repo": "devshell",
"rev": "12e914740a25ea1891ec619bb53cf5e6ca922e40",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "devshell",
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1701680307,
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"flake-utils_2": {
"inputs": {
"systems": "systems_2"
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
@ -64,80 +25,41 @@
]
},
"locked": {
"lastModified": 1716736833,
"narHash": "sha256-rNObca6dm7Qs524O4st8VJH6pZ/Xe1gxl+Rx6mcWYo0=",
"lastModified": 1790215976,
"narHash": "sha256-VkR1rMGyjU9jtw8ISFx5uqR9e+LEaOlhHwrseFkiIVk=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "a631666f5ec18271e86a5cde998cba68c33d9ac6",
"rev": "a6631107a83ceab5872f298a2ea710859c80c4cb",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "release-24.05",
"ref": "release-26.05",
"repo": "home-manager",
"type": "github"
}
},
"nix-github-actions": {
"inputs": {
"nixpkgs": [
"openconnect-sso",
"nixpkgs"
]
},
"locked": {
"lastModified": 1701208414,
"narHash": "sha256-xrQ0FyhwTZK6BwKhahIkUVZhMNk21IEI1nUcWSONtpo=",
"owner": "nix-community",
"repo": "nix-github-actions",
"rev": "93e39cc1a087d65bcf7a132e75a650c44dd2b734",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nix-github-actions",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1717144377,
"narHash": "sha256-F/TKWETwB5RaR8owkPPi+SPJh83AQsm6KrQAlJ8v/uA=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "805a384895c696f802a9bf5bf4720f37385df547",
"type": "github"
"lastModified": 1790218706,
"narHash": "sha256-qdM4Skrqq9Xps3OPNi9PWC6/hrWK9eDx5DUAUUaoz+o=",
"rev": "c508844df6c28fa6dabc1b6af70f3ccbd65c5201",
"type": "tarball",
"url": "https://releases.nixos.org/nixos/26.05/nixos-26.05.10529.c508844df6c2/nixexprs.tar.zst"
},
"original": {
"id": "nixpkgs",
"ref": "nixos-24.05",
"ref": "nixos-26.05",
"type": "indirect"
}
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1717265169,
"narHash": "sha256-IITcGd6xpNoyq9SZBigCkv4+qMHSqot0RDPR4xsZ2CA=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "3b1b4895b2c5f9f5544d02132896aeb9ceea77bc",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "release-23.11",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1716948383,
"narHash": "sha256-SzDKxseEcHR5KzPXLwsemyTR/kaM9whxeiJohbL04rs=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "ad57eef4ef0659193044870c731987a6df5cf56b",
"type": "github"
"lastModified": 1790185690,
"narHash": "sha256-EZwz6sR6RLzbKiJJ9QQgXPZ/zA6P8ecfFr/6fwBRfes=",
"rev": "4975466d324710c576dc11ad614684e6bd8cad8e",
"type": "tarball",
"url": "https://releases.nixos.org/nixos/unstable/nixos-26.11pre1078696.4975466d3247/nixexprs.tar.zst"
},
"original": {
"id": "nixpkgs",
@ -145,79 +67,12 @@
"type": "indirect"
}
},
"openconnect-sso": {
"inputs": {
"flake-utils": [
"utils"
],
"nix-github-actions": "nix-github-actions",
"nixpkgs": [
"nixpkgs"
],
"poetry2nix": "poetry2nix",
"systems": "systems_3",
"treefmt-nix": "treefmt-nix"
},
"locked": {
"lastModified": 1701455376,
"narHash": "sha256-FMLrMdi6JY7ZfqV5XnNj64jnDcGKznKZLn7O6OMO3u0=",
"owner": "ThinkChaos",
"repo": "openconnect-sso",
"rev": "20c0015c4264c72cc19ac272de0dc534309bd21b",
"type": "github"
},
"original": {
"owner": "ThinkChaos",
"ref": "fix/nix-flake",
"repo": "openconnect-sso",
"type": "github"
}
},
"poetry2nix": {
"inputs": {
"flake-utils": [
"openconnect-sso",
"flake-utils"
],
"nix-github-actions": [
"openconnect-sso",
"nix-github-actions"
],
"nixpkgs": [
"openconnect-sso",
"nixpkgs"
],
"systems": [
"openconnect-sso",
"systems"
],
"treefmt-nix": [
"openconnect-sso",
"treefmt-nix"
]
},
"locked": {
"lastModified": 1701105783,
"narHash": "sha256-5IOI0xXGbhAkUZNNcPId48V78Q+/JlW0hzlif0zxRmM=",
"owner": "nix-community",
"repo": "poetry2nix",
"rev": "0b2bff39e9bd4e6db3208e09c276ca83a063b370",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "poetry2nix",
"type": "github"
}
},
"root": {
"inputs": {
"devshell": "devshell",
"flake-utils": "flake-utils_2",
"flake-utils": "flake-utils",
"home-manager": "home-manager",
"nixpkgs": "nixpkgs",
"nixpkgs-unstable": "nixpkgs-unstable",
"openconnect-sso": "openconnect-sso",
"sops-nix": "sops-nix",
"utils": "utils"
}
@ -226,15 +81,14 @@
"inputs": {
"nixpkgs": [
"nixpkgs"
],
"nixpkgs-stable": "nixpkgs-stable"
]
},
"locked": {
"lastModified": 1717297459,
"narHash": "sha256-cZC2f68w5UrJ1f+2NWGV9Gx0dEYmxwomWN2B0lx0QRA=",
"lastModified": 1790247521,
"narHash": "sha256-TNfgoHsqsYYvaJImlWctfRkh4PseTagzegU1Dgdbehw=",
"owner": "Mic92",
"repo": "sops-nix",
"rev": "ab2a43b0d21d1d37d4d5726a892f714eaeb4b075",
"rev": "2bd00bd9bb35fe6d114888c8f1c2e946c541dd8f",
"type": "github"
},
"original": {
@ -258,57 +112,6 @@
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_3": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"treefmt-nix": {
"inputs": {
"nixpkgs": [
"openconnect-sso",
"nixpkgs"
]
},
"locked": {
"lastModified": 1699786194,
"narHash": "sha256-3h3EH1FXQkIeAuzaWB+nK0XK54uSD46pp+dMD3gAcB4=",
"owner": "numtide",
"repo": "treefmt-nix",
"rev": "e82f32aa7f06bbbd56d7b12186d555223dc399d1",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "treefmt-nix",
"type": "github"
}
},
"utils": {
"inputs": {
"flake-utils": [
@ -316,11 +119,11 @@
]
},
"locked": {
"lastModified": 1715533576,
"narHash": "sha256-fT4ppWeCJ0uR300EH3i7kmgRZnAVxrH+XtK09jQWihk=",
"lastModified": 1779563444,
"narHash": "sha256-+rEagECcF6BhWfLs8VCkPqsBuxxSSIRxMlgjXj6G8UQ=",
"owner": "gytis-ivaskevicius",
"repo": "flake-utils-plus",
"rev": "3542fe9126dc492e53ddd252bb0260fe035f2c0f",
"rev": "a00f6f51907b5c74d2fde086b10b19d446d15717",
"type": "github"
},
"original": {

View file

@ -2,28 +2,17 @@
description = "System configuration of my machines using flakes";
inputs = {
nixpkgs.url = "nixpkgs/nixos-24.05";
nixpkgs.url = "nixpkgs/nixos-26.05";
nixpkgs-unstable.url = "nixpkgs/nixos-unstable";
devshell = {
url = "github:numtide/devshell";
inputs.nixpkgs.follows = "nixpkgs";
};
flake-utils.url = "github:numtide/flake-utils";
home-manager = {
url = "github:nix-community/home-manager/release-24.05";
url = "github:nix-community/home-manager/release-26.05";
inputs.nixpkgs.follows = "nixpkgs";
};
openconnect-sso = {
url = github:ThinkChaos/openconnect-sso/fix/nix-flake;
inputs = {
flake-utils.follows = "utils";
nixpkgs.follows = "nixpkgs";
};
};
sops-nix = {
url = "github:Mic92/sops-nix";
inputs.nixpkgs.follows = "nixpkgs";
inputs.nixpkgs.follows = "nixpkgs";
};
utils = {
url = "github:gytis-ivaskevicius/flake-utils-plus";
@ -33,19 +22,21 @@
outputs = inputs@{
self, nixpkgs, nixpkgs-unstable,
devshell, flake-utils, home-manager, openconnect-sso, sops-nix, utils,
flake-utils, home-manager, sops-nix, utils,
... }:
let
system = "x86_64-linux";
system = utils.lib.system.x86_64-linux;
unfreePackages = pkg: builtins.elem (nixpkgs.lib.getName pkg) [
"corefonts"
"nvidia-settings" "nvidia-x11" "nvidia-persistenced"
"Oracle_VM_VirtualBox_Extension_Pack"
"nvidia-settings" "nvidia-x11" "nvidia-persistenced" "nvidia-kernel-modules"
"Oracle_VirtualBox_Extension_Pack"
"spotify"
"steam" "steam-original" "steam-run"
"steam" "steam-unwrapped" "steam-run"
"vista-fonts"
"nvidia-persistenced" # Docker
"intel-ocl"
"libfprint-2-tod1-broadcom"
"vmware-workstation"
];
in
utils.lib.mkFlake {
@ -71,10 +62,11 @@
};
modules = [
home-manager.nixosModule
sops-nix.nixosModules.sops
./modules
./users
home-manager.nixosModules.home-manager
sops-nix.nixosModules.sops
];
};
@ -82,6 +74,7 @@
Tibo-NixDesk.modules = [ ./hosts/Tibo-NixDesk ];
Tibo-NixFat.modules = [ ./hosts/Tibo-NixFat ];
Tibo-NixTest.modules = [ ./hosts/Tibo-NixTest ];
Tibo-NixTop.modules = [ ./hosts/Tibo-NixTop ];
};
};
}

View file

@ -6,7 +6,7 @@
];
sisyphus = {
desktop.sway.enable = true;
desktop.hyprland.enable = true;
hardware = {
nvidia = {
@ -19,7 +19,9 @@
networking = {
networkmanager.enable = true;
openconnect-sso.enable = true;
openconnect.enable = true;
openvpn.enable = true;
tailscale.enable = true;
};
nix = {
@ -29,6 +31,7 @@
programs = {
direnv.enable = true;
git.enable = true;
home-manager.enable = true;
sops.enable = true;
ssh.enable = true;
@ -56,10 +59,11 @@
efiSysMountPoint = "/boot/efi";
};
};
plymouth.enable = true;
};
environment.systemPackages = with pkgs; [
git
vim-full
w3m
wget
@ -75,9 +79,9 @@
networking.hostName = "Tibo-NixDesk";
services.xserver = {
services.xserver.xkb = {
layout = "us";
xkbVariant = "altgr-intl";
variant = "altgr-intl";
};
system.stateVersion = "24.05";

View file

@ -6,7 +6,10 @@
];
sisyphus = {
desktop.sway.enable = true;
desktop = {
sway.enable = true;
hyprland.enable = true;
};
hardware = {
eid.enable = true;
@ -19,7 +22,8 @@
networking = {
networkmanager.enable = true;
# openconnect-sso.enable = true;
openconnect.enable = true;
tailscale.enable = true;
};
nix = {
@ -34,10 +38,7 @@
ssh.enable = true;
};
services = {
pipewire.enable = true;
tailscale.enable = true;
};
services.pipewire.enable = true;
users.tdpeuter.enable = true;
@ -87,14 +88,20 @@
powerOnBoot = false;
};
networking.hostName = "Tibo-NixFat";
networking = {
hostName = "Tibo-NixFat";
networkmanager.wifi.powersave = true;
};
services = {
# Handle the laptop lid switch as follows:
logind = {
# Handle the laptop lid switch as follows:
lidSwitch = "hybrid-sleep";
lidSwitchExternalPower = "lock";
lidSwitchDocked = "ignore";
# Handle the power key
powerKey = "suspend";
};
xserver.xkb = {
@ -105,10 +112,14 @@
# Touchpad
libinput.enable = true;
thermald.enable = true;
};
system.stateVersion = "24.05";
systemd.coredump.enable = false;
time.timeZone = "Europe/Brussels";
# --- Barrier ---

View file

@ -8,21 +8,32 @@
(modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ "kvm-intel" ];
boot.extraModulePackages = [ ];
fileSystems."/" = {
device = "/dev/disk/by-label/NIX-ROOT";
fsType = "ext4";
boot = {
initrd = {
availableKernelModules = [
"xhci_pci"
"nvme"
"usb_storage"
"sd_mod"
"rtsx_pci_sdmmc"
];
kernelModules = [ ];
luks.devices."luks-c21cb4a4-f618-43af-bc0c-e8be74fe3b81".device = "/dev/disk/by-uuid/c21cb4a4-f618-43af-bc0c-e8be74fe3b81";
};
kernelModules = [ "kvm-intel" ];
extraModulePackages = [ ];
};
boot.initrd.luks.devices."luks-c21cb4a4-f618-43af-bc0c-e8be74fe3b81".device = "/dev/disk/by-uuid/c21cb4a4-f618-43af-bc0c-e8be74fe3b81";
fileSystems = {
"/" = {
device = "/dev/disk/by-label/NIX-ROOT";
fsType = "ext4";
};
fileSystems."/boot/efi" = {
device = "/dev/disk/by-label/NIX-BOOT";
fsType = "vfat";
"/boot/efi" = {
device = "/dev/disk/by-label/NIX-BOOT";
fsType = "vfat";
};
};
swapDevices = [
@ -38,5 +49,9 @@
# networking.interfaces.wlp111s0.useDHCP = lib.mkDefault true;
powerManagement.cpuFreqGovernor = lib.mkDefault "powersave";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
nixpkgs.config.allowUnfree = true;
hardware = {
enableAllFirmware = true;
cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
};
}

View file

@ -0,0 +1,182 @@
# Edit this configuration file to define what should be installed on
# your system. Help is available in the configuration.nix(5) man page, on
# https://search.nixos.org/options and in the NixOS manual (`nixos-help`).
{ config, lib, pkgs, ... }:
{
imports = [
# Include the results of the hardware scan.
./hardware-configuration.nix
];
sisyphus = {
desktop.hyprland.enable = true;
hardware = {
eid.enable = true;
fingerprint-scanner.enable = true;
nvidia = {
enable = true;
model = "Quadro T2000";
};
yubikey.enable = true;
};
networking = {
networkmanager.enable = true;
openconnect.enable = true;
openvpn.enable = true;
tailscale.enable = true;
};
nix = {
flakes.enable = true;
gc.onFull.enable = true;
};
programs = {
direnv.enable = true;
git.enable = true;
home-manager.enable = true;
sops.enable = true;
ssh.enable = true;
wireshark.enable = true;
};
services.pipewire.enable = true;
users.tdpeuter.enable = true;
virtualisation = {
docker.enable = true;
virtualbox.enable = true;
};
};
boot = {
# Use EFI and YubiKey
initrd.kernelModules = [ "vfat" "nls_cp437" "nls_iso8859-1" "usbhid" ];
loader = {
# Use the systemd-boot EFI boot loader.
systemd-boot = {
enable = true;
editor = false;
memtest86.enable = true;
};
efi.canTouchEfiVariables = true;
};
kernelPackages = pkgs.linuxPackages; # Use stable LTS kernel
plymouth.enable = true;
};
hardware.bluetooth = {
enable = true;
powerOnBoot = false;
};
nix.settings.download-buffer-size = 500 * 1024 * 1024; # 500 MiB
programs.zsh.enable = true;
services = {
auto-cpufreq = {
enable = true;
settings = {
battery = {
governor = "powersave";
turbo = "never";
};
charger = {
governor = "performance";
turbo = "auto";
};
};
};
logind.settings.Login = {
# Handle the laptop lid switch as follows:
HandleLidSwitch = "hybrid-sleep";
HandleLidSwitchExternalPower = "lock";
HandleLidSwitchDocked = "ignore";
# Handle the power key
HandlePowerKey = "suspend";
HandlePowerKeyLongPress = "poweroff";
};
power-profiles-daemon.enable = false;
smartd.enable = true;
thermald.enable = true;
xserver = {
# Keyboard layout
xkb = {
layout = "us";
variant = "altgr-intl";
};
};
# Touchpad
libinput.enable = true;
};
virtualisation.vmware.host.enable = true;
networking.hostName = "Tibo-NixTop"; # Define your hostname.
# Set your time zone.
time.timeZone = "Europe/Brussels";
# Select internationalisation properties.
i18n = {
defaultLocale = "en_GB.UTF-8"; # LANG
extraLocaleSettings.LC_TIME = "nl_BE.UTF-8";
};
console = {
# font = "Lat2-Terminus16";
# keyMap = "us";
useXkbConfig = true; # use xkb.options in tty.
};
# List packages installed in system profile.
# You can use https://search.nixos.org/ to find more packages (and options).
environment = {
# Enabled to allow installed binaries in ~/.local/bin
localBinInPath = true;
systemPackages = with pkgs; [
vim-full # Do not forget to add an editor to edit configuration.nix! The Nano editor is also installed by default.
w3m
wget
zenith-nvidia
];
};
# This option defines the first version of NixOS you have installed on this particular machine,
# and is used to maintain compatibility with application data (e.g. databases) created on older NixOS versions.
#
# Most users should NEVER change this value after the initial install, for any reason,
# even if you've upgraded your system to a new NixOS release.
#
# This value does NOT affect the Nixpkgs version your packages and OS are pulled from,
# so changing it will NOT upgrade your system - see https://nixos.org/manual/nixos/stable/#sec-upgrading for how
# to actually do that.
#
# This value being lower than the current NixOS release does NOT mean your system is
# out of date, out of support, or vulnerable.
#
# Do NOT change this value unless you have manually inspected all the changes it would make to your configuration,
# and migrated your data accordingly.
#
# For more information, see `man configuration.nix` or https://nixos.org/manual/nixos/stable/options#opt-system.stateVersion .
system.stateVersion = "25.05"; # Did you read the comment?
}

View file

@ -0,0 +1,41 @@
# Do not modify this file! It was generated by ‘nixos-generate-config’
# and may be overwritten by future invocations. Please make changes
# to /etc/nixos/configuration.nix instead.
{ config, lib, pkgs, modulesPath, ... }:
{
imports =
[ (modulesPath + "/installer/scan/not-detected.nix")
];
boot.initrd.availableKernelModules = [ "xhci_pci" "nvme" "usbhid" "usb_storage" "sd_mod" "rtsx_pci_sdmmc" ];
boot.initrd.kernelModules = [ ];
boot.kernelModules = [ ];
boot.extraModulePackages = [ ];
fileSystems."/" =
{ device = "/dev/disk/by-uuid/e759b10f-7949-4094-9272-d91340dcc5b6";
fsType = "ext4";
};
boot.initrd.luks.devices."encrypted".device = "/dev/disk/by-uuid/2b6586fa-8823-4add-94f3-132aab17b7b8";
fileSystems."/boot" =
{ device = "/dev/disk/by-uuid/12CE-A600";
fsType = "vfat";
options = [ "fmask=0022" "dmask=0022" ];
};
swapDevices = [ ];
# 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
# still possible to use this option, but it's recommended to use it in conjunction
# with explicit per-interface declarations with `networking.interfaces.<interface>.useDHCP`.
networking.useDHCP = lib.mkDefault true;
# networking.interfaces.eno2.useDHCP = lib.mkDefault true;
# networking.interfaces.wlo1.useDHCP = lib.mkDefault true;
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
}

View file

@ -0,0 +1,23 @@
{
boot = {
kernelParams = [
"mem_sleep_default=deep"
"resume_offset=66637824"
];
resumeDevice = "/dev/disk/by-uuid/e759b10f-7949-4094-9272-d91340dcc5b6";
};
powerManagement.enable = true;
swapDevices = [{
device = "/var/lib/swap";
size = 37 * 1024;
options = [ "discard" ];
}];
#systemd.sleep.extraConfig = ''
# HibernateDelaySec=30m
# SuspendState=mem
#'';
}

View file

@ -4,5 +4,7 @@
./hyprland
./plasma
./sway
./waybar
];
}

View file

@ -6,54 +6,30 @@ in {
options.sisyphus.desktop.gnome.enable = lib.mkEnableOption "GNOME";
config = lib.mkIf cfg.enable {
services.xserver = {
enable = true;
services = {
gnome = {
core-apps.enable = false;
core-developer-tools.enable = false;
core-shell.enable = true;
};
excludePackages = with pkgs; [
xterm
];
xserver = {
enable = true;
displayManager.gdm.enable = true;
desktopManager.gnome.enable = true;
excludePackages = with pkgs; [
xterm
];
displayManager.gdm.enable = true;
desktopManager.gnome.enable = true;
videoDrivers = [ "nvidia" ];
};
};
# Start a new instance of application instead of going to that window.
environment.systemPackages = with pkgs.gnomeExtensions; [
launch-new-instance
];
# Do not use these packages
environment.gnome.excludePackages = (with pkgs; [
baobab
epiphany # Web browser
evince # Document viewer
gnome-connections # Remote desktop client
gnome-console
gnome-photos
gnome-text-editor
gnome-tour
loupe # Image viewer
snapshot # Camera
]) ++ (with pkgs.gnome; [
eog # Image viewer
file-roller # Archive manager
geary # Mail client
gedit
gnome-calculator
gnome-calendar
gnome-characters
gnome-clocks
gnome-contacts
gnome-disk-utility
gnome-font-viewer
gnome-logs
gnome-maps
gnome-music
gnome-system-monitor
gnome-weather
simple-scan
totem # Movie player
yelp # Help viewer
]);
};
}

View file

@ -1,4 +1,4 @@
{ config, lib, ... }:
{ config, lib, pkgs, ... }:
let
cfg = config.sisyphus.desktop.hyprland;
@ -6,10 +6,58 @@ in {
options.sisyphus.desktop.hyprland.enable = lib.mkEnableOption "Hyprland";
config = lib.mkIf cfg.enable {
environment = {
sessionVariables = {
NIXOS_OZONE_WL = "1"; # Hint Electron apps to use wayland
ASSETS_DIR = ../../../../assets;
SCRIPT_DIR = ../../../../scripts;
};
systemPackages = with pkgs; [
brightnessctl
dunst
libnotify
swaybg
waycorner
playerctl
wlsunset
wl-clipboard # Copying to system clipboard in vim
wl-mirror # Mirror an output
wdisplays nwg-displays
hyprlandPlugins.hy3 # i3/sway layout plugin
grim slurp # Screenshots
swaylock
glib
libva
dmenu
jq
j4-dmenu-desktop
rofi
];
};
programs.hyprland = {
enable = true;
xwayland.enable = true;
};
security.polkit.enable = true;
services = {
dbus.enable = true;
displayManager.ly.enable = true;
gnome.gnome-keyring.enable = true;
xserver.videoDrivers = [ "nvidia" ];
};
sisyphus.desktop.waybar.enable = true;
};
}

View file

@ -8,36 +8,41 @@ in {
options.sisyphus.desktop.plasma.enable = lib.mkEnableOption "KDE Plasma";
config = lib.mkIf cfg.enable {
services.xserver = {
enable = true;
services = {
displayManager = {
defaultSession = "plasmawayland";
defaultSession = "plasma";
sddm = {
enable = true;
wayland.enable = true;
# https://discourse.nixos.org/t/plasma-wayland-session-not-available-from-sddm/13447/2
settings.Wayland.SessionDir = "${pkgs.plasma5Packages.plasma-workspace}/share/wayland-sessions";
# settings.Wayland.SessionDir = "${pkgs.plasma5Packages.plasma-workspace}/share/wayland-sessions";
};
};
desktopManager.plasma5 = {
desktopManager.plasma6.enable = true;
# Use gnome keyring instead of KDE Wallet.
gnome.gnome-keyring.enable = true;
xserver = {
enable = true;
useQtScaling = true;
excludePackages = with pkgs; [
xterm
];
videoDrivers = [ "nvidia" ];
};
excludePackages = with pkgs; [
xterm
];
};
environment.plasma5.excludePackages = with pkgs.libsForQt5; [
environment.plasma6.excludePackages = with pkgs.kdePackages; [
elisa
okular
gwenview
kate
khelpcenter
konsole
print-manager
kwalletmanager
okular
plasma-systemmonitor
gwenview
print-manager
];
};
}

View file

@ -40,10 +40,8 @@ let
# gsettings set $gnome_schema gtk-theme 'Dracula'
# https://github.com/crispyricepc/sway-nvidia/blob/2101a18698151a61266740f1297158119bf660ac/wlroots-env-nvidia.sh
# Hardware cursors not yet working on wlroots
export WLR_NO_HARDWARE_CURSORS=1
# Set wlroots renderer to Vulkan to avoid flickering
export WLR_RENDERER=vulkan
# Intel primary, NVIDIA secondary
export WLR_DRM_DEVICES=/dev/dri/card1:/dev/dri/card0
# General wayland environment variables
export XDG_SESSION_TYPE=wayland
export QT_QPA_PLATFORM=wayland
@ -52,10 +50,8 @@ let
export MOZ_ENABLE_WAYLAND=1
export MOZ_USE_XINPUT2=1
# OpenGL Variables
export GBM_BACKEND=nvidia-drm
export __GL_GSYNC_ALLOWED=0
export __GL_VRR_ALLOWED=0
export __GLX_VENDOR_LIBRARY_NAME=nvidia
# Xwayland compatibility
export XWAYLAND_NO_GLAMOR=1
'';
@ -65,24 +61,28 @@ in {
config = lib.mkIf cfg.enable {
environment.systemPackages = (with pkgs; [
# Window manager related
dbus-sway-environment
configure-gtk
wayland
xdg-utils # Open with default program
glib # gsettings
wl-clipboard
wl-clipboard # Copying to system clipboard in vim
wl-mirror # Mirror an output
wdisplays # Tool to configure displays
# Desktop Environment related
brightnessctl
dunst
libnotify
playerctl
swaybg
swaylock-effects
waybar
wlsunset
waycorner
# TODO Turn into own module/package?
dmenu
jq
j4-dmenu-desktop
rofi
@ -91,6 +91,7 @@ in {
]);
environment.sessionVariables = {
ASSETS_DIR = ../../../../assets;
SCRIPT_DIR = ../../../../scripts;
};
@ -98,54 +99,44 @@ in {
dejavu_fonts
font-awesome
noto-fonts
noto-fonts-cjk
noto-fonts-emoji
source-han-sans
source-han-sans-japanese
source-han-serif-japanese
noto-fonts-cjk-sans
noto-fonts-cjk-serif
noto-fonts-color-emoji
];
security.polkit.enable = true;
hardware.graphics.enable = true;
services = {
atd.enable = true; # Required by sunset.sh
dbus.enable = true;
displayManager.ly.enable = true;
gnome.gnome-keyring.enable = true;
pipewire = {
enable = true;
alsa.enable = true;
pulse.enable = true;
};
power-profiles-daemon.enable = true;
xserver = {
displayManager.session = [{
manage = "window";
name = "Sway";
start = ''
${pkgs.sway}/bin/sway --unsupported-gpu &
waitPID=$!
'';
}];
videoDrivers = [ "nouveau" ];
};
# xserver.videoDrivers = [ "nouveau" ];
xserver.videoDrivers = [ "nvidia" ];
};
xdg.portal = {
enable = true;
wlr.enable = true;
extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
extraPortals = with pkgs; [
xdg-desktop-portal-gtk
gtk-session-lock
];
xdgOpenUsePortal = true;
};
programs.sway = {
enable = true;
package = pkgs.swayfx;
wrapperFeatures.gtk = true;
};
sisyphus.users.wantedGroups = [
config.users.groups.video.name # Brightnessctl
];
sisyphus = {
desktop.waybar.enable = true;
users.wantedGroups = [
config.users.groups.video.name # Brightnessctl
];
};
};
}

View file

@ -0,0 +1,24 @@
{ config, lib, pkgs, ... }:
let
cfg = config.sisyphus.desktop.waybar;
in {
options.sisyphus.desktop.waybar.enable = lib.mkEnableOption "Waybar";
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
libnotify
playerctl
jq
j4-dmenu-desktop
];
fonts.packages = with pkgs; [
font-awesome_6
];
programs.waybar.enable = true;
services.atd.enable = true; # Command scheduler
};
}

View file

@ -1,6 +1,7 @@
{
imports = [
./eid
./fingerprint-scanner
./nvidia
./yubikey
];

View file

@ -0,0 +1,30 @@
{ config, lib, pkgs, ... }:
let
cfg = config.sisyphus.hardware.fingerprint-scanner;
in {
options.sisyphus.hardware.fingerprint-scanner.enable = lib.mkEnableOption "Fingerprint scanner support";
config = lib.mkIf cfg.enable {
# Enable driver
services.fprintd = {
enable = true;
# Enable Touch OEM Drivers library support
tod = {
enable = true;
# Dell drivers
driver = pkgs.libfprint-2-tod1-broadcom;
};
};
# Start driver at boot
systemd.services.fprintd = {
wantedBy = [
"multi-user.target"
];
serviceConfig.Type = "simple";
};
};
}

View file

@ -25,36 +25,36 @@ in {
};
config = lib.mkIf cfg.enable {
# boot = {
# extraModprobeConfig = "options nvidia-drm modeset=1";
#
# initrd.kernelModules = [
# "nvidia"
# "nvidia_modeset"
# "nvidia_uvm"
# "nvidia_drm"
# ];
# };
boot.kernelParams = [ "nvidia_drm.fbdev=1" ];
hardware = {
opengl = {
graphics = {
enable = true;
driSupport = true;
driSupport32Bit = true;
enable32Bit = true;
extraPackages = with pkgs; [
intel-ocl
intel-compute-runtime
intel-graphics-compiler
opencl-clhpp
opencl-headers
ocl-icd
];
};
nvidia = {
# Use the NVidia open source kernel module (or not)
open = false;
package = config.boot.kernelPackages.nvidiaPackages.stable;
branch = "stable";
# To override the default package set by the branch:
package = config.boot.kernelPackages.nvidiaPackages.latest;
# Modesetting is required.
modesetting.enable = true;
nvidiaSettings = cfg.gui-settings;
powerManagement = {
enable = do-offloading;
enable = true; # do-offloading
finegrained = do-offloading;
};
# Avoid flickering
forceFullCompositionPipeline = true;
prime = lib.mkMerge [
(lib.mkIf do-offloading {
offload = {

View file

@ -25,11 +25,17 @@ in {
];
# Send a notification if the YubiKey is waiting for touch.
systemd.user.services.yubikey-touch-detector = {
systemd.services.yubikey-touch-detector = {
enable = true;
description = "Detects when your YubiKey is waiting for a touch";
path = with pkgs; [ yubikey-touch-detector ];
script = ''exec yubikey-touch-detector --notify'';
path = with pkgs; [
gnupg
yubikey-touch-detector
];
wantedBy = [
"graphical-session.target"
];
script = ''exec yubikey-touch-detector --libnotify'';
environment.YUBIKEY_TOUCH_DETECTOR_LIBNOTIFY = "true";
};
};

View file

@ -1,6 +1,8 @@
{
imports = [
./networkmanager
./openconnect-sso
./openconnect
./openvpn
./tailscale
];
}

View file

@ -1,13 +0,0 @@
{ config, inputs, lib, pkgs, ... }:
let
cfg = config.sisyphus.networking.openconnect-sso;
in {
options.sisyphus.networking.openconnect-sso.enable = lib.mkEnableOption "OpenConnect SSO";
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
inputs.openconnect-sso.packages.${config.nixpkgs.localSystem.system}.default
];
};
}

View file

@ -0,0 +1,22 @@
{ config, inputs, lib, pkgs, ... }:
let
cfg = config.sisyphus.networking.openconnect;
ugentVpn = pkgs.writeShellApplication {
name = "ugent-vpn";
runtimeInputs = with pkgs; [
openconnect
];
text = builtins.readFile ./ugent-vpn.sh;
};
in {
options.sisyphus.networking.openconnect.enable = lib.mkEnableOption "OpenConnect";
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
openconnect
ugentVpn
];
};
}

View file

@ -0,0 +1,15 @@
#!/usr/bin/env bash
set -e
echo 'Starting UGent SSO authentication...'
eval "$( openconnect --authenticate --protocol=anyconnect vpn.ugent.be )"
if [ -z "${COOKIE}" ]; then
echo 'Authentication failed or was aborted.'
exit 1
fi
echo 'Authentication successful. Establishing tunnel...'
sudo openconnect --protocol=anyconnect --cookie="${COOKIE}" "${CONNECT_URL}" --servercert="${FINGERPRINT}" --resolve="${RESOLVE}"

View file

@ -0,0 +1,14 @@
{ config, lib, ... }:
let
cfg = config.sisyphus.networking.openvpn;
in {
options.sisyphus.networking.openvpn.enable = lib.mkEnableOption "OpenVPN client";
config = lib.mkIf cfg.enable {
programs.openvpn3.enable = true;
# https://github.com/NixOS/nixpkgs/issues/379074
services.resolved.enable = true;
};
}

View file

@ -0,0 +1,22 @@
{ config, lib, pkgs, pkgs-unstable, ... }:
let
cfg = config.sisyphus.networking.tailscale;
in {
options.sisyphus.networking.tailscale.enable = lib.mkEnableOption "Tailscale";
config = lib.mkIf cfg.enable {
services = {
tailscale = {
enable = true;
package = pkgs-unstable.tailscale;
useRoutingFeatures = "client";
extraDaemonFlags = [
"--no-logs-no-support"
];
};
resolved.enable = true;
};
};
}

View file

@ -9,6 +9,6 @@ in {
extraOptions = ''
experimental-features = nix-command flakes
'';
package = pkgs.nixFlakes;
package = pkgs.nixVersions.stable;
};
}

View file

@ -1,9 +1,11 @@
{
imports = [
./direnv
./git
./home-manager
./sops
./spotify-adblock
./ssh
./wireshark
];
}

View file

@ -8,7 +8,7 @@ in {
config = lib.mkIf cfg.enable {
programs.direnv = {
enable = true;
nix-direnv.enable = true; # Use nix-specific direnv.
nix-direnv.enable = true; # Use nix-specific direnv, https://github.com/nix-community/nix-direnv
};
# This is also done by setting programs.direnv.persistDerivations.

View file

@ -0,0 +1,12 @@
{ config, lib, pkgs, ... }:
let
cfg = config.sisyphus.programs.git;
in {
options.sisyphus.programs.git.enable = lib.mkEnableOption "Git";
config.programs.git = lib.mkIf cfg.enable {
enable = true;
lfs.enable = true;
};
}

View file

@ -14,8 +14,8 @@ in {
# Add secrets.yml to the Nix Store.
defaultSopsFile = ../../../secrets/secrets.yaml;
age = {
# Automatically import SSH keys as age keys.
sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
# Don't derive age keys from SSH keys.
sshKeyPaths = [ ];
# Use an age key that is expected to already be in the filesystem.
# You will need to place this file manually.
keyFile = "/var/lib/sops-nix/key.txt";

View file

@ -0,0 +1,23 @@
{ config, lib, pkgs, ... }:
let
cfg = config.sisyphus.programs.wireshark;
in {
options.sisyphus.programs.wireshark.enable = lib.mkEnableOption "Wireshark";
config = lib.mkIf cfg.enable {
environment.systemPackages = with pkgs; [
wireshark
];
programs.wireshark = {
enable = true;
dumpcap.enable = true;
usbmon.enable = false;
};
sisyphus.users.wantedGroups = [
"wireshark"
];
};
}

View file

@ -5,6 +5,6 @@
./openssh
./pipewire
./printing
./tailscale
./remEYEnder
];
}

View file

@ -6,18 +6,24 @@ in {
options.sisyphus.services.openrgb.enable = lib.mkEnableOption "OpenRGB";
config = lib.mkIf cfg.enable {
services.udev.packages = with pkgs; [
openrgb
];
boot.kernelModules = [ "i2c-dev" ];
environment.systemPackages = with pkgs; [
openrgb-with-all-plugins
];
hardware.i2c.enable = true;
services.hardware.openrgb = {
enable = true;
package = pkgs.openrgb-with-all-plugins;
motherboard = "intel";
services = {
hardware.openrgb = {
enable = true;
package = pkgs.openrgb-with-all-plugins;
motherboard = "intel";
};
udev.packages = with pkgs; [
openrgb
];
};
};
}

View file

@ -6,8 +6,6 @@ in {
options.sisyphus.services.pipewire.enable = lib.mkEnableOption "Pipewire";
config = lib.mkIf cfg.enable {
sound.enable = true;
hardware.pulseaudio.enable = false;
security.rtkit.enable = true;
services.pipewire = {
enable = true;
@ -20,6 +18,24 @@ in {
# use the example session manager (no others are packaged yet so this is enabled by default,
# no need to redefine it in your config for now)
#media-session.enable = true;
wireplumber = {
enable = true;
# Fix pops after silence
extraConfig."99-disable-suspend" = {
"monitor.alsa.rules" = [
{
matches = [
# Headphone jack on laptop
{ "node.name" = "alsa_output.pci-0000_00_1f.3.analog-stereo"; }
];
actions.update-props = {
"session.suspend-timeout-seconds" = 0;
};
}
];
};
};
};
};
}

View file

@ -10,7 +10,7 @@ in {
printing.enable = true;
avahi = {
enable = true;
nssmdns = true;
nssmdns4 = true;
openFirewall = true;
};
};

View file

@ -0,0 +1,33 @@
{ config, lib, pkgs, ... }:
let
cfg = config.sisyphus.services.remEYEnder;
in {
options.sisyphus.services.remEYEnder.enable = lib.mkEnableOption "Eye reminder";
config = lib.mkIf cfg.enable {
systemd.user = {
services.remEYEnder = {
enable = true;
description = "Send an eye reminder";
serviceConfig.Type = "oneshot";
script = builtins.readFile ./remEYEnder.sh;
path = with pkgs; [
libnotify
];
};
timers.remEYEnder = {
enable = true;
description = "Timer for remEYEnders, runs every 20 minutes.";
wantedBy = [
"timers.target"
];
timerConfig = {
OnActiveSec = "20min";
OnUnitActiveSec = "20min";
Unit = "remEYEnder.service";
};
};
};
};
}

View file

@ -0,0 +1 @@
../../../../scripts/remEYEnder.sh

File diff suppressed because one or more lines are too long

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

View file

@ -1,15 +0,0 @@
{ config, lib, pkgs, pkgs-unstable, ... }:
let
cfg = config.sisyphus.services.tailscale;
in {
options.sisyphus.services.tailscale.enable = lib.mkEnableOption "Tailscale";
config = lib.mkIf cfg.enable {
services.tailscale = {
enable = true;
package = pkgs-unstable.tailscale;
useRoutingFeatures = "client";
};
};
}

View file

@ -10,8 +10,15 @@ in {
enable = true;
# Because these are made for development purposes and not for servers
enableOnBoot = false;
daemon.settings.features.cdi = true;
};
# Updated version of deprecated enableNvidia.
hardware.nvidia-container-toolkit.enable = true;
sisyphus.users.wantedGroups = [
"docker"
];
};
}

View file

@ -1,35 +1,24 @@
{ config, lib, pkgs, ... }:
{ config, lib, pkgs-unstable, ... }:
let
cfg = config.sisyphus.virtualisation.virtualbox;
# I like to override the virtualbox package because it is frequently
# and rebuilds take quite long.
inherit (pkgs) fetchurl;
version = "7.0.10";
virtualbox-override = pkgs.virtualbox.overrideAttrs (oldAttrs: {
src = fetchurl {
url = "https://download.virtualbox.org/virtualbox/${version}/VirtualBox-${version}.tar.bz2";
sha256 = "0b1e6d8b7f87d017c7fae37f80586acff04f799ffc1d51e995954d6415dee371";
};
});
in {
options.sisyphus.virtualisation.virtualbox.enable = lib.mkEnableOption "VirtualBox";
config = lib.mkIf cfg.enable {
virtualisation.virtualbox = {
host = {
enable = true;
enableExtensionPack = true;
package = virtualbox-override;
};
guest = {
enable = true;
clipboard = true;
seamless = true;
};
virtualisation.virtualbox.host = {
enable = true;
enableExtensionPack = true;
enableHardening = true;
package = pkgs-unstable.virtualbox;
};
# https://www.virtualbox.org/ticket/22248#comment:1
# and
# https://github.com/NixOS/nixpkgs/pull/444438
boot.kernelParams = [ "kvm.enable_virt_at_load=0" ];
# Define the group
users.groups.vboxusers = {};

View file

@ -9,7 +9,7 @@ final: prev: {
sha256 = "sha256-UzpHAHpQx2MlmBNKm2turjeVmgp5zXKWm3nZbEo0mYE=";
};
cargoHash = "sha256-oHfk68mAIcmOenW7jn71Xpt8hWVDtxyInWhVN2rH+kk=";
cargoHash = "sha256-oGpe+kBf6kBboyx/YfbQBt1vvjtXd1n2pOH6FNcbF8M=";
buildInputs = with final; [
cargo

View file

@ -1,22 +0,0 @@
GitHub:
ssh: ENC[AES256_GCM,data:jzRpTgefhZg7Vhm8QvWNsPBko1yw56sM/XehY72lAc7aRz+dx6BGgyYbZiifd7GrGJGUbH6gWfUg8YjgVla6VRsiHCEvSK3bY0ADDwTeSUs+wuybYXQZqhivSCInVtVSNAcp99uI1QwKor289zmxcFtSZEXgU1OCSel/8br+qipAbOkzAKX1v15eigjY4OSQxXL59EuuuHEQ+vjVVv95tDv03jaNAoU9UKr0Atrny/Fn2sQn4Tmec5Q1XdvDErKhSxrAFiACkxXUwPZMHez+BUZrmkksqpzNJjYNIlmsITuOVr7Fyen9wotAwsDf96Fmz5JYLtRX9CAboUgQLdUOKprwX/xgBnFtDTSH1Qr785T1QSAZL6xdE6hNibxZO3vGeeaPC3oGB5g9x5CwTQelMdOUPKdKorCDj226o56cTc/IQxUpsULbeOyi2pMGHiTHbiQBzHpxWyQ/gBktPkF25GOFeaCu3gW+xsspX91jSKudcYdBqWUNmJcdsfHfPxPM4cZtA/sVMyoA+YcehgU7GTu9DAlxDTug/JWo,iv:5shfzmrFFVEuaYmyTkBMAw9BIFFkKz0yl1dyJWxq6Y4=,tag:CX7TBJJXCKuIPSmg9/RpGg==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYWWFUdnpERVlkK29TQ09k
SnJMVm5rUEV6S0huSzJ2YjFFQ3pNR0pmZWprClZEVDloeDE2ODNkMVVJTUtqaENz
ZzhwTTA4V2xOeW55WGtPZU5FWElQNDAKLS0tIFh5ZWtmZHRBWTAvM3ZwY3pKQ0R6
aDNUbFlhWWVoOWpjVlV1VTVJejlSMjQK6wCeCRdHY5oyTX6/R1U5AOGJyp0exi1A
dWPUMfkKBBBkrR+G6ougd8o3FwFf+yfb5RhaTxxqjit6p2RyMjR64w==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2023-09-11T10:23:48Z"
mac: ENC[AES256_GCM,data:3XEbhFY1TlXo6bTctV2u4i6QPzXnJC6iU3F/MUARSQl1z4peOB5x8hZfdiV/hVMR8I+83TxDcEAmKDrcaMf89Tqa+OiD//wBekMUfS7AmBRhpv7X5qfarflfnygacFsAMhf/bdiqowYbGSNvlPjueqHJaFZ+3x/wPrt/jAYNlr8=,iv:ciQmY7bE+Je6kMlmxxtQvp+r3e/ZK942tT4TtXhDX2M=,tag:4+7uZlEm5bcRfZC7pp5Y7Q==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.7.3

View file

@ -0,0 +1,41 @@
HomeLab:
Gitea:
ssh: ENC[AES256_GCM,data:+H9qhfOg5WlTB7pihvbJ9omY/zLTAADe8KzI4fbdZ7NuaM0auC95AIQqhwNNCZNglg9UGOVL662pY7dNhbQ/2iCLPHSPgFFXf3fx1moRRcYYQzoJxsgxp19FZQeGNJ0qfRf72xYbZQZKslyHQmcqDieoVTyhaLqTfgC8MQ/UZofw/ortmgME7z51rGV5sXXMjxpJpHz9JxiPwQEL0ABWDAeCqBVBzlqqwdmfKEdkcR4l3USHfH1iNF5XQ5V26I+UGDOyoixt1c/BXzD9xzKI7MUDoRz+qfC6C62LIlEgqZY5tWg+tVZnqobakxwH6d8pXtQ7vaIREEP0LqQMkrNcK8X+cDRteToQ1fcxtN1V+JfZSa9pVC+iGgvmSZ00q4bnOgTmgO9IZ80TvOR4bHpRhjM5l4JMbLBv2jqY1zeUx/5L3WNuYIm9sL5mWXkV/RAD8WCemNSWdKbGsvByEUeiFcxczL/vQ6y3fi+ntmXUgeXVy5zVNkNlYbqd+DemBmwZQb9D1T5T97i2ChciYb3/ON1NObja/bt0PTQa,iv:hIbwsPcDSfgDItlvFFy0vCjuQWvgoQHBH60v8nTVTNg=,tag:1T/TdTEy98TfgMzYAxfHKA==,type:str]
HTPC:
ssh: ENC[AES256_GCM,data:svt6jhMXVCydmlcoa052TtFoIwQiAzNJRn9GPZDBuOGSnB83kUpuy/oqPOIa2ipco0L/5F/mQWn7OHUFtyhWWMerzY8niPldUDKH4jgsvRhRIatGOFiDyL8oA+f1O9lmhyFx35uxGa+Q6tn6rtXVKRVWQFe8kYBvGYjugKixsOMugoqLIxY8wUlMTzm6uDd7a72s/0hgQZGKp0eHWBHEdSJGPdv8svVDZ1PBMrlZa5ZpuiUmmvZvyCEnRtImUZALG4nKMvJjunxKr/4MJhWuffQ60jLYzInoGggiJlwBm+E+m43FwIFndY+LJ+ykO5RAbHhSwgXsCS5WXBrvDGuOTNAlIp6yTgSK1DCzSjzOJOc93rVSPhPdkaOoKgxhz1k95qCEhYUf9vyBgyIaOntWEArV+OZmHje6awbk4fpyIzRe7ggHlhKILYoGYzeejxbMGB9nH15RlUiTF7QnAWxWNSwcET6dSn2MtpC3yegnYl4u3eJ7YkHHYYQtwCQ9vCnt0i/sfuJmbrSFBXnVKMWB2w1Att145gDdlDok,iv:4bkSYvgmG6j/AwVnfGsLjdqtyP/gpWRvOKZCQxP0sMs=,tag:LyjE7dTt0+IDuSlbVLgCMg==,type:str]
Hugo:
ssh: ENC[AES256_GCM,data:y233CFIH7/n4EGEd2D7MuoprcMV9A8DaiV9JYZ6sr5j+hZnGr8sIAm9/55Bi2cD74sBZcE+tjOz+V2aJ2llKgcdS84ZmXMPh6KQ2QYRYuGdBLeztl8foKdimToblBapebTVO7Rc2mdhg7sZtC/TKSIJnG3R3lRfRdKaxNjaRS51epl7VZKGhLBjZoZqMXOezY7lvNBvF3hFfMh5el5I5Te/yQbbp0a7DkAvA+c1nG9bo9FN0h3VJJTzcuHqvGHI736VosLe8UGirMkX9mBwB8ZV4+2Vp7ZsSHnX5or/MzuYexT0zeLbTNHfj64d2W2/LKDkxNc35Sw7NvxwsVj3k2UHC2jEgus2z0AdMFszEFXh+Eu9wK8yX4ebzUut+OHNPuxvIk+ORxYr3OdVkOhhWHLinu/skNg0u5OdUXo/0p1876+gpcnOVC5UrUflwrtKGQgNk+ovWWjSfcQMh+gI6GYXzksX3YdMEriYZt4Z8lev2od/i7q48cV4W3Lo6TDDttipynxQus6K+J3oBKRirLHylRA5gusqUOVzC,iv:thw9OUnA02qe6aMuLTwy+q/a6isB375/k7JixPEy960=,tag:s95FtFRmPG0Up2oVuQyXsg==,type:str]
Nextcloud:
ssh: ENC[AES256_GCM,data:aVqa57u9hIOquP367EDj2rlyQWRe3EZv8l5cC+yQQKCri2bN5IFSq8qNemOIcU9ycBnxIyK6gLerJYQQcgzIIARmnfDpbJ9w+EeUL5yvPVJN6FM7oBeaL9mzYRl8aDKr22LhL9YiKAT1nKHESmTb3TZRvuvWJTGzCMRV85ROGxZYVUgG6BjuHEzuTsc4fy3NVPIl7/4ZjPgNNYx+UNsV5xwTejveB/sGblVrHOO74LZXzUWRlQNun5nM3MY3GALzfrPrVIAyGNu37CGachtwxaPOj7vUKZmD/e+XajYVKRJ3v33jrUeI0dDmhuwJj3taoFik6suAyiK3RlDdeWoERR8vqduiyxJnVMs6mNkigzkVtifpwZyQ8vNyG7w1JNPygMYgQzjN43lGVml8cx1lZvcoBzQabjWxcNzhV8gXxoGKvAwUV7ELB6l00rUH+EeI0uU8/IFm9kwmZq42ciM/bRGSGXzo2PYG2OHOiDe5b0nrIlajaRKd+vuuzTtFFU9EwH0GPzERRaoxVK+h9tzcco/REITCE+CVlHSx,iv:bb1X95HK5tT7EJpqqgMOUxw5VO5MuzoYxkPIzR5sEqU=,tag:y2LKHm7czwyuHp7Ea8KiYw==,type:str]
NixOS:
admin:
ssh: ENC[AES256_GCM,data:rAn/H2CtK2dkES2UIJrZbEP/3rqLgJsy5rortmdqoCthQ41IxztiaH1VtdaVDtw5j0qu49RJ59KkmYpOQXC2okAgLeqcb+J9iwrwspfKd+/I186a4gHZ2l+hGpmr3Vbs6K/UoCY67uygZhznBuwKeW4EjYJgGS7zInJFmMvcMV1rP/t4VoW+5oxptQNCrzoRukIG6NiAOcqU1GtvBfL5PxLaTWUEcZMYuo6sY/9VuEWgkZP1bmhBPUIv9D5yJo94KQr0YOaX4lz2pwd+K0cdD8d0Lh8B5YplA1NDCUnBbuDXfH0aSUAm7DCm6Y/E2UECEMRLuwfyEoe/yaHh8iCGveI//FkmiIKNY1SmTkjM2Fdfk6QaVDF8sG2CWdX21H3senfeM6jSow7JLY1LDvC2WxO4YIJEi14Y7zEpIZinWimyAhihPvMLnwd3taOhE59NrTOQKQS3tyFX+5tO3LtBrpn+Tm/B7WO49EkRn1LXN8CWkFnEEGXgxfNRg91C967nHaNpDMssGjfVG20WwYAtMKXzrNyzSEJbZglQ,iv:vY/8yyO0eLzpdho9aPUH9WGQ8Cp5LA+5RckjzDgYMMY=,tag:Jar1qVS/c1rQ8f3qpYqJdA==,type:str]
Roxanne:
ghost:
ssh: ENC[AES256_GCM,data:hkgVUVyCLANeYB4bcCTLB/F6eAbg7J4eN8y+VVzBfkcgnpDmXmghBihreQVT7OIwRrHIH1ok2vuH8vgXb38tuplUD5I8e0Gqy3EqpOGagsO8lss4aIg2lRwZ9WazJknvo4OaGc34jrwcZicesnaxK6g+GX2r2N4caGKMuOZ2i1mLKBwOcEtL6l3REKrGkExd3mYJX1Yqs7sMbGLNpfemDghv646zvxDRwPby49qIPA8OtGR+DBMZTTEviNqamJaFbs7YX+K77J1NHK59u6UfzU6hEjTBEYIjkFDzGATAZAopCsjOHcAA0alejHK4QZZt3e8unVsLICNK08ZCyEzwSXQ/wpUh3ccGcLit2t1LYZT4PqqG8+6ooaQYso67Wral0pdsTsrF0mGNfsZm76MDV9puP5B+IInanHz+2mCHbdmTi6rg9t8Q6mpFqrUbrwxMn2Ns1proBXBCqK/sFjC/bVIyMHUVOh6GYcKaVTv8ecB9ZEjp5dZ4VeStqTMT+xqS7dXBAJzGytLwXT/JaQelIE0w47aBaGy63Pqy,iv:WuAGU+ru8xLp2LXK12x/ueCH0XDxA0zGUt7+HWUdVMo=,tag:UqUMD/jSdTXOkf0kyMqwHA==,type:str]
Vaultwarden:
ssh: ENC[AES256_GCM,data:LJ7nbIdl1GqcsBtOwqsDtjKMfks13X5hsGkEFxDj0eX1EegEBkoWnzstu34RTgt1O1O+3Y/Amg7cDce2ZyZrTwDmLqinpuJD3CI7pRtQygAH8X9wPQYE6U3D1t4dXuMcDftjS+uY0CJFmq01dLv0GytSZSiNBcqNepTY+fO20yylyUbDGjI3Foyi86ipEtLVeFJqESiHDMHn/Cr+ggpLNMXijpnyoCRstPlm3GY3n6EhPwKhwovLB3AXolUeScnInIpwiikVTkYLNLCbrG8KAAr+DmWK3GTZYToH0wV8HpacPQI+4cHf96+EvAVlYMwGyQztPmXO7/9xUgWCNYow+z8BD6ijMuyZHT9aNkoAPt/y72N/PSf5HqW0QVWr3LmyIG+i9Bxbhqc7mRUIy4wZsODbtoO8/RtAly6mXIg0DZLlbo8kDe3TE3m+P5E/KQJOAvM2QdL+NXPcf2J2JYHW4kzITx447Bc3+F/DRs616MhekIoDybLhY3MT0XvYX1d1wAv/Ip98EGzfptXjnJvKPcJgTBlqNyeKuPOe,iv:oEGJUpoj+N30TgLpSWQqGdqYBdWLUWnSuQ+7TdSgmFc=,tag:AUZ2QnPUxLHaxsHbrmSYZQ==,type:str]
sops:
age:
- recipient: age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlL05vZHk2T1B6OHArUXlj
bEZWV0dUeVN0M3ZpeHdKcGlKV1RWYmRLM0FjCm9PLzBZTFo3RjhZTEhYMDBSN2Nj
aithQ2hpZXVCSngxcVBvQ2hKRzFXUEEKLS0tIE5rL0NHb1llRmlSQXVUeU8rVmNY
aEZHdDFEWUdxMzRVVjFhQWZmS04wRkkKrD2CiwdNcbK9s64omQ7xSA29J48HwIHa
ickyL/uorYhXmBKhqdvNq/j1Nb88LR9ti55Z7eecJNbyJb4OTtgzXQ==
-----END AGE ENCRYPTED FILE-----
- recipient: age1qzutny0mqpcccqw6myyfntu6wcskruu9ghzvt6r4te7afkqwnguq05ex37
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBBOWNXQ1BsekdoS3BCdHA4
YTJJRHJBTEJ1bmhkWktSamYyRk1TUmovZ2trCnBXbUZQZFBndmU3VzJHVjczZGtY
ZkJDY3RzSEhXQVlLL0g1QTYxSC9CZGMKLS0tIGFBZnNlWmZjZFdkdGZvaHA5ZjMw
NFRtOFIybnFPWm1idFY0WEVqVGxOK1UKiJDByqKv/i/l9dvOplDyzDORU3ulhSwi
6xyEqmyNQpIkiS6TLZZYrBlQMDYqZ2gj1HhdIUssWJCf5Ho8KVDjJQ==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-10-18T15:55:58Z"
mac: ENC[AES256_GCM,data:vdVOTFlDD9jlGJksI5TDxk3stPkLY8lB6LMhV6QGqh9R2vaGuGGh6RZuR6AInq1Rm89innA6M1S2UUM6Jef1EKiPgq41neWMx/i3n7Ixx8FcraO/lgUYKG5yszYdjAlLQvKWqIbvX0bMYNwpF10FO5OyiXWiJrP9Om0Pjvk7dO8=,iv:W9I1nv0fKckNlNjJF0U4HlkyI5VDpvOGiSo0GeOODaY=,tag:RjkSTQYejyf1WO0LilbXYg==,type:str]
unencrypted_suffix: _unencrypted
version: 3.10.2

View file

@ -1,24 +0,0 @@
Hugo:
ssh: ENC[AES256_GCM,data:Qi4YEvG64lJqhISMNtuC0mM02TU5KPpzdgs8x2UJwxAxus4+Aa3nIttkbcbKxtobL7ohKcMFGq7bBdj+s4zbctctknHdjiwj1caDoD7+Fm5H0RWLe7yjt5e4IxRywN8cNF59FfINl2tMutuENOzSucjHIXTKSV/ARZzwhcyZkQy//YvlReUSrUNaNkVM1VtjVILOToAXGzQx5w74eX+9JYV9FtZRTbr/spule+UDDtPZaaiFZmFfE5YjULFPaZJo2iUiirKalPodxfIar9eXzoN+bOQbz2Xys1QHNEt2cwWjERruCsojiyA+XeYFreWEWGggSEXizxv7cS5ab1e9XqtWR+u3Gdy/t1/cjoMBVXuLxQ+BwTlAO8NDgRbW0aq8q5yOsPCjShI/N4EVN5qtMUT1+mYZLCiZPPXbLBIiyqIWea/Ru8iIo7+WoF2iDBgshwnw8+uGDFfwlNh3SAwMSQOcGg06+U17PeU56Q/wqID2lEMDgGfHdqObvMlae1q+Qa9cwrp4xDw5S42NlgVaNcovUav5US5kO43r,iv:xvuRv4sqLRGv9npIVjnGV7zDPzIyS58ZKN2T23BmMZs=,tag:iGnBzgRhREEfKjE/ea5Drw==,type:str]
Gitea:
ssh: ENC[AES256_GCM,data:digqDmnEPg/Zn9Xt7+Z/R9lTBs6CeOgHgIhstWxHnvucwshUO7Zu+l80YPyzAck0pO5YIKML8hjAqj30lYqSPRzG1uRpT7likCy15MqyyQ64U+5PGQRNhybo1eYoqVFYd2sYc5xzkve1b8zCDfxj2mbmRYETYSidHZLaDilq6iKtWWSX+mnTXqJ2gIj+J7pfFBOHskWglnrVdj93AOdpG6cmnvzE7ey8SrMt9t0GzmRFAvjP3slio8NTsI97fu3isF0phGoh8q9tGGRnRMDq3E33zzntT3jawtWiib9ZCxuJ8Zhwc1fIF07YfBJ+sZJ7Kau1205NFJtISGbVhVmpD9kQdoFwYQxYJuvPcDYyIYH/K86bYnBmJWRCwbTh7Es7DCCC90VY/yMjRNoYvjupjhuHKGXE8O/Y8weERZ+GuZ8BSxFwU81YK9mcQyw+Z+MdAFsZEhR7cpxRkty2INKxOdX8wJGVw3A1cInwuiBjLiED0ndh39RqJbE8DUQAJgngSbYK52rCadjhs2xf+tPiDatsDMAHU2DpyDcz,iv:Dh9hhr1mp+gXA1eUvsJVb5opbaEtdRMKAd4HQSQlOpc=,tag:k4M96tstNATvyFe6xF2IzQ==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYWWFUdnpERVlkK29TQ09k
SnJMVm5rUEV6S0huSzJ2YjFFQ3pNR0pmZWprClZEVDloeDE2ODNkMVVJTUtqaENz
ZzhwTTA4V2xOeW55WGtPZU5FWElQNDAKLS0tIFh5ZWtmZHRBWTAvM3ZwY3pKQ0R6
aDNUbFlhWWVoOWpjVlV1VTVJejlSMjQK6wCeCRdHY5oyTX6/R1U5AOGJyp0exi1A
dWPUMfkKBBBkrR+G6ougd8o3FwFf+yfb5RhaTxxqjit6p2RyMjR64w==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2023-10-05T19:05:15Z"
mac: ENC[AES256_GCM,data:8xMV6RkmXpt2uY07E+59ZXwTwTL6oqo9j5sFOxejwnFU06MGW9t1h/5HFg+GKpp3Jj1LT6a7uuyip6bDGCMEhI054sTv2uDlOIFd4nbHwOh+keEH/FLa8csTq4yyisROsaXUUCtWxraGXz0MQXT8xlQMT7Pn0x43JssmPhOwrRo=,iv:JKNsroIAxvV5V23at/DsDdud5idVn5IEQHrgeFHR3fQ=,tag:XY0hikk4yvqfynPI8q+GBg==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.7.3

View file

@ -6,22 +6,26 @@ UGent:
SubGit:
ssh: ENC[AES256_GCM,data:hJAle4DHJNvX569reclBG5rEdWsjAyV2TtHYMiPfky/dMKJkYgT4+T0doLfUn1O6at77kJGPmwUEvmK819DUuvHtNY7c6angV7iLygJ/ThI1FIFOKH+NxEsI3scoT0VDDybHpgice/fcJL1tMcvE74+dWOnZ2r4pxcMJEFHUPVVWcl9/stJLn78OonsyWpj8PglcnYFOfZ6THIe3lyNBxRp7XEweuwjacthGzOzNu3Z95zcCAnAokFVZ570glJNhjJVNEmPHZkHOcGiGNNM4JNbR11v+dOYtac942t/mmmWwAzbznuu8ZLupYWjdg/f07ftkPAwFwCoXblZ3708Lvf6uOt/CPeWvEII2Haf1Cr5w+U6TAt14zzL73xCSQqwz1TfkcmD+bJplmtcpSP/KX8/BRK7qr6Ec5T9ecbraRB7zDBg0X2x51DSHLrA7UIhpI9JNaOArU5UOVYTWwuzFiGG61elJMcPZ5vWEVrTCocfa4INPo4B2MkFbbsYf6xnY1L3Wc9LQjkff6aCqYnQaXZ/WfPWepf9YvYG1,iv:0Bm1r0FuJJKKmcbTiPL36rb5FaMZfOO7Mx8pXU2FSfg=,tag:0ShoJPJUx37mEAus+mhPmw==,type:str]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYWWFUdnpERVlkK29TQ09k
SnJMVm5rUEV6S0huSzJ2YjFFQ3pNR0pmZWprClZEVDloeDE2ODNkMVVJTUtqaENz
ZzhwTTA4V2xOeW55WGtPZU5FWElQNDAKLS0tIFh5ZWtmZHRBWTAvM3ZwY3pKQ0R6
aDNUbFlhWWVoOWpjVlV1VTVJejlSMjQK6wCeCRdHY5oyTX6/R1U5AOGJyp0exi1A
dWPUMfkKBBBkrR+G6ougd8o3FwFf+yfb5RhaTxxqjit6p2RyMjR64w==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBpb0dlWE5PNllnME1jQWE4
cHFzWkR4ZzNaWlR0WDJ4c1hEdlJGN0FISWlZCmNNdVRtL080QzgwQTZtTGpVRkxW
dkdvYXdQNUlhYWQrYlNDR2JISXdpdkkKLS0tIEpIU20rK3F3WGpBS1g3NmJqYWRX
SWlNbFZ0NTJJZ09Wd3JzK1hscjJoS2MK4GU8ndim80CaOjgvMwVlgIq/1VQIylSZ
EJl15zUFaDiDZUCcZE8TkJQ/rbGDSiq7KlWyFe48Q3UC86jfF88qCg==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2023-10-10T06:57:11Z"
mac: ENC[AES256_GCM,data:Tvwv2mqceAxi7ic3+95Y6hBMHjqVoCkYnTkEsXOrhumgXpuuB/QQ0ASEf6gbgkCLXGwnUAXsK41bIIJfFgYSk89fHw6AaXfs6a+zL2Mh5zkhMIE2bm68mFK8+/TX/e8SibbEwNZCKOcPqvaO6nK816KCmh3KKCbT9ObaB6CA/KI=,iv:YPKgYAnQ135JXou7q9jVN7b3SKIDwceKcbqiIjkqnTU=,tag:udPrEVu2F+hWkhNoEyjTYg==,type:str]
pgp: []
- recipient: age1qzutny0mqpcccqw6myyfntu6wcskruu9ghzvt6r4te7afkqwnguq05ex37
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYNjkzeHloK3hKUTJaMTdr
NUdiZ2JGZitqN1k0WCtEODU4R2MrTmUzR1hrCmNJL0Y4ZEpLN0l6ZmhGWEM5UktG
ck1PUnFSSVNCRUd5Sm9kSXNmVW5jZDQKLS0tIHpHWVBVNFNBSlUvZldJVGowUEtZ
S05HZ0FiSVlkUjRRV01TbjlpVFlkQWcK7jAqOYd9EDT93xpVgtpKl03EO6oHmGRR
iK9j2y7j1YSghPKDBrC5eKy9+IP/EFEBGygcokqT7C6Nscu80YhVbg==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2025-10-06T14:01:15Z"
mac: ENC[AES256_GCM,data:bWo5DGCt5cK02Lf61yKFDZLLaMmcWyba+03CZ35EnGz7Hoc1sl3qTmgJfNz8EKDeXTIkk33DdnI/kZ2nX7vsZ/QgOhFQWzWRYe1cxqiWyd0wnUlwdoeeFrBP3uOTHXAOVe6q77S3qChzBP3J+5OijztvdOVEOKFmFPSCgyA029Q=,iv:6DSp63IrtYyaFxkaify/JZDXpB76AaGGW/OcPTKBbvk=,tag:sPKddpcx60JFZ4VEGD1tnQ==,type:str]
unencrypted_suffix: _unencrypted
version: 3.7.3
version: 3.10.2

View file

@ -0,0 +1,28 @@
GitHub:
ssh: ENC[AES256_GCM,data:jzRpTgefhZg7Vhm8QvWNsPBko1yw56sM/XehY72lAc7aRz+dx6BGgyYbZiifd7GrGJGUbH6gWfUg8YjgVla6VRsiHCEvSK3bY0ADDwTeSUs+wuybYXQZqhivSCInVtVSNAcp99uI1QwKor289zmxcFtSZEXgU1OCSel/8br+qipAbOkzAKX1v15eigjY4OSQxXL59EuuuHEQ+vjVVv95tDv03jaNAoU9UKr0Atrny/Fn2sQn4Tmec5Q1XdvDErKhSxrAFiACkxXUwPZMHez+BUZrmkksqpzNJjYNIlmsITuOVr7Fyen9wotAwsDf96Fmz5JYLtRX9CAboUgQLdUOKprwX/xgBnFtDTSH1Qr785T1QSAZL6xdE6hNibxZO3vGeeaPC3oGB5g9x5CwTQelMdOUPKdKorCDj226o56cTc/IQxUpsULbeOyi2pMGHiTHbiQBzHpxWyQ/gBktPkF25GOFeaCu3gW+xsspX91jSKudcYdBqWUNmJcdsfHfPxPM4cZtA/sVMyoA+YcehgU7GTu9DAlxDTug/JWo,iv:5shfzmrFFVEuaYmyTkBMAw9BIFFkKz0yl1dyJWxq6Y4=,tag:CX7TBJJXCKuIPSmg9/RpGg==,type:str]
Gitea:
ssh: ENC[AES256_GCM,data:8eyuycMkBVMHfzaGeGs+0RA4vCpaAUTjCwiplUamypEk9BDYqxe+69O6OjJAGaPnmH4kpsb/WVd5sU6HNUogBuzDQhCrv2B6NadcmnV+fH3MHfAWvDy7R68PUkwcywWVOo65SONckjKVa0Y+8IeeJh9zpr36qCbbs+zPC4XTk+Y5R4vK/ocmSJSmwqVK1SfGGwOjFoJvHVI6jdXh//vgKaITqmyZV7N3OU9EiQp1FmNKwFf/x70w2LGATrNBcexwNy20ZYd6ewiAfJxFHR6Svfc2P5X2nlv99W5t1eU5QEGUcalcslsW/VkmFC3agN3Yry2EMIlfTlm0hm4+ryDGWEvgyUC0dLA8Ao0TLaaqig9HzBRP1h6aORe0lDwzTUg6WltrIu0s7hFwD4YLi1qP5lY99hvrDIRbTEg6AY6X4b32YFlyOXy0YDetv90+QyEcwANWO9MXz2S9hxuQmjOXMCVYMaiMLVUkG+mShbQuxTiFQt/7D83yOBSRLugx/aU318NKvUDlCt7wpZbMI3gBia4nUYLoLcXRKcAZ,iv:uc1ZtGdcolLrpQgS5n5LEAwBt0vMmkj2OuTXcn8sQ7A=,tag:F2ofcj0zEBgxwukMUd7+uw==,type:str]
sops:
age:
- recipient: age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwSDRZQ0pVNWhmdFo1UDVv
MFlrZEFtNjlpZ3pBU0VrdkFpR2x4WGxUZ0RRClJad1JPYWhFTWd1N2ZKQWsrSjFj
YXREaGRrbE15MEdpblJtcTk2cFk1eGsKLS0tIHE2ZTd3R1gwQ3E1VzkvZTZoZjBW
aTRLcFJ6NkpJRjkyenVxeFRLVmgwMjQK47HRKyg1SxWABZHCdVdIaPEKoSiWIOO/
OYu/1owbUwTh1KouUb4tgNmVBOkERJ9i3lEjWLHUWrlCAUImc9dG4g==
-----END AGE ENCRYPTED FILE-----
- recipient: age1qzutny0mqpcccqw6myyfntu6wcskruu9ghzvt6r4te7afkqwnguq05ex37
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBBVDZtU2g4dmFXTlNIMFBs
OFBpS2RXRzFwTVdJazQrSldwWUFtdCs0U1ZFCmxRdy9yY3VIWU4zenc4eVNEVUZv
VUlyT29JekNTS3RIMktmS2RGNU5GMTgKLS0tIEhvM2RkcUs0SE5uSXFxc3dvSXhP
WmViM05IMHFPckNic1hHY2ZlTEMrYkkK+66rYqbGQucqQch4Tx9jONR9OIXdjMUd
q/fGLCoSluHuCOkUWr/wUgvF5dWAHftYj9JjDB/9vpp4Q0WClLDszw==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2024-10-19T12:24:38Z"
mac: ENC[AES256_GCM,data:g15gV0H0rlzoeN5Z/Zkgh/8ya9GSrWDVP9oqdVz3m4obmquCLDIygsPaYpRXmfOtPSgvX2KzZ08sNLfcBZSh7eH2Ws7xcezWOntOcmAQNz5LvemqP7YuwtivMK/P4qrkME+LQPkSrSUR+rT99Zj+RQXisy91Cq9NbVBj6uQH7+I=,iv:W+oDp5Dun0g35BFprOmgfI0LoPME3HpPuuniCKA32Kc=,tag:CUU74HZuRNedyI3txn9D+g==,type:str]
unencrypted_suffix: _unencrypted
version: 3.8.1

View file

@ -9,22 +9,26 @@ example_booleans:
- ENC[AES256_GCM,data:Ul7fKA==,iv:U51FhTsWwkbhUWGsO8D+bl2mLdTIfapIB+OGJEOAiRA=,tag:9NJLKp8s2TSKLyXwM8OncA==,type:bool]
- ENC[AES256_GCM,data:LVU1a90=,iv:1X1qV+8iIe1i5hIrqyB3tJew9hsHjJHlATmkEmwRA0Y=,tag:ko/5OwmJH/6HKPsvbkoRpw==,type:bool]
sops:
kms: []
gcp_kms: []
azure_kv: []
hc_vault: []
age:
- recipient: age1fva6s64s884z0q2w7de024sp69ucvqu0pg9shrhhqsn3ewlpjfpsh6md7y
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSA3ekx1bzluY0ZhYmhnRmhW
b3pzM2RlKzFrREpMK3RNU1MweldNRXJ5NjE4CmNRbnFvbk1EN0V0ZWJiVzFmL3Jt
N1Vpb3NEdXFzdzU4MjN1elp1RWZ5THcKLS0tIDR4cTFJNVFveEdxaEYvZndKbURa
UHpaNENhL3c1K3RXc05hUmdNZVBpT2MKwBj4+Gb7giVJIoPWiwY3tvugEAexXy6Q
YTWgZQZk96r5aF2mBjRCFCc7prj85PsUN/UXOPjPLVAFG3lwS0Eaog==
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB4KzMrV2dpWFQyQUQyV050
elVhN0dUeTRodG1kNHZ0VEVmTUI1QjhidFJnClhJU0tVY0tmMkFaMDZkMDJOKzV1
NVJiSERtR0VZR3VBOGVJbGk3cUxTMzAKLS0tIGhvMmIyOWQwVlhXRzYwampTeG5V
UDVWQnE4NDY5cFF3RnpxcjhMY2N0VUUK+B24C0CT5b82DJSdKotX4iPhzWxnYsn6
kS7Ut9uy5OwcB+p6erlbLMEUVmmSNw89KBrowT0Ui1d3AfyGAN4rqQ==
-----END AGE ENCRYPTED FILE-----
- recipient: age1qzutny0mqpcccqw6myyfntu6wcskruu9ghzvt6r4te7afkqwnguq05ex37
enc: |
-----BEGIN AGE ENCRYPTED FILE-----
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAwTjh4NDRYZGM1VHRZWGor
MmhFWDNvMjI4UUVPbnorNnpabGNZY1BuMVdrCisvZ0U5SXRPM3IzNlZvZEpWZktz
b2FJemtNVHU0WUI4M0U1L2tWR3g1MEUKLS0tIGczTmVubzcwVjg5NDdQdEllWEFw
TWRIRE5WSGRCbncvWlpEMmdWOW5kb00Kq79O2C4aYmZmrq+rbyMtwmEqkqL9epn/
pw2dxXmYt95qu3x/BxjoN8RFZhabFp9xHkZ1kqJe9FGmBtAmoWXjWA==
-----END AGE ENCRYPTED FILE-----
lastmodified: "2023-09-10T20:20:18Z"
mac: ENC[AES256_GCM,data:yfmYEo8pdlG3tu4Fabwde57igIvpt4UuhQqStVlV36rvPnv9dc42+6iduu+heuQ2OAVw0jk6/o6SWJpcms2DReOAMGDOgt+zV3TgJym52YdMcjTNJTo+4loULhvaWyN9ZdPJjSYKEoSgOZi+oMx4BpwreQEaPaYUxcbTqrWCUa8=,iv:Mb81sBxibRxSaC2kgakhy2pyEmW0MDobF+lHF7cny5E=,tag:DCqTWSnf5Gv5YfAGSEC2yw==,type:str]
pgp: []
unencrypted_suffix: _unencrypted
version: 3.7.3

View file

@ -8,7 +8,7 @@ let
cursor = {
package = pkgs.phinger-cursors;
name = "phinger-cursors";
name = "phinger-cursors-light";
size = 24;
};
in {
@ -33,19 +33,65 @@ in {
];
initialPassword = "ChangeMe";
shell = pkgs.zsh;
packages = (with pkgs; [
#bitwarden-desktop
brave # Internet browser
chafa # Terminal image viewer
cmdtime # Zsh plugin
duf # Df alternative
feishin # Jellyfin music client
foot
fzf
gh # GitHub CLI tool
glow # Terminal Markdown renderer
icosystem # Personal icon theme
#jellyfin-media-player
libreoffice-fresh # Office tools
librewolf # Internet browser
#logseq # Note taking
mpv # Media player
nextcloud-client
nsxiv # Lightweight image viewer
qalculate-gtk # Calculator
spotify
spotify-adblock
unzip
vifm # File manager
zathura # PDF viewer
zellij # Tmux + screen alternative
zotero
zsh
zsh-autosuggestions
zsh-syntax-highlighting
# SMB
cifs-utils
psmisc
# Linters and LSPs
statix # Nix
# TODO Move to devshells
# ruff pylint # Python
]) ++ (with pkgs-unstable; [
]);
};
fonts.packages = with pkgs; [
corefonts # Calibri for Uni
font-awesome # Dependency of Vifm & zsh config
letter # Personal font
noto-fonts-cjk # Dependency of Zellij config
noto-fonts # Dependency of Zellij config
vistafonts # Microsoft fonts
corefonts # Calibri for Uni
dejavu_fonts
font-awesome # Dependency of Vifm & zsh config
letter # Personal font
noto-fonts # Dependency of Zellij config
noto-fonts-cjk-sans # Dependency of Zellij config
noto-fonts-cjk-serif # Dependency of Zellij config
noto-fonts-color-emoji # Emoji's!
vista-fonts # Microsoft fonts
];
sisyphus = {
programs.spotify-adblock.enable = true;
services.remEYEnder.enable = true;
};
home-manager.users.tdpeuter = lib.mkIf config.sisyphus.programs.home-manager.enable {
@ -56,46 +102,13 @@ in {
homeDirectory = "/home/${user}";
inherit (config.system) stateVersion;
packages = (with pkgs; [
cmdtime # Zsh plugin
icosystem # Personal icon theme
spotify-adblock
]) ++ (with pkgs-unstable; [
brave
chafa # Terminal image viewer
duf # Df alternative
foot
fzf
glow # Terminal Markdown renderer
jellyfin-media-player
kitty
libreoffice-fresh
logseq
mpv
nextcloud-client
nsxiv # Lightweight image viewer
qalculate-gtk # Calculator
spotify
unzip
vifm # File manager
zathura # PDF viewer
zellij # Tmux + screen alternative
zsh
zsh-autosuggestions
zsh-syntax-highlighting
# SMB
cifs-utils psmisc
# Linters and LSPs
statix # Nix
ruff pylint # Python
]);
# packages = (with pkgs; [
# ]) ++ (with pkgs-unstable; [
# ]);
pointerCursor = {
inherit (cursor) package name size;
gtk.enable = true;
x11.enable = true;
};
};
@ -126,11 +139,6 @@ in {
};
};
gtk = {
enable = true;
cursorTheme = cursor;
};
xdg = {
desktopEntries.spotify = {
name = "Spotify";

View file

@ -17,7 +17,7 @@ in {
source = ../../../stow/alacritty/.config/alacritty;
};
".config/dunst" = {
inherit (config.sisyphus.desktop.sway) enable;
enable = config.sisyphus.desktop.hyprland.enable || config.sisyphus.desktop.sway.enable;
source = ../../../stow/dunst/.config/dunst;
};
".config/foot" = {
@ -32,6 +32,21 @@ in {
recursive = true;
source = ../../../stow/git/.config/git;
};
".config/hypr" = {
inherit (config.sisyphus.desktop.hyprland) enable;
recursive = true;
source = ../../../stow/hyprland/.config/hypr;
};
".config/hypr/hy3-plugin.lua" = {
inherit (config.sisyphus.desktop.hyprland) enable;
text = ''
hl.on("hyprland.start", function()
if not (hl.plugin and hl.plugin.hy3) then
hl.exec_cmd('hyprctl plugin load ${pkgs.hyprlandPlugins.hy3}/lib/libhy3.so')
end
end)
'';
};
".config/kitty" = {
enable = false;
recursive = true;
@ -58,7 +73,7 @@ in {
source = ../../../stow/swayidle/.config/swayidle;
};
".config/swaylock" = {
inherit (config.sisyphus.desktop.sway) enable;
enable = config.sisyphus.desktop.sway.enable || config.sisyphus.desktop.hyprland.enable;
source = ../../../stow/swaylock/.config/swaylock;
};
".config/vifm" = {
@ -66,20 +81,20 @@ in {
source = ../../../stow/vifm/.config/vifm;
};
".config/waybar" = {
inherit (config.sisyphus.desktop.sway) enable;
enable = config.sisyphus.desktop.sway.enable || config.sisyphus.desktop.hyprland.enable;
source = ../../../stow/waybar/.config/waybar;
};
".config/zellij" = {
source = ../../../stow/zellij/.config/zellij;
};
".oh-my-zsh" = {
enable = config.users.users.tdpeuter.shell == pkgs.zsh;
source = "${pkgs.oh-my-zsh}/share/oh-my-zsh";
".gnupg" = {
inherit (config.programs.gnupg.agent) enable;
source = ../../../stow/gnupg/.gnupg;
recursive = true;
};
".oh-my-zsh/themes/tdpeuter.zsh-theme" = {
enable = config.users.users.tdpeuter.shell == pkgs.zsh;
source = ../../../stow/zsh/.oh-my-zsh/themes/tdpeuter.zsh-theme;
onChange = ''
chmod 700 /home/tdpeuter/.gnupg
# chmod 600 /home/tdpeuter/.gnupg/* # Already read-only?
'';
};
".ssh/config" = lib.mkIf config.sisyphus.programs.ssh.enable {
inherit (config.sisyphus.programs.ssh) enable;
@ -97,6 +112,13 @@ in {
};
}
(lib.mkIf (config.users.users.tdpeuter.shell == pkgs.zsh) {
".oh-my-zsh" = {
source = "${pkgs.oh-my-zsh}/share/oh-my-zsh";
recursive = true;
};
".oh-my-zsh/themes/tdpeuter.zsh-theme" = {
source = ../../../stow/zsh/.oh-my-zsh/themes/tdpeuter.zsh-theme;
};
".zshrc" = {
source = ../../../stow/zsh/.zshrc;
};

View file

@ -14,11 +14,38 @@ in {
nativeMessagingHosts = with pkgs; [
tridactyl-native
];
# https://mozilla.github.io/policy-templates/
extraPolicies = {
DisableFirefoxStudies = true;
DisablePocket = true;
DisableTelemetry = true;
FirefoxHome = {
SponsoredTopSites = false;
SponsoredPocket = false;
};
OfferToSaveLogins = false;
# https://discourse.nixos.org/t/declare-firefox-extensions-and-settings/36265
ExtensionSettings = {
"amazon@search.mozilla.org".installation_mode = "blocked";
"google@search.mozilla.org".installation_mode = "blocked";
};
# Anything in about:config
Preferences = let
falseLocked = {
Value = false;
Status = "falseLocked";
};
in {
"browser.newtabpage.activity-stream.showSponsoredCheckboxes" = falseLocked;
"browser.newtabpage.activity-stream.showSponsoredTopSites" = falseLocked;
"browser.newtabpage.pinned" = {
Value = "[]";
Status = "default";
};
"services.sync.prefs.sync-seen.browser.newtabpage.activity-stream.showSponsoredTopSites" = falseLocked;
};
};
# Support smart cards
@ -27,26 +54,20 @@ in {
];
};
configPath = "/home/tdpeuter/.config/mozilla/firefox";
languagePacks = [
"en-GB"
"nl"
];
profiles.tdpeuter.search= {
default = "DuckDuckGo";
default = "ddg"; # Reference by id instead of by name
force = true;
engines = {
"Bing".metaData.hidden = true;
"eBay".metaData.hidden = true;
"Qwant".metaData.hidden = true;
"bing".metaData.hidden = true;
"ebay".metaData.hidden = true;
"Nix Packages" = {
urls = [{
template = "https://search.nixos.org/packages";
params = [
{ name = "type"; value = "packages"; }
{ name = "query"; value = "{searchTerms}"; }
];
}];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@np" ];
};
"GitHub" = {
urls = [{
template = "https://github.com/search";
@ -59,6 +80,51 @@ in {
icon = "${pkgs.icosystem}/share/icons/icosystem/scalable/apps/github-mark.svg";
definedAliases = [ "@gh" ];
};
"Nix Packages" = {
urls = [{
template = "https://search.nixos.org/packages";
params = [
{ name = "type"; value = "packages"; }
{ name = "query"; value = "{searchTerms}"; }
];
}];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@np" ];
};
"NixOS Options" = {
urls = [{
template = "https://search.nixos.org/options";
params = [
{ name = "query"; value = "{searchTerms}"; }
];
}];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@no" ];
};
"NixOS Wiki" = {
urls = [{
template = "https://wiki.nixos.org/w/index.php";
params = [
{ name = "title"; value = "Special:Search"; }
{ name = "search"; value = "{searchTerms}"; }
];
}];
icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg";
definedAliases = [ "@nw" ];
};
"Google Scholar" = {
urls = [{
template = "https://scholar.google.ch/scholar";
params = [
{ name = "q"; value = "{searchTerms}"; }
];
}];
definedAliases = [ "@gs" ];
};
};
};
};

View file

@ -8,13 +8,17 @@ let
Met vriendelijke groeten
Tibo De Peuter
'';
UGent = ''
english = ''
Kind regards
Tibo De Peuter
'';
academic = ''
Met vriendelijke groeten
Tibo De Peuter
Student 2Ba/3Ba Informatica
Student Ma Informatica
'';
MrFortem = ''
alias = ''
Kind regards
MrFortem Fiducia
'';
@ -22,96 +26,132 @@ let
in {
config = lib.mkIf cfg.enable {
home-manager.users.tdpeuter = lib.mkIf config.sisyphus.programs.home-manager.enable {
accounts.email.accounts = {
Telenet = {
address = "tibo.depeuter@telenet.be";
userName = "tibo.depeuter@telenet.be";
imap = {
host = "imap.telenet.be";
port = 993;
tls.enable = true;
};
smtp = {
host = "smtp.telenet.be";
port = 587;
tls = {
accounts = {
email.accounts = {
Telenet = {
address = "tibo.depeuter@telenet.be";
userName = "tibo.depeuter@telenet.be";
imap = {
host = "imap.telenet.be";
port = 993;
tls.enable = true;
};
smtp = {
host = "smtp.telenet.be";
port = 587;
tls = {
enable = true;
useStartTls = true;
};
};
realName = config.users.users.tdpeuter.description;
signature = {
showSignature = "append";
text = signatures.default;
};
primary = true;
thunderbird = {
enable = true;
useStartTls = true;
settings = id: {
"mail.identity.id_${id}.htmlSigText" = signatures.default;
};
};
};
UGent = {
flavor = "outlook.office365.com";
address = "tibo.depeuter@ugent.be";
realName = config.users.users.tdpeuter.description;
signature = {
showSignature = "append";
text = signatures.default;
realName = config.users.users.tdpeuter.description;
signature = {
showSignature = "append";
text = signatures.academic;
};
thunderbird = {
enable = true;
settings = id: {
"mail.server.server_${id}.authMethod" = 10;
"mail.smtpserver.smtp_${id}.authMethod" = 10;
"mail.identity.id_${id}.htmlSigText" = signatures.academic;
# Allow PGP
"mail.identity.id_${id}.openpgp_key_id" = "9B11F5243089DB5B"; # Your 'master' key
"mail.identity.id_${id}.attachPgpKey" = true;
};
};
};
Gmail = {
flavor = "gmail.com";
address = "tibo.depeuter@gmail.com";
primary = true;
thunderbird = {
enable = true;
settings = id: {
"mail.identity.id_${id}.htmlSigText" = signatures.default;
realName = config.users.users.tdpeuter.description;
signature = {
showSignature = "append";
text = signatures.default;
};
thunderbird = {
enable = true;
settings = id: {
"mail.identity.id_${id}.htmlSigText" = signatures.default;
};
};
};
MrFortem = {
flavor = "gmail.com";
address = "fortemfiducia@gmail.com";
realName = "Fortem Fiducia";
signature = {
showSignature = "append";
text = signatures.MrFortem;
};
thunderbird = {
enable = true;
settings = id: {
"mail.server.server_${id}.directory" = ".thunderbird/tdpeuter/ImapMail/imap.gmail.com-mrfortem";
"mail.server.server_${id}.directory-rel" = "[ProfD]ImapMail/imap.gmail.com-mrfortem";
"mail.identity.id_${id}.htmlSigText" = signatures.alias;
};
};
};
};
UGent = {
flavor = "outlook.office365.com";
address = "tibo.depeuter@ugent.be";
realName = config.users.users.tdpeuter.description;
signature = {
showSignature = "append";
text = signatures.UGent;
};
thunderbird = {
enable = true;
settings = id: {
"mail.server.server_${id}.authMethod" = 10;
"mail.smtpserver.smtp_${id}.authMethod" = 10;
"mail.identity.id_${id}.htmlSigText" = signatures.UGent;
# Allow PGP
"mail.identity.id_${id}.openpgp_key_id" = "9B11F5243089DB5B"; # Your 'master' key
"mail.identity.id_${id}.attachPgpKey" = true;
calendar.accounts = let
makeNextcloudCalendar = calendarName: color: {
remote = {
type = "caldav";
url = "https://cloud.depeuter.dev/remote.php/dav/calendars/tdpeuter/${calendarName}";
userName = "tdpeuter";
};
thunderbird = {
enable = true;
inherit color;
};
};
};
Gmail = {
flavor = "gmail.com";
address = "tibo.depeuter@gmail.com";
realName = config.users.users.tdpeuter.description;
signature = {
showSignature = "append";
text = signatures.default;
};
thunderbird = {
enable = true;
settings = id: {
"mail.identity.id_${id}.htmlSigText" = signatures.default;
};
};
};
MrFortem = {
flavor = "gmail.com";
address = "fortemfiducia@gmail.com";
realName = "Fortem Fiducia";
signature = {
showSignature = "append";
text = signatures.MrFortem;
};
thunderbird = {
enable = true;
settings = id: {
"mail.server.server_${id}.directory" = ".thunderbird/tdpeuter/ImapMail/imap.gmail.com-mrfortem";
"mail.server.server_${id}.directory-rel" = "[ProfD]ImapMail/imap.gmail.com-mrfortem";
"mail.identity.id_${id}.htmlSigText" = signatures.MrFortem;
in {
Personal = makeNextcloudCalendar "personal" "#2ec27e";
UGent = {
remote = {
type = "caldav";
url = "https://cloud.depeuter.dev/remote.php/dav/calendars/tdpeuter/ugent/";
userName = "tdpeuter";
};
thunderbird = {
enable = true;
color = "#1e64c8";
settings = id: {
# Link to UGent mail
"calendar.registry.${id}.imip.identity.key" = "id_${builtins.hashString "sha256" "ugent"}";
};
};
};
Tasks = makeNextcloudCalendar "tasks-2" "#813d9c";
Work = makeNextcloudCalendar "vts" "#ff0000";
Planning = makeNextcloudCalendar "planning" "#102457";
Joetz = makeNextcloudCalendar "joetz" "#ea1c0f";
};
};
@ -120,7 +160,24 @@ in {
enable = true;
profiles.tdpeuter = {
isDefault = true;
accountsOrder = [
"Telenet"
"UGent"
"Gmail"
"MrFortem"
];
calendarAccountsOrder = [
"Personal"
"UGent"
"Tasks"
"Work"
"Planning"
"Joetz"
];
settings = {
"mail.shell.checkDefaultClient" = false;
"mail.threadpane.listview" = 0;
# View
"mailnews.default_sort_order" = 2; # Sort descending
"mailnews.mark_message_read.delay" = true;

View file

@ -7,9 +7,14 @@ in {
config = lib.mkIf cfg.enable {
sops.secrets = lib.mkIf config.sisyphus.programs.sops.enable (
let
Hugo = {
HomeLab = {
format = "yaml";
sopsFile = ../../secrets/Hugo.yaml;
sopsFile = ../../secrets/HomeLab.yaml;
owner = user;
};
personal = {
format = "yaml";
sopsFile = ../../secrets/personal.yaml;
owner = user;
};
UGent = {
@ -18,17 +23,26 @@ in {
owner = user;
};
in {
"Hugo/ssh" = Hugo;
"UGent/HPC/ssh" = UGent;
"GitHub/ssh" = {
format = "yaml";
sopsFile = ../../secrets/GitHub.yaml;
owner = user;
};
"Hugo/Gitea/ssh" = Hugo;
# Git authentication
"Gitea/ssh" = personal;
"GitHub/ssh" = personal;
"UGent/GitHub/ssh" = UGent;
"UGent/SubGit/ssh" = UGent;
# HomeLab
# Physical hosts
"HomeLab/Hugo/ssh" = HomeLab;
"HomeLab/Roxanne/ghost/ssh" = HomeLab;
"HomeLab/HTPC/ssh" = HomeLab;
# Virtual hosts
"HomeLab/Gitea/ssh" = HomeLab;
"HomeLab/Nextcloud/ssh" = HomeLab;
"HomeLab/Vaultwarden/ssh" = HomeLab;
"HomeLab/NixOS/admin/ssh" = HomeLab;
});
};
}

21
scripts/battery.sh Normal file
View file

@ -0,0 +1,21 @@
#!/usr/bin/env bash
capacity="$(cat /sys/class/power_supply/BAT0/capacity)"
status="$(cat /sys/class/power_supply/BAT0/status)"
if [ "${status}" = "Charging" ]; then
icon="\ue55b"
elif [ "${capacity}" -ge 90 ]; then
icon="\uf240"
elif [ "${capacity}" -ge 75 ]; then
icon="\uf241"
elif [ "${capacity}" -ge 50 ]; then
icon="\uf242"
elif [ "${capacity}" -ge 25 ]; then
icon="\uf243"
else
icon="\uf244"
fi
printf '{"text": "%s%% %s", "tooltip": "Status: %s", "class": "%s"}\n' \
"${capacity}" "${icon}" "${status}" "${status}"

View file

@ -1,19 +0,0 @@
#!/usr/bin/env bash
# Script to toggle Do not disturb mode for dunst
# Get current state
if [ "$( command -v dunstctl )" ]; then
current_state="$( dunstctl is-paused )"
fi
# Toggle
if [ "${current_state}" == "false" ] ; then
notify-send 'Hiding notifications'
sleep 5
# makoctl set-mode do-not-disturb
dunstctl set-paused true
else
# makoctl set-mode default
dunstctl set-paused false
notify-send 'Showing notifications'
fi

View file

@ -22,15 +22,15 @@ while getopts ":bvt:p:" options; do
;;
v)
# Get volume (don't use pamixer because that is way slower)
value=$( amixer sget 'Master' \
| grep -o '\[[0-9]*%\]' \
| tr -d '][%' \
| head -n1 )
float=$( wpctl get-volume @DEFAULT_SINK@ \
| grep -Eo '[01].[0-9]{2}' )
# Converting to base 10 to drop leading zeroes
value="$(( 10#"$( tr -d '.' <<< "${float}" )" ))"
title="Volume: ${value}%"
category='sysinfo'
# If audio disabled, set value to zero.
if [ "$( amixer sget 'Master' | grep -o '\[\(on\|off\)\]' | head -n1 )" == "[off]" ] ; then
if [ ! -z "$( wpctl get-volume @DEFAULT_SINK@ | grep '[MUTED]' )" ] ; then
title="Volume: ${value}% (Disabled)"
value=0
fi

36
scripts/remEYEnder.sh Normal file
View file

@ -0,0 +1,36 @@
DURATION=20 # How long it takes to progress the bar fully
STEPS=100 # In how many steps to progress (> 0)
# Trick to fake decimals
EXP=3
interval_ms="$(( "${DURATION}" * ( 10 ** "${EXP}" ) / "${STEPS}" ))"
padded_interval_ms="$(printf "%0${EXP}d" "${interval_ms}")"
interval_s="${padded_interval_ms:0:-${EXP}}.${padded_interval_ms:-${EXP}}"
end_time="$(( "$( date '+%s' )" + "${DURATION}" ))"
# notify-send args
replace_id="${end_time}"
counter=0
while [[ "${end_time}" -gt "$( date '+%s' )" ]]; do
# Remap to [0, 100]
remaining_part="$(( ("${STEPS}" - "${counter}") * 100 / "${STEPS}" ))"
notify-send \
'Look away from your screen :)' 'RemEYEnder' \
--hint="int:value:${remaining_part}" \
--category='sysinfo' \
--replace-id="${replace_id}"
counter="$(( "${counter}" + 1 ))"
sleep "${interval_s}"
done
notify-send \
'Look away from your screen :)' 'RemEYEnder' \
--hint="int:value:${remaining_part}" \
--category='sysinfo' \
--replace-id="${replace_id}" \
--expire-time="${interval_ms}"

178
scripts/screenshot.sh Executable file
View file

@ -0,0 +1,178 @@
#!/usr/bin/env bash
# Take screenshots of areas, windows, or screens, interactively or immediately.
# Usage: screenshot [-t area|window|screen|all] [-a copy|save] [-i]
set -u
TARGET='area'
ACTION='copy'
INTERACTIVE='false'
DATE_STR="$( date '+%F-%H-%M-%S' )"
SAVE_DIR="${HOME}/Nextcloud/Afbeeldingen/Screenshots"
panic () {
>&2 echo 'Usage: screenshot [-t area|window|screen|all] [-a copy|save] [-i]'
exit 1
}
# Get options
while getopts ':t:a:i' option; do
case "${option}" in
t)
if [[ "${OPTARG}" =~ ^(area|window|screen|all)$ ]]; then
TARGET="${OPTARG}"
else
>&2 printf "Error: Invalid target '%s'.\n" "${OPTARG}"
panic
fi
;;
a)
if [[ "${OPTARG}" =~ ^(copy|save)$ ]]; then
ACTION="${OPTARG}"
else
>&2 printf "Error: Invalid action '%s'.\n" "${OPTARG}"
fi
;;
i)
INTERACTIVE='true'
;;
*)
panic
;;
esac
done
if [[ "${ACTION}" == 'save' ]]; then
SAVE_PATH="${SAVE_DIR}/${DATE_STR}.png"
else
SAVE_PATH="/tmp/screenshot_${DATE_STR}.png"
fi
mkdir -p "${SAVE_DIR}"
if [[ -n "${HYPRLAND_INSTANCE_SIGNATURE:-}" ]] && command -v hyprctl >/dev/null 2>&1 ; then
WM='hyprland'
else
>&2 echo 'Error: Unsupported or undetected Window Manager.'
exit 1
fi
for tool in grim slurp wl-copy jq; do
if ! command -v "${tool}" >/dev/null 2>&1; then
>&2 echo "Error: Required dependency '${tool}' is missing."
exit 1
fi
done
# Helper functions
target_area () {
slurp || true
}
hyprland_target_window () {
hyprctl activewindow -j \
| jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"'
}
hyprland_target_window_interactive () {
local ws_id
ws_id="$( hyprctl activeworkspace -j | jq -r '.id' )"
hyprctl clients -j \
| jq -r --arg ws "${ws_id}" '.[] | select(.workspace.id == ($ws | tonumber)) | "\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' \
| slurp -d \
|| true
}
hyprland_target_screen () {
local ws_id
ws_id="$(hyprctl activeworkspace -j | jq -r '.id')"
hyprctl monitors -j \
| jq -r --arg ws "${ws_id}" '.[] | select(.activeWorkspace.id == ($ws | tonumber)) | .name'
}
hyprland_target_screen_interactive () {
hyprctl monitors -j \
| jq -r '.[] | "\(.x),\(.y) \(.width)x\(.height)"' \
| slurp -d \
|| true
}
# Capturing the screenshot
GEOMETRY=''
OUTPUT=''
fetch_target_data () {
if [[ "${TARGET}" == 'area' ]]; then
GEOMETRY="$( target_area )"
return 0
fi
local route_key="${WM}_${TARGET}_${INTERACTIVE}"
case "${route_key}" in
'hyprland_window_false')
GEOMETRY="$( hyprland_target_window )"
;;
'hyprland_window_true')
GEOMETRY="$( hyprland_target_window_interactive )"
;;
'hyprland_screen_false')
OUTPUT="$( hyprland_target_screen )"
;;
'hyprland_screen_true')
GEOMETRY="$( hyprland_target_screen_interactive )"
;;
*)
>&2 echo 'Error: Unmapped execution route.'
exit 1
;;
esac
}
if [[ "${TARGET}" != 'all' ]]; then
fetch_target_data
fi
# Detect cancellation, Escape pressed during slurp results in empty string.
if [[ "${INTERACTIVE}" == 'true' || "${TARGET}" == 'area' ]]; then
if [[ -z "${GEOMETRY}" && -z "${OUTPUT}" ]]; then
exit 0
fi
fi
# Take the screenshot
if [[ -n "${GEOMETRY}" ]]; then
grim -g "${GEOMETRY}" "${SAVE_PATH}"
elif [[ -n "${OUTPUT}" ]]; then
grim -o "${OUTPUT}" "${SAVE_PATH}"
else
grim "${SAVE_PATH}"
fi
# Route to clipboard
if [[ "${ACTION}" == 'copy' ]]; then
wl-copy < "${SAVE_PATH}"
fi
# Notifications
if [[ "${TARGET}" != 'area' || "${INTERACTIVE}" == 'true' ]]; then
NOTIF_ICON="${SAVE_PATH}"
if command -v magick >/dev/null 2>&1; then
THUMB_PATH="/tmp/thumb_${DATE_STR}.png"
if magick "${SAVE_PATH}" -thumbnail '320x320^' -gravity center -extent 320x320 "${THUMB_PATH}" >/dev/null 2>&1; then
NOTIF_ICON="${THUMB_PATH}"
fi
fi
if [[ "${ACTION}" == 'copy' ]]; then
notify-send -a 'Grim' -i "${NOTIF_ICON}" 'Screenshot Captured' 'Copied to clipboard'
else
notify-send -a 'Grim' -i "${NOTIF_ICON}" 'Screenshot Captured' "Saved to ${SAVE_PATH}"
fi
fi

View file

@ -1,15 +0,0 @@
#!/usr/bin/env bash
# Script to disable for an hour or immediately continue wlsunset. 'Toggle'
# Check if wlsunset is still running
pid=$(pgrep wlsunset)
if [[ -z ${pid} ]] ; then
# Start wlsunset right away.
wlsunset -l 50.50 -L 4.00 -t 3000 -T 6500 &
else
# Currently stop wlsunset but restart in an hour.
kill ${pid}
notify-send 'Stopping sunset' 'Restarting in an hour'
at now +1 hours -f "${0}"
fi

View file

@ -6,8 +6,8 @@
### Variables ###
#################
THEME_LIGHT='tdpeuter-light'
THEME_DARK='tdpeuter-dark'
THEME_LIGHT='light'
THEME_DARK='dark'
THEME_DEFAULT="${THEME_LIGHT}"
STATE_DIR="${HOME}/.local/state/sisyphus"
@ -18,6 +18,10 @@ declare -A theme_next
theme_next[${THEME_LIGHT}]="${THEME_DARK}"
theme_next[${THEME_DARK}]="${THEME_LIGHT}"
declare -A personal_theme
personal_theme[${THEME_LIGHT}]='tdpeuter-light'
personal_theme[${THEME_DARK}]='tdpeuter-dark'
declare -A gsettings_alt
gsettings_alt[${THEME_LIGHT}]='default'
gsettings_alt[${THEME_DARK}]='prefer-dark'
@ -38,24 +42,24 @@ wallpaper[${THEME_DARK}]="bg-dark"
while getopts ":m:g" option; do
case "${option}" in
m)
if [ "${OPTARG}" == 'light' ]; then
if [ "${OPTARG}" == "${THEME_LIGHT}" ]; then
theme="${THEME_LIGHT}"
elif [ "${OPTARG}" == 'dark' ]; then
elif [ "${OPTARG}" == "${THEME_DARK}" ]; then
theme="${THEME_DARK}"
else
>&2 printf "Error: Invalid mode: '%s'.\nShould be either 'light' or 'dark'\n" "${option}"
exit 1
>&2 printf "Error: Invalid mode: '%s'.\nShould be either 'light' or 'dark', falling back to default: '%s'\n" "${option}" "${THEME_DEFAULT}"
theme="${THEME_DEFAULT}"
fi
;;
g)
previous_theme="$(cat ${STATE_FILE})"
if [ "${previous_theme}" == "${THEME_LIGHT}" ]; then
class="activated"
percentage=1
else
percentage=0
current_state="$(cat "${STATE_FILE}")"
next_state="${theme_next[${current_state}]}"
if [ "${current_state}" == "${THEME_DARK}" ]; then
class='activated'
percentage=100
fi
printf '{ "class": "%s", "percentage": %d }' "${class}" "${percentage}"
printf '{"alt": "%s", "tooltip": "Set theme to %s", "percentage": %d, "class": "%s"}' \
"${gsettings_alt[${current_state}]}" "${next_state}" "${percentage:=0}" "${class:="none"}"
exit 0
;;
*)
@ -100,8 +104,8 @@ function update_terminal_colors() {
# Foot
if [ "$(command -v foot)" ] ; then
# Make color theme switch 'permanent'.
echo "include=~/.config/foot/themes/${theme}.ini" > ~/.config/foot/theme.ini &
# We will have to change the terminal colors ourselves.
echo "initial-color-theme=${theme}" > ~/.config/foot/theme.ini &
# We still have to change the terminal colors ourselves for existing sessions.
update_terminal_colors &
fi
@ -113,28 +117,35 @@ fi
# Kitty
if [ "$(command -v kitty)" ]; then
kitten themes --reload-in all --config-file-name theme.conf "${theme}" &
kitten themes --reload-in all --config-file-name theme.conf "${personal_theme[${theme}]}" &
fi
# Sway
if [ "$(command -v swaybg)" ]; then
bg_path="${BG_DIR}/${wallpaper[${theme}]}"
/run/current-system/sw/bin/cp "${bg_path}" "${STATE_DIR}/bg" && swaymsg reload &
/run/current-system/sw/bin/cp "${bg_path}" "${STATE_DIR}/bg"
if [ "$(command -v swaymsg)" ]; then
pkill swaybg && swaymsg exec "swaybg -m fill -i ${STATE_DIR}/bg" &
elif [ "$(command -v hyprctl)" ]; then
pkill swaybg && hyprctl keyword exec "swaybg -m fill -i ${STATE_DIR}/bg" &
fi
fi
# Vifm
if [ "$(command -v vifm)" ]; then
echo "colorscheme ${theme} Default-256 Default" > ~/.config/vifm/theme.conf
vifm_theme="${personal_theme[${theme}]}"
echo "colorscheme ${vifm_theme} Default-256 Default" > ~/.config/vifm/theme.conf
# Update all running instances
vifm --remote -c "colorscheme ${theme}" &
vifm --remote -c "colorscheme ${vifm_theme}" &
fi
# Vim
if [ "$(command -v vim)" ]; then
echo "colorscheme ${theme}" > ~/.vim/theme.conf
vim_theme="${personal_theme[${theme}]}"
echo "colorscheme ${vim_theme}" > ~/.vim/theme.conf
# Update all running instances
for server in $(vim --serverlist); do
vim --servername "${server}" --remote-send "<C-\><C-N>:colorscheme ${theme}<CR>"
vim --servername "${server}" --remote-send "<C-\><C-N>:colorscheme ${vim_theme}<CR>"
done
fi

52
scripts/toggle-nightlight.sh Executable file
View file

@ -0,0 +1,52 @@
#!/usr/bin/env bash
# Script to disable for an hour or immediately continue wlsunset. 'Toggle'
# Queue for at, check man page for options
ATQUEUE='T'
# Get current state
pid=$(pgrep wlsunset)
while getopts ":g" option; do
case "${option}" in
g)
if [[ -z "${pid}" ]]; then
state='active'
tooltip='Turn off nightlight'
class='activated'
else
state='inactive'
tooltip='Turn on nightlight'
class='none'
fi
printf '{"alt": "%s", "tooltip": "%s", "class": "%s" }' \
"${state}" "${tooltip}" "${class}"
exit 0
;;
*)
echo 'Invalid option'
exit 1
;;
esac
done
# Toggle
if [[ -z ${pid} ]] ; then
# Clear queue
for job in $(at -l -q "${ATQUEUE}" | cut -f1); do
at -r "${job}"
done
if [ "$( command -v wlsunset )" ]; then
notify-send 'Starting nightlight'
wlsunset -l 50.50 -L 4.00 -t 3000 -T 6500 &
else
notify-send 'Nightlight is not available'
exit 1
fi
else
# Currently stop wlsunset but restart in an hour.
kill ${pid}
notify-send 'Stopping nightlight' 'Restarting in an hour'
at now +1 hours -f "${0}" -q "${ATQUEUE}"
fi

48
scripts/toggle-notifications.sh Executable file
View file

@ -0,0 +1,48 @@
#!/usr/bin/env bash
# Script to toggle Do not disturb mode for dunst
# Get current state
if [ "$( command -v dunstctl )" ]; then
current_state="$( dunstctl is-paused )"
fi
while getopts ":g" option; do
case "${option}" in
g)
if [ "${current_state}" == "false" ]; then
state='normal'
tooltip='Hide notifications'
class='none'
else
state='paused'
tooltip='Show notifications'
class='activated'
fi
printf '{"alt": "%s", "tooltip": "%s", "class": "%s" }' \
"${state}" "${tooltip}" "${class}"
exit 0
;;
esac
done
# Toggle
if [ "${current_state}" == "false" ] ; then
notify-send 'Hiding notifications'
sleep 5
if [ "$(command -v makoctl)" ]; then
makoctl set-mode do-not-disturb
fi
if [ "$(command -v dunstctl)" ]; then
dunstctl set-paused true
fi
else
if [ "$(command -v makoctl)" ]; then
makoctl set-mode default
fi
if [ "$(command -v dunstctl)" ]; then
dunstctl set-paused false
fi
notify-send 'Showing notifications'
fi

50
scripts/toggle-tailscale.sh Executable file
View file

@ -0,0 +1,50 @@
#!/usr/bin/env bash
# Script to toggle Do not disturb mode for dunst
STOPPED_MSG='Tailscale is stopped'
# Check if tailscale is installed
if [ ! "$( command -v tailscale )" ]; then
echo 'Tailscale is not installed!'
exit 1
fi
# Get current state
status="$( tailscale status )"
current_state="$( grep -o "${STOPPED_MSG}" <<< "${status}" )"
while getopts ":g" option; do
case "${option}" in
g)
if [ "${current_state}" == "${STOPPED_MSG}" ]; then
state='disconnected'
tooltip='Connect tailnet'
printf '{"alt": "%s", "tooltip": "%s", "class": "%s" }' \
"${state}" "${tooltip}" "${state}"
else
state='connected'
tooltip="${status:='Disconnect tailnet'}"
printf '{"alt": "%s", "tooltip": "<tt>%q</tt>", "class": "%s" }' \
"${state}" "${tooltip}" "${state}"
fi
exit 0
;;
*)
echo 'Invalid option'
exit 1
;;
esac
done
# Toggle
if [ "${current_state}" == "${STOPPED_MSG}" ] ; then
notify-send 'Connecting tailnet'
notify-send 'Connected tailnet' "$( tailscale up )"
else
notify-send 'Disconnecting tailnet'
notify-send 'Disconnected tailnet' "$( tailscale down )"
fi

View file

@ -1,7 +1,11 @@
# -*- conf -*-
# ~/.config/foot/foot.ini
# Include the correct color scheme
# Color scheme definitions
include=~/.config/foot/themes/tdpeuter-light.ini
include=~/.config/foot/themes/tdpeuter-dark.ini
# Default color scheme selection
include=~/.config/foot/theme.ini
# shell=$SHELL (if set, otherwise user's default shell from /etc/passwd)
@ -23,17 +27,20 @@ font=letter extended:size=10
# vertical-letter-offset=0
# underline-offset=<font metrics>
# underline-thickness=<font underline thickness>
# strikout-thickness=<font strikeout thickness>
# box-drawings-uses-font-glyphs=no
dpi-aware=yes
# gamma-correct-blending=no
# initial-color-theme=dark
# initial-window-size-pixels=700x500 # Or,
# initial-window-size-chars=<COLSxROWS>
# initial-window-mode=windowed
pad=10x10 # optionally append 'center'
# pad=10x10 # optionally append 'center'
# resize-by-cells=yes
# resize-keep-grid=yes
# resize-delay-ms=100
# notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body}
# bold-text-in-bright=no
# word-delimiters=,│`|:"'()[]{}<>
# selection-target=primary
@ -41,16 +48,28 @@ pad=10x10 # optionally append 'center'
# utmp-helper=/usr/lib/utempter/utempter # When utmp backend is ‘libutempter’ (Linux)
# utmp-helper=/usr/libexec/ulog-helper # When utmp backend is ‘ulog’ (FreeBSD)
# uppercase-regex-insert=yes
[environment]
# name=value
[security]
# osc52=enabled # disabled|copy-enabled|paste-enabled|enabled
[bell]
# system=yes
urgent=yes
notify=yes
visual=yes
# command=
# command-focused=no
[desktop-notifications]
# command=notify-send --wait --app-name ${app-id} --icon ${app-id} --category ${category} --urgency ${urgency} --expire-time ${expire-time} --hint STRING:image-path:${icon} --hint BOOLEAN:suppress-sound:${muted} --hint STRING:sound-name:${sound-name} --replace-id ${replace-id} ${action-argument} --print-id -- ${title} ${body}
# command-action-argument=--action ${action-name}=${action-label}
# close=""
# inhibit-when-focused=yes
[scrollback]
# lines=1000
# multiplier=3.0
@ -60,14 +79,26 @@ visual=yes
[url]
# launch=xdg-open ${url}
# label-letters=sadfjklewcmpgh
# style=dotted (none|single|double|curly|doted|dashed)
# osc8-underline=url-mode
# protocols=http, https, ftp, ftps, file, gemini, gopher
# uri-characters=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.,~:;/?#@!$&%*+="'()[]
# regex=(((https?://|mailto:|ftp://|file:|ssh:|ssh://|git://|tel:|magnet:|ipfs://|ipns://|gemini://|gopher://|news:)|www\.)([0-9a-zA-Z:/?#@!$&*+,;=.~_%^\-]+|\([]\["0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\-]*\)|\[[\(\)"0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\-]*\]|"[]\[\(\)0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\-]*"|'[]\[\(\)0-9a-zA-Z:/?#@!$&*+,;=.~_%^\-]*')+([0-9a-zA-Z/#@$&*+=~_%^\-]|\([]\["0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\-]*\)|\[[\(\)"0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\-]*\]|"[]\[\(\)0-9a-zA-Z:/?#@!$&'*+,;=.~_%^\-]*"|'[]\[\(\)0-9a-zA-Z:/?#@!$&*+,;=.~_%^\-]*'))
# You can define your own regex's, by adding a section called
# 'regex:<ID>' with a 'regex' and 'launch' key. These can then be tied
# to a key-binding. See foot.ini(5) for details
# [regex:your-fancy-name]
# regex=<a POSIX-Extended Regular Expression>
# launch=<path to script or application> ${match}
#
# [key-bindings]
# regex-launch=[your-fancy-name] Control+Shift+q
# regex-copy=[your-fancy-name] Control+Alt+Shift+q
[cursor]
# style=block
# color=<inverse foreground/background>
# blink=no
# blink-rate=500
# beam-thickness=1.5
# underline-thickness=<font underline thickness>
@ -78,54 +109,10 @@ visual=yes
[touch]
# long-press-delay=400
[colors]
alpha=0.8
# background=242424
# foreground=ffffff
flash=b00020
# flash-alpha=0.5
## Normal/regular colors (color palette 0-7)
# regular0=242424 # black
# regular1=f62b5a # red
# regular2=47b413 # green
# regular3=e3c401 # yellow
# regular4=24acd4 # blue
# regular5=f2affd # magenta
# regular6=13c299 # cyan
# regular7=e6e6e6 # white
## Bright colors (color palette 8-15)
# bright0=616161 # bright black
# bright1=ff4d51 # bright red
# bright2=35d450 # bright green
# bright3=e9e836 # bright yellow
# bright4=5dc5f8 # bright blue
# bright5=feabf2 # bright magenta
# bright6=24dfc4 # bright cyan
# bright7=ffffff # bright white
## dimmed colors (see foot.ini(5) man page)
# dim0=<not set>
# ...
# dim7=<not-set>
## The remaining 256-color palette
# 16 = <256-color palette #16>
# ...
# 255 = <256-color palette #255>
## Misc colors
# selection-foreground=<inverse foreground/background>
# selection-background=<inverse foreground/background>
# jump-labels=<regular0> <regular3> # black-on-yellow
# scrollback-indicator=<regular0> <bright4> # black-on-bright-blue
# search-box-no-match=<regular0> <regular1> # black-on-red
# search-box-match=<regular0> <regular3> # black-on-yellow
# urls=<regular3>
# colors set by themes
[csd]
preferred=none
# preferred=server
# size=26
# font=<primary font>
# color=<foreground color>
@ -140,10 +127,10 @@ preferred=none
# button-close-color=<regular1>
[key-bindings]
# scrollback-up-page=Shift+Page_Up
# scrollback-up-page=Shift+Page_Up Shift+KP_Page_Up
# scrollback-up-half-page=none
# scrollback-up-line=none
# scrollback-down-page=Shift+Page_Down
# scrollback-down-page=Shift+Page_Down Shift+KP_Page_Down
# scrollback-down-half-page=none
# scrollback-down-line=none
# scrollback-home=none
@ -162,17 +149,22 @@ preferred=none
# pipe-visible=[sh -c "xurls | fuzzel | xargs -r firefox"] none
# pipe-scrollback=[sh -c "xurls | fuzzel | xargs -r firefox"] none
# pipe-selected=[xargs -r firefox] none
# pipe-command-output=[wl-copy] none # Copy last command's output to the clipboard
# show-urls-launch=Control+Shift+o
# show-urls-copy=none
# show-urls-persistent=none
# prompt-prev=Control+Shift+z
# prompt-next=Control+Shift+x
# unicode-input=Control+Shift+u
# color-theme-switch-1=none
# color-theme-switch-2=none
# color-theme-toggle=none
# noop=none
# quit=none
[search-bindings]
# cancel=Control+g Control+c Escape
# commit=Return
# commit=Return KP_Enter
# find-prev=Control+r
# find-next=Control+s
# cursor-left=Left Control+b
@ -185,6 +177,8 @@ preferred=none
# delete-prev-word=Mod1+BackSpace Control+BackSpace
# delete-next=Delete
# delete-next-word=Mod1+d Control+Delete
# delete-to-start=Control+u
# delete-to-end=Control+k
# extend-char=Shift+Right
# extend-to-word-boundary=Control+w Control+Shift+Right
# extend-to-next-whitespace=Control+Shift+w
@ -196,10 +190,10 @@ preferred=none
# clipboard-paste=Control+v Control+Shift+v Control+y XF86Paste
# primary-paste=Shift+Insert
# unicode-input=none
# scrollback-up-page=Shift+Page_Up
# scrollback-up-page=Shift+Page_Up Shift+KP_Page_Up
# scrollback-up-half-page=none
# scrollback-up-line=none
# scrollback-down-page=Shift+Page_Down
# scrollback-down-page=Shift+Page_Down Shift+KP_Page_Down
# scrollback-down-half-page=none
# scrollback-down-line=none
# scrollback-home=none
@ -213,8 +207,10 @@ preferred=none
# \x03=Mod4+c # Map Super+c -> Ctrl+c
[mouse-bindings]
# scrollback-up-mouse=BTN_BACK
# scrollback-down-mouse=BTN_FORWARD
# scrollback-up-mouse=BTN_WHEEL_BACK
# scrollback-down-mouse=BTN_WHEEL_FORWARD
# font-increase=Control+BTN_WHEEL_BACK
# font-decrease=Control+BTN_WHEEL_FORWARD
# selection-override-modifiers=Shift
# primary-paste=BTN_MIDDLE
# select-begin=BTN_LEFT

View file

@ -1,8 +1,8 @@
[colors]
# alpha=0.8
[colors-dark]
alpha=0.8
background=171717
foreground=dcdfe4
# flash=b00020
flash=b00020
# flash-alpha=0.5
## Normal/regular colors (color palette 0-7)

View file

@ -1,8 +1,8 @@
[colors]
# alpha=0.8
[colors-light]
alpha=0.8
background=fafafa
foreground=000000
# flash=b00020
flash=b00020
# flash-alpha=0.5
## Normal/regular colors (color palette 0-7)

View file

@ -1,7 +1,7 @@
[user]
name = "Tibo De Peuter"
email = "tibo@depeuter.dev"
signingkey = "0x9B11F5243089DB5B"
signingkey = "~/.ssh/id_ed25519_sk_rk.pub"
[color]
ui = true
@ -14,6 +14,9 @@
editor = "vim";
excludesFile = "~/.config/git/ignore"
[gpg]
format = "ssh"
[help]
autocorrect = 15
@ -23,6 +26,10 @@
[init]
defaultBranch = "main"
[rebase]
autoSquash = "true"
[safe]
directory = "/home/tdpeuter/university/sshfs"
directory = "/home/tdpeuter/Nextcloud/Documenten/Persoonlijk/Notebooks/01-Projects/*"

View file

@ -0,0 +1,5 @@
enable-ssh-support
default-cache-ttl 60
default-cache-ttl-ssh 60
max-cache-ttl 120
max-cache-ttl-ssh 120

View file

@ -0,0 +1,37 @@
# Use UTF-8 character encoding everywhere.
display-charset utf-8
utf8-strings
# When verifying a signature made from a subkey, require that the
# cross-certification "back signature" on the subkey is present and valid.
require-cross-certification
# Method references
personal-cipher-preferences AES256 AES192 AES
personal-digest-preferences SHA512 SHA384 SHA256
personal-compress-preferences ZLIB BZIP2 ZIP Uncompressed
# New keys config
default-preference-list SHA512 SHA384 SHA256 AES256 AES192 AES ZLIB BZIP2 ZIP Uncompressed
cert-digest-algo SHA512
# Symmatric ops
s2k-digest-algo SHA512
s2k-cipher-algo AES256
# Disable cahcing of passphrase for symmatrical ops
no-symkey-cache
# Don't leak comments or software version information
no-comments
no-emit-version
# Display full fingerprints
keyid-format 0xlong
with-fingerprint
# Other display preferences
list-options show-uid-validity
verify-options show-uid-validity
# Enable smart card
use-agent

View file

@ -0,0 +1,7 @@
# Power down and ask PIN again after timout.
card-timeout 180 # 3 minutes
# Fix repeatedly prompting for an already-inserted YubiKey.
# It works by disabling CCID-support, so it does not clash with pcsc.
disable-ccid

View file

@ -0,0 +1,72 @@
-- Decorations and animations
hl.config({
decoration = {
rounding = 0,
--rounding_power = 4.0,
active_opacity = 1.0,
inactive_opacity = 1.0,
fullscreen_opacity = 1.0,
dim_modal = false,
dim_inactive = false,
--dim_strength = 0.5,
--dim_special = 0.2,
--dim_around = 0.4,
--screen_shader = [[Empty]],
--border_part_of_window = true,
blur = {
enabled = true,
size = 8,
passes = 1,
ignore_opacity = true,
new_optimizations = true,
xray = true,
noise = 0.01,
contrast = 0.8,
brightness = 0.8,
vibrancy = 0.0,
vibrancy_darkness = 0.0,
special = false,
popups = false,
--popups_ignorealpha = 0.2,
input_methods = false,
--input_methods_ignorealpha = 0.2,
},
shadow = {
enabled = false,
--range = 4,
--render_power = 3,
--sharp = false,
--color = "#ee1a1a1a",
--color_inactive = unset,
--offset = {0, 0},
--scale = 1.0,
},
glow = {
enabled = false,
--range = 10,
--render_power = 3,
--color = "#ee1a1a1a",
--color_inactive = unset,
},
motion_blur = {
--enabled = false,
--samples = 7,
},
},
animations = {
enabled = false,
--workspace_wraparound = false,
},
})

View file

@ -0,0 +1,6 @@
monitor=desc:BOE 0x08CF,1920x1080@60.0,640x3240,1.0
monitor=desc:Hewlett Packard HP ZR2740w CNT319Y008,2560x1440@59.95,0x1800,1.0
monitor=desc:Dell Inc. DELL P2214H 29C2937M4YTL,1920x1080@60.0,2560x1800,1.0
monitor=desc:Dell Inc. DELL P2214H 29C2937M4YTL,transform,1
monitor=desc:Samsung Electric Company SAMSUNG,1920x1080@60.0,640x0,0.6000000000000001
monitor=desc:Samsung Electric Company SAMSUNG,disable

View file

@ -0,0 +1,5 @@
hl.on("hyprland.start", function()
if not (hl.plugin and hl.plugin.hy3) then
hl.exec_cmd('hyprctl plugin load /nix/store/78mllvcwa0nbqiczjpd8zqsywhy5dllm-hy3-0.55.0/lib/libhy3.so')
end
end)

View file

@ -0,0 +1,226 @@
-- i3/sway tiling layout plugin
-- https://github.com/outfoxxed/hy3
local v = require("variables")
local function configure_hy3()
hl.config({
general = {
layout = "hy3",
},
plugin = {
hy3 = {
-- policy controlling what happens when a node is removed from a group,
-- leaving only a group
-- 0 = remove the nested group
-- 1 = keep the nested group
-- 2 = keep the nested group only if its parent is a tab group
--node_collapse_policy = 2,
-- offset from group split direction when only one window is in a group
--group_inset = 10,
-- if a tab group will automatically be created for the first window spawned in a workspace
tab_first_window = false,
-- tab group settings
tabs = {
-- height of the tab bar
height = 10,
-- padding between the tab bar and its focused node
padding = 0,
-- the tab bar should animate in/out from the top instead of below the window
--from_top = false,
-- radius of tab bar corners
radius = 0,
-- tab bar border width
--border_width = 2,
-- render the window title on the bar
render_text = false,
-- center the window title
--text_center : true,
-- font to render the window title with
--text_font = Sans,
-- height of the window title
--text_height = 8,
-- left padding of the window title
--text_padding = 3,
colors = {
-- active tab bar segment colors
--active = "rgba(33ccff40)",
--active_border = "rgba(33ccffee)",
--active_text = "rgba(ffffffff)",
-- active tab bar segment colors for bars on an unfocused monitor
--active_alt_monitor = "rgba(60606040)",
--active_alt_monitor_border = "rgba(808080ee)",
--active_alt_monitor_text = "rgba(ffffffff)",
-- focused tab bar segment colors (focused node in unfocused container)
--focused = "rgba(60606040)",
--focused_border = "rgba(808080ee)",
--focused_text = "rgba(ffffffff)",
-- inactive tab bar segment colors
inactive = "rgba(a6a6a620)", -- default: "rgba(30303020)"
inactive_border = "rgba(a6a6a620)", -- default: "rgba(606060aa)"
--inactive_text = "rgba(ffffffff)",
-- urgent tab bar segment colors
--urgent = "rgba(ff223340)",
--urgent_border = "rgba(ff2233ee)",
--urgent_text = "rgba(ffffffff)",
-- locked tab bar segment colors
--locked = "rgba(90903340)",
--locked_border = "rgba(909033ee)",
--locked_text = "rgba(ffffffff)",
},
-- if tab backgrounds should be blurred
-- Blur is only visible when the above colors are not opaque.
--blur = true,
-- opacity multiplier for tabs
-- Applies to blur as well as the given colors.
--opacity = 1.0,
},
-- autotiling settings
autotile = {
-- enable autotile
enable = false,
-- make autotile-created groups ephemeral
--ephemeral_groups = true,
-- if a window would be squished smaller than this width, a vertical split will be created
-- -1 = never automatically split vertically
-- 0 = always automatically split vertically
-- <number> = pixel width to split at
--trigger_width = 0,
-- if a window would be squished smaller than this height, a horizontal split will be created
-- -1 = never automatically split horizontally
-- 0 = always automatically split horizontally
-- <number> = pixel height to split at
--trigger_height = 0,
-- a space or comma separated list of workspace ids where autotile should be enabled
-- it's possible to create an exception rule by prefixing the definition with "not:"
--workspaces = "1,2", -- autotiling will only be enabled on workspaces 1 and 2
--workspaces = "not:1,2", -- autotiling will be enabled on all workspaces except 1 and 2
--workspaces = "all", -- default
},
},
},
})
end
local function unbind_defaults()
-- Navigation
-- Focus
for _, direction in ipairs({ "Up", "Right", "Down", "Left", v.up, v.right, v.down, v.left }) do
-- Focus
pcall(hl.unbind, "SUPER + " .. direction)
-- Move windows
pcall(hl.unbind, "SUPER + SHIFT + " .. direction)
end
-- Layouts
-- Workspaces
for i = 1, #v.ws.ids do
-- Move window to a specific workspace
pcall(hl.unbind, "SUPER + SHIFT + " .. v.ws.keys[i])
end
end
local function bind_hy3(hy3)
-- Navigation
-- Focus
hl.bind("SUPER + Up", hy3.move_focus("up"))
hl.bind("SUPER + Right", hy3.move_focus("right"))
hl.bind("SUPER + Down", hy3.move_focus("down"))
hl.bind("SUPER + Left", hy3.move_focus("left"))
hl.bind("SUPER + " .. v.up, hy3.move_focus("up"))
hl.bind("SUPER + " .. v.right, hy3.move_focus("right"))
hl.bind("SUPER + " .. v.down, hy3.move_focus("down"))
hl.bind("SUPER + " .. v.left, hy3.move_focus("left"))
-- Move windows
hl.bind("SUPER + SHIFT + Up", hy3.move_window("up"))
hl.bind("SUPER + SHIFT + Right", hy3.move_window("right"))
hl.bind("SUPER + SHIFT + Down", hy3.move_window("down"))
hl.bind("SUPER + SHIFT + Left", hy3.move_window("left"))
hl.bind("SUPER + SHIFT + " .. v.up, hy3.move_window("up"))
hl.bind("SUPER + SHIFT + " .. v.right, hy3.move_window("right"))
hl.bind("SUPER + SHIFT + " .. v.down, hy3.move_window("down"))
hl.bind("SUPER + SHIFT + " .. v.left, hy3.move_window("left"))
-- Layout
hl.bind("SUPER + Z", hy3.equalize(), { long_press = true })
hl.bind("SUPER + Z", hy3.change_group("opposite"))
hl.bind("SUPER + X", hy3.change_group("tab"))
hl.bind("SUPER + C", hy3.change_group("h"))
hl.bind("SUPER + V", hy3.change_group("v"))
hl.bind("SUPER + P", hy3.change_focus("raise"))
hl.bind("SUPER + SHIFT + P", hy3.change_focus("lower"))
hl.bind("SUPER + Space", hy3.toggle_focus_layer())
-- Workspaces
for i = 1, #v.ws.ids do
hl.bind("SUPER + SHIFT + " .. v.ws.keys[i], hy3.move_to_workspace(v.ws.ids[i], { follow = true }))
end
-- Shortcuts
hl.bind("SUPER + CONTROL + Q", hy3.kill_active())
end
local attempt = 0
local max_attempts = 5000
local check_hy3_status
check_hy3_status = hl.timer(function ()
attempt = attempt + 1
if hl.plugin and hl.plugin.hy3 then
local success, err = pcall(function()
unbind_defaults()
configure_hy3()
bind_hy3(hl.plugin.hy3)
end)
if success then
check_hy3_status:set_enabled(false)
end
end
if attempt >= max_attempts then
hl.notification.create({ text = "[hy3] Plugin failed to load after " .. max_attempts .. " attempts", duration = 5000 })
check_hy3_status:set_enabled(false)
end
end, { timeout = 5000, type = "repeat" })
check_hy3_status:set_enabled(true)

View file

@ -0,0 +1,270 @@
-- ~/.config/hypr/hyprland.lua
-- Syntax/options last reviewed on 0.55.2
hl.config({
general = {
border_size = 1,
gaps_in = 3,
gaps_out = 5,
--float_gaps = -1,
gaps_workspaces = 0,
col = {
inactive_border = "#ff444444",
active_border = "#ffffffff",
nogroup_border = "#ffff00ff",
--nogroup_border_active = "",
},
layout = "dwindle",
no_focus_fallback = true,
resize_on_border = true,
extend_border_grab_area = 5,
hover_icon_on_border = true,
allow_tearing = false,
resize_corner = 0,
--modal_parent_blocking = true,
--locale = [[Empty]],
snap = {
enabled = false,
--window_gap = 10,
--monitor_gap = 10,
--border_overlap = false,
--respect_gaps = false,
},
},
group = {
auto_group = true,
insert_after_current = true,
focus_removed_window = true,
drag_into_group = 1,
merge_groups_on_drag = true,
merge_groups_on_groupbar = true,
merge_floated_into_tiled_on_groupbar = false,
group_on_movetoworkspace = false,
col = {
border_active = "#66ffff00",
border_inactive = "#66777700",
border_locked_active = "#66ff5500",
border_locked_inactive = "#66775500",
},
groupbar = {
enabled = true,
--font_family = misc.font_family,
--font_size = 8,
--font_weight_active = "normal",
--font_weight_inactive = "normal",
gradients = true,
--height = 14,
--indicator_gap = 0,
--indicator_height = 3,
--stacked = false,
--priority = 3,
render_titles = false,
--text_offset = 0,
--text_padding = 0,
scrolling = true,
--rounding = 1,
--rounding_power = 4.0, -- squircle
--gradient_rounding = 2,
--gradient_rounding_power = 4.0, -- squircle
--round_only_edges = true,
--gradient_round_only_edges = true,
text_color = "#ffffffff",
--text_color_inactive = unset,
--text_color_locked_active = unset,
--text_color_locked_inactive = unset,
col = {
active = "#66ffff00",
inactive = "#66777700",
locked_active = "#66ff5500",
locked_inactive = "#66775500",
},
--gaps_in = 2,
--gaps_out = 2,
--keep_upper_gap = true,
--middle_click_close = true,
--blur = false,
},
},
misc = {
disable_hyprland_logo = true,
disable_splash_rendering = true,
--disable_scale_notification = false,
col = {
splash = "#ffffffff",
},
font_family = "Letter",
--spash_font_family = [[Empty]],
--force_default_wallpaper = -1,
vrr = 1, -- on
mouse_move_enables_dpms = false,
key_press_enables_dpms = true,
--name_vk_after_proc = true,
--always_follow_on_dnd = true,
--layers_hog_keyboard_focus = true,
--animate_manual_resizes = false,
--animate_mouse_windowdragging = false,
disable_autoreload = true,
--enable_swallow = false,
--swallow_regex = [[Empty]],
--swallow_exception_regex = [[Empty]],
focus_on_activate = true,
mouse_move_focuses_monitor = true,
--allow_session_lock_restore = false,
--session_lock_xray = false,
background_color = "#018281",
--close_special_on_empty = true,
--on_focus_under_fullscreen = 2, -- unfullscreen/unmaximize
--exit_window_retains_fullscreen = false,
--initial_workspace_tracking = 1, -- single-shot
middle_click_paste = false,
render_unfocused_fps = 12,
--disable_xdg_env_checks = false,
--disable_hyprland_qutils_check = false,
--lockdead_screen_delay = 1000,
--enable_anr_dialog = true,
--anr_missed_pings = 5,
--size_limits_tiled = false,
--disable_watchdog_warning = false,
},
layout = {
--single_window_aspect_ratio = {0, 0},
--single_window_aspect_ratio_tolerance = 0.1,
},
binds = {
--pass_mouse_when_bound = false,
--scroll_event_delay = 300,
workspace_back_and_forth = false,
--hide_special_on_workspace_change = false,
--allow_workspace_cycles = false,
workspace_center_on = 1, -- last active window for that workspace
focus_preferred_method = 0,
--ignore_group_lock = false,
--movefocus_cycles_fullscreen = false,
--movefocus_cycles_groupfirst = false,
window_direction_monitor_fallback = true,
disable_keybind_grabbing = false,
--allow_pin_fullscreen = false,
drag_threshold = 10,
},
xwayland = {
enabled = true,
--use_nearest_neighbor = true,
--force_zero_scaling = false,
--create_abstract_socket = false,
},
opengl = {
nvidia_anti_flicker = false,
},
render = {
--direct_scanout = 0, -- off
--expand_undersized_textures, = true
--xp_mode = false,
--ctm_animation = 2, -- auto
--cm_enabled = true,
--send_content_type = true,
--cm_auto_hdr = 1, -- cm, hdr
--new_render_scheduling = false,
--non_shader_cm = 2, -- DS and passthrough only
--non_shader_cm_interop = 2, -- external ctm is disabled for fullscreen photo/video/game content types
--cm_sdr_eotf = "default",
--commit_timing_enabled = true,
--use_fp16 = 2, -- enabled in hdr mode
--keep_unmodified_copy = 2, -- auto
--use_shader_blur_blend = false,
},
cursor = {
--invisible = false,
sync_gsettings_theme = true,
--no_hardware_cursors = 2, -- auto
--no_break_fs_vvr = 2, -- auto
--min_refresh_rate = 24,
--hotspot_padding = 1,
inactive_timeout = 10,
no_warps = false,
persistent_warps = false,
warp_on_change_workspace = 1, -- enabled
warp_on_toggle_special = 1, -- enabled
--default_monitor = [[Empty]],
--zoom_factor = 1.0,
--zoom_rigid = false,
--zoom_detached_camera = true,
--enable_hyprcursor = true,
hide_on_key_press = true,
hide_on_touch = true,
hide_on_tablet = true,
--use_cpu_buffer = 2,
--warp_back_after_non_mouse_input = false,
--zoom_disable_aa = false,
},
ecosystem = {
--no_update_news = false,
--no_donation_nag = false,
--enforce_permission = false,
},
--quirks.prefer_hdr = 0, -- off
})
hl.on("hyprland.start", function()
hl.exec_cmd("gnome-keyring-daemon --start --components=secrets")
hl.exec_cmd("dunst --verbosity crit")
hl.exec_cmd("waycorner")
hl.exec_cmd("waybar")
-- TODO Replace with something else?
hl.exec_cmd("wlsunset -t 2500 -l 50.51 -L 4.21")
hl.exec_cmd("nextcloud --background")
-- Turn volume off at boot
hl.exec_cmd("for i in $(seq 1 10); do pactl set-sink-mute @DEFAULT_SINK@ 1 && break; sleep 1; done")
end)
-- STYLING
hl.on("hyprland.start", function()
hl.exec_cmd("swaybg -i \"${HOME}/.local/state/sisyphus/bg\" --mode=fill")
end)
hl.env("XCURSOR_SIZE", "24")
-- https://wiki.hypr.land/Configuring/Advanced-and-Cool/Environment-variables/#nvidia-specific
hl.env("GBM_BACKEND", "nivida-drm")
hl.env("__GLX_VENDOR_LIBRARY_NAME", "nvidia")
hl.env("LIBVA_DRIVER_NAME", "nvidia") -- Hardware acceleration on NVIDIA GPUs
require("decoration_animations")
require("input-output")
require("keybinds")
require("modes")
pcall(require, "hy3-plugin") -- Sway tiling plugin
require("hy3") -- hy3 config. Since hy3.lua uses timers, it should NOT be required in "hyprland.start"!

View file

@ -0,0 +1,122 @@
hl.config({
input = {
--kb_model = [[Empty]],
kb_layout = "us,be,us",
kb_variant = "altgr-intl,iso-alternate,dvorak",
--kb_options = [[Empty]],
--kb_rules = [[Empty]],
--kb_file = [[Empty]],
numlock_by_default = true,
resolve_binds_by_sym = false,
repeat_rate = 25,
repeat_delay = 600,
sensitivity = 0.0,
accel_profile = "flat",
force_no_accel = false,
--rotation = 0,
left_handed = false,
--scroll_points = [[Empty]],
scroll_method = "2fg",
scroll_button = 0, -- 0 means default
scroll_button_lock = true,
scroll_factor = 1.0,
natural_scroll = false,
follow_mouse = 2,
--follow_mouse_shrink = 0,
--follow_mouse_threshold = 0.0,
focus_on_close = 0,
mouse_refocus = true,
float_switch_override_focus = 1,
special_fallthrough = false,
off_window_axis_events = 1,
emulate_discrete_scroll = 1,
touchpad = {
disable_while_typing = true,
natural_scroll = true,
scroll_factor = 0.8,
middle_button_emulation = false,
tap_button_map = "lrm",
clickfinger_behavior = false,
tap_to_click = true,
drag_lock = 0, -- false
tap_and_drag = true,
--flip_x = false,
--flip_y = false,
--drag_3fg = 0,
},
touchdevice = {
--transform = -1,
--output = [[Auto]],
--enabled = true,
},
virtualkeyboard = {
--share_states = 2,
--release_pressed_on_close = false,
},
tablet = {
--transform = -1,
--output = [[Empty]],
--region_position = {0, 0},
--absolute_region_position = false,
--region_size = {0, 0},
--relative_input = false,
--left_handed = false,
--active_area_size = {0, 0},
--active_area_position = {0, 0},
},
tablettool = {
--eraser_button_mode = 0,
--eraser_button_override = 0,
--pressure_range_min = -1.0,
--pressure_range_max = 1.0,
},
},
gestures = {
workspace_swipe_distance = 300,
workspace_swipe_touch = false,
workspace_swipe_invert = true,
workspace_swipe_touch_invert = false,
workspace_swipe_min_speed_to_force = 30,
workspace_swipe_cancel_ratio = 0.2,
workspace_swipe_create_new = false,
workspace_swipe_direction_lock = true,
workspace_swipe_direction_lock_threshold = 10,
workspace_swipe_forever = true,
workspace_swipe_use_r = false,
--close_max_timeout = 1000,
},
})
-- Disable numlock by default on laptop keyboard
hl.device({ name = "at-translated-set-2-keyboard", numlock_by_default = false })
hl.monitor({ output = "", mode = "preferred", position = "auto", scale = 1 })
hl.monitor({ output = "desc:BOE 0x08CF", mode = "preferred", position = "640x1440", scale = 1 })
hl.monitor({ output = "desc:Hewlett Packard HP ZR2740w CNT319Y008", mode = "preferred", position = "auto-up", scale = 1 })
hl.monitor({ output = "desc:Dell Inc. DELL P2214H 29C2937M4YTL", mode = "preferred", position = "auto-right", scale = 1, transform = 1 })
hl.monitor({ output = "desc:Samsung Electric Company S22C650", mode = "preferred", position = "auto-right", scale = 1, transform = 1 })
hl.monitor({ output = "desc:Samsung Electric Company SAMSUNG", disabled = true })
hl.bind("switch:on:Lid Switch", function()
hl.notification.create({ text = "Lid closed — disabling eDP-1", timeout = 2500 })
hl.monitor({ output = "eDP-1", disabled = true })
end, { locked = true })
hl.bind("switch:off:Lid Switch", function()
hl.notification.create({ text = "Lid opened — enabling eDP-1", timeout = 2500 })
hl.monitor({ output = "eDP-1", disabled = false })
end, { locked = true })

View file

@ -0,0 +1,229 @@
local v = require("variables")
local notify = "${SCRIPT_DIR}/notify.sh"
-- Navigation
-- Focus
hl.bind("SUPER + " .. v.up, hl.dsp.focus({ direction = "u" }))
hl.bind("SUPER + " .. v.right, hl.dsp.focus({ direction = "r" }))
hl.bind("SUPER + " .. v.down, hl.dsp.focus({ direction = "d" }))
hl.bind("SUPER + " .. v.left, hl.dsp.focus({ direction = "l" }))
hl.bind("SUPER + Up", hl.dsp.focus({ direction = "u" }))
hl.bind("SUPER + Right", hl.dsp.focus({ direction = "r" }))
hl.bind("SUPER + Down", hl.dsp.focus({ direction = "d" }))
hl.bind("SUPER + Left", hl.dsp.focus({ direction = "l" }))
-- Move windows
hl.bind("SUPER + SHIFT + " .. v.up, hl.dsp.window.move({ direction = "u" }))
hl.bind("SUPER + SHIFT + " .. v.right, hl.dsp.window.move({ direction = "r" }))
hl.bind("SUPER + SHIFT + " .. v.down, hl.dsp.window.move({ direction = "d" }))
hl.bind("SUPER + SHIFT + " .. v.left, hl.dsp.window.move({ direction = "l" }))
hl.bind("SUPER + SHIFT + Up", hl.dsp.window.move({ direction = "u" }))
hl.bind("SUPER + SHIFT + Right", hl.dsp.window.move({ direction = "r" }))
hl.bind("SUPER + SHIFT + Down", hl.dsp.window.move({ direction = "d" }))
hl.bind("SUPER + SHIFT + Left", hl.dsp.window.move({ direction = "l" }))
-- Minimizing
-- https://wiki.hypr.land/Configuring/Advanced-and-Cool/Uncommon-tips-and-tricks/#minimize-windows-using-special-workspaces
local scratchpad = "scratchpad"
hl.bind("SUPER + End", hl.dsp.window.move({ workspace = "special:" .. scratchpad, follow = false }))
hl.bind("SUPER + KP_End", hl.dsp.window.move({ workspace = "special:" .. scratchpad, follow = false }))
hl.bind("SUPER + SHIFT + End", hl.dsp.window.move({ workspace = "+0", follow = true }))
hl.bind("SUPER + SHIFT + KP_End", hl.dsp.window.move({ workspace = "+0", follow = true }))
hl.bind("SUPER + Home", hl.dsp.workspace.toggle_special(scratchpad))
hl.bind("SUPER + KP_Home", hl.dsp.workspace.toggle_special(scratchpad))
-- Layouts
hl.bind("SUPER + F", hl.dsp.window.float({ "toggle" }))
hl.bind("SUPER + SHIFT + F", hl.dsp.window.float({ "enable" }))
hl.bind("SUPER + S", function()
hl.dsp.window.pin({ "enable" })
hl.dsp.window.float({ "enable" })
end)
hl.bind("SUPER + SHIFT + S", function()
hl.dsp.window.pin({ "disable" })
hl.dsp.window.float({ "disable" })
end)
hl.bind("SUPER + F11", hl.dsp.window.fullscreen({ "maximized", "toggle" }))
hl.bind("SUPER + SHIFT + F11", hl.dsp.window.fullscreen({ "fullscreen", "toggle" }))
hl.bind("SUPER + " .. v.LMB, hl.dsp.window.float(), { mouse = true, click = true })
hl.bind("SUPER + " .. v.LMB, hl.dsp.window.drag(), { mouse = true, drag = true })
hl.bind("SUPER + " .. v.RMB, hl.dsp.window.resize(), { mouse = true, drag = true })
hl.gesture({ fingers = 4, direction = "swipe", action = "resize", mod = "SUPER" })
-- Switch between layouts
hl.bind("SUPER + b", function ()
local layouts = { "scrolling", "dwindle", "master", "monocle" }
local workspace = hl.get_active_workspace()
local next_layout = "dwindle"
if not workspace then
return
end
for i = 1, #layouts do
if layouts[i] == workspace.tiled_layout then
local next_layout_idx = (i % #layouts) + 1
next_layout = layouts[next_layout_idx]
break
end
end
hl.workspace_rule({
workspace = workspace.name,
layout = next_layout
})
end)
-- Workspaces
for i = 1, #v.ws.ids do
-- Focus a specific workspace
hl.bind("SUPER + " .. v.ws.keys[i], hl.dsp.focus({ workspace = v.ws.ids[i] }))
-- Move window to a specific workspace
hl.bind("SUPER + SHIFT + " .. v.ws.keys[i], hl.dsp.window.move({ workspace = v.ws.ids[i], switch = true }))
end
-- Go through workspaces in order
hl.bind("SUPER + CONTROL + " .. v.left, hl.dsp.focus({ workspace = "e-1" }))
hl.bind("SUPER + CONTROL + " .. v.right, hl.dsp.focus({ workspace = "e+1" }))
hl.bind("SUPER + CONTROL + Left", hl.dsp.focus({ workspace = "e-1" }))
hl.bind("SUPER + CONTROL + Right", hl.dsp.focus({ workspace = "e+1" }))
hl.bind("SUPER + CONTROL + SHIFT + " .. v.left, hl.dsp.window.move({ workspace = "e-1", switch = true }))
hl.bind("SUPER + CONTROL + SHIFT + " .. v.right, hl.dsp.window.move({ workspace = "e+1", switch = true }))
hl.bind("SUPER + CONTROL + SHIFT + Left", hl.dsp.window.move({ workspace = "e-1", switch = true }))
hl.bind("SUPER + CONTROL + SHIFT + Right", hl.dsp.window.move({ workspace = "e+1", switch = true }))
-- Move workspace to the next monitor
hl.bind("SUPER + CONTROL + SHIFT + " .. v.up, hl.dsp.workspace.move({ workspace="+0", monitor = "-1" }))
hl.bind("SUPER + CONTROL + SHIFT + " .. v.down, hl.dsp.workspace.move({ workspace="+0", monitor = "+1" }))
hl.bind("SUPER + CONTROL + SHIFT + Up", hl.dsp.workspace.move({ monitor = "-1" }))
hl.bind("SUPER + CONTROL + SHIFT + Down", hl.dsp.workspace.move({ monitor = "+1" }))
-- GNOME-like keybinds
hl.bind("SUPER + ALT + " .. v.left, hl.dsp.focus({ workspace = "e-1" }))
hl.bind("SUPER + ALT + " .. v.right, hl.dsp.focus({ workspace = "e+1" }))
hl.bind("SUPER + ALT + Left", hl.dsp.focus({ workspace = "e-1" }))
hl.bind("SUPER + ALT + Right", hl.dsp.focus({ workspace = "e+1" }))
hl.bind("SUPER + ALT + SHIFT + " .. v.left, hl.dsp.window.move({ workspace = "e-1", switch = true }))
hl.bind("SUPER + ALT + SHIFT + " .. v.right, hl.dsp.window.move({ workspace = "e+1", switch = true }))
hl.bind("SUPER + ALT + SHIFT + Left", hl.dsp.window.move({ workspace = "e-1", switch = true }))
hl.bind("SUPER + ALT + SHIFT + Right", hl.dsp.window.move({ workspace = "e+1", switch = true }))
hl.gesture({ fingers = 3, direction = "horizontal", action = "workspace" })
-- System
-- Brightness
hl.bind("XF86MonBrightnessDown", hl.dsp.exec_cmd("brightnessctl -e s 5%- && " .. notify .. " -b"),
{ locked = true, repeating = true, submap_universal = true })
hl.bind("XF86MonBrightnessUp", hl.dsp.exec_cmd("brightnessctl -e s +5% && " .. notify .. " -b"),
{ locked = true, repeating = true, submap_universal = true })
-- Audio
hl.bind("XF86AudioRaiseVolume", hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 2%+ && " .. notify .. " -v"),
{ locked = true, repeating = true, submap_universal = true })
hl.bind("XF86AudioLowerVolume", hl.dsp.exec_cmd("wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 2%- && " .. notify .. " -v"),
{ locked = true, repeating = true, submap_universal = true })
hl.bind("XF86AudioMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle && " .. notify .. " -v"),
{ locked = true, submap_universal = true })
hl.bind("XF86AudioMicMute", hl.dsp.exec_cmd("wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle && " .. notify .. " -v"),
{ submap_universal = true })
-- Media
hl.bind("XF86AudioPlay", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true, submap_universal = true })
hl.bind("XF86AudioPrev", hl.dsp.exec_cmd("playerctl previous"), { locked = true, submap_universal = true })
hl.bind("XF86AudioNext", hl.dsp.exec_cmd("playerctl next"), { locked = true, submap_universal = true })
hl.bind("SHIFT + XF86AudioMute", hl.dsp.exec_cmd("playerctl play-pause"), { locked = true, submap_universal = true })
hl.bind("SHIFT + XF86AudioLowerVolume", hl.dsp.exec_cmd("playerctl previous"), { locked = true, submap_universal = true })
hl.bind("SHIFT + XF86AudioRaiseVolume", hl.dsp.exec_cmd("playerctl next"), { locked = true, submap_universal = true })
-- Other special keys
hl.bind("XF86Calculator", hl.dsp.exec_cmd("qalculate-gtk"))
-- Shortcuts
-- Reload
hl.bind("ALT + SHIFT + R", hl.dsp.exec_cmd("hyprctl reload"))
-- TODO hl.bind("Ctrl + Alt + Shift + R", forcerendererreload)
hl.bind("ALT + SHIFT + E", hl.dsp.exit())
-- Kill a window
hl.bind("SUPER + Q", hl.dsp.window.close())
hl.bind("SUPER + SHIFT + Q", hl.dsp.window.kill())
-- Start a terminal
hl.bind("SUPER + Return", hl.dsp.exec_cmd(v.term))
hl.bind("CONTROL + ALT + T", hl.dsp.exec_cmd(v.term))
hl.bind("SUPER + SHIFT + Return", hl.dsp.exec_cmd(v.term .. " -e -- zellij a main"))
hl.bind("CONTROL + ALT + SHIFT + T", hl.dsp.exec_cmd(v.term .. " -e -- zellij a main"))
-- Application menu
hl.bind("ALT + Space", hl.dsp.exec_cmd(v.menu))
-- TODO hl.bind("Alt + Tab", focuscurrentorlast)
-- TODO hl.bind("SUPER + Tab", hl.dsp.exec_cmd(v.windowmenu))
hl.gesture({ fingers = 3, direction = "up", action = function () hl.exec_cmd("pkill " .. v.menu .. " || " .. v.menu) end })
hl.gesture({ fingers = 3, direction = "down", action = function () hl.exec_cmd("pkill " .. v.menu) end })
hl.bind("SUPER + E", hl.dsp.exec_cmd(v.term .. " -e vifm"))
hl.bind("CONTROL + SHIFT + Escape", hl.dsp.exec_cmd(v.term .. " -e zenith"))
hl.bind("SUPER + mouse_down", hl.dsp.focus({ workspace = "e-1" }))
hl.bind("SUPER + mouse_up", hl.dsp.focus({ workspace = "e+1" }))
hl.bind("SUPER + Delete", hl.dsp.exec_cmd(v.lock))
-- Glass magnifier zoom
local MAX_ZOOM = 3
local MIN_ZOOM = 1
local ZOOM_TOGGLE_FACTOR
--@param offset number
--@return nil
local function zoom(offset)
local current = hl.get_config("cursor.zoom_factor")
if offset ~= nil then
current = current + offset
elseif current ~= MIN_ZOOM then
current = MIN_ZOOM
else
current = ZOOM_TOGGLE_FACTOR
end
current = math.max(MIN_ZOOM, math.min(MAX_ZOOM, current))
hl.config({
cursor = {
zoom_factor = current
}
})
end
hl.bind("SUPER + SHIFT + Z", zoom)
hl.bind("SUPER + SHIFT + Z + KP_Add", function()
zoom(0.5)
end)
hl.bind("SUPER + SHIFT + Z + minus", function()
zoom(-0.5)
end)

View file

@ -0,0 +1,186 @@
local v = require("variables")
local mode_reset = "reset"
-- Resizing
local mode_resize = "Resize"
local mode_resize_toggle = "SUPER + R"
hl.bind(mode_resize_toggle, hl.dsp.submap(mode_resize))
hl.define_submap(mode_resize, function ()
hl.bind("F", hl.dsp.window.float({ action = "toggle" }))
local directions = { "Up", "Right", "Down", "Left", v.up, v.right, v.down, v.left }
local dx = { 0, 1, 0, -1, 0, 1, 0, -1 }
local dy = { -1, 0, 1, 0, -1, 0, 1, 0 }
for i, direction in ipairs(directions) do
-- Resize windows with arrow keys or vim keys
hl.bind(direction, hl.dsp.window.resize({ x = dx[i] * 10, y = dy[i] * 10 }), { repeating = true })
hl.bind("SHIFT + " .. direction, hl.dsp.window.resize({ x = dx[i] * 50, y = dy[i] * 50 }), { repeating = true })
hl.bind("CONTROL + " .. direction, hl.dsp.window.resize({ x = dx[i] * 10, y = dy[i] * 10, relative = true }), { repeating = true })
hl.bind("CONTROL + SHIFT + " .. direction, hl.dsp.window.resize({ x = dx[i] * 50, y = dy[i] * 50, relative = true }), { repeating = true })
-- Move windows with arrow keys or vim keys
hl.bind("SUPER + " .. direction, hl.dsp.window.move({ x = dx[i] * 10, y = dy[i] * 10 }), { repeating = true })
hl.bind("SUPER + SHIFT + " .. direction, hl.dsp.window.move({ x = dx[i] * 50, y = dy[i] * 50 }), { repeating = true })
end
hl.gesture({ fingers = 2, direction = "swipe", action = "move" })
hl.gesture({ fingers = 3, direction = "swipe", action = "resize" })
-- hl.bind(mode_resize_toggle, hl.dsp.submap(mode_reset))
hl.bind("Escape", hl.dsp.submap(mode_reset))
hl.bind("Return", hl.dsp.submap(mode_reset))
end)
-- System actions
local mode_system = "System (l)ock, (s)leep, (h)ibernate, (r)eboot, (Shift+s)hutdown"
local mode_system_toggle = "CONTROL + ALT + Delete"
hl.bind(mode_system_toggle, hl.dsp.submap(mode_system))
hl.define_submap(mode_system, function ()
hl.bind("L", function ()
hl.dispatch(hl.dsp.submap(mode_reset))
hl.dispatch(hl.dsp.exec_cmd(v.lock))
end)
hl.bind("S", function ()
hl.dispatch(hl.dsp.submap(mode_reset))
hl.dispatch(hl.dsp.exec_cmd(v.lock))
hl.dispatch(hl.dsp.exec_cmd("systemctl suspend"))
end)
hl.bind("H", function ()
hl.dispatch(hl.dsp.submap(mode_reset))
hl.dispatch(hl.dsp.exec_cmd(v.lock))
hl.dispatch(hl.dsp.exec_cmd("systemctl hibernate"))
end)
hl.bind("R", function ()
hl.dispatch(hl.dsp.submap(mode_reset))
hl.dispatch(hl.dsp.exec_cmd("systemctl reboot"))
end)
hl.bind("SHIFT + S", function ()
hl.dispatch(hl.dsp.submap(mode_reset))
hl.dispatch(hl.dsp.exec_cmd("systemctl poweroff -i"))
end)
-- hl.bind(mode_system_toggle, hl.dsp.submap(mode_reset))
hl.bind("Escape", hl.dsp.submap(mode_reset))
hl.bind("Return", hl.dsp.submap(mode_reset))
end)
-- Launcher
local mode_launcher = "Launch (f)irefox, (n)otes or (t)hunderbird"
local mode_launcher_toggle = "SUPER + O"
hl.bind(mode_launcher_toggle, hl.dsp.submap(mode_launcher))
hl.define_submap(mode_launcher, mode_reset, function ()
hl.bind("F", hl.dsp.exec_cmd("firefox"))
hl.bind("N", hl.dsp.exec_cmd("logseq"))
hl.bind("T", hl.dsp.exec_cmd("thunderbird"))
--hl.bind(mode_launcher_toggle, hl.dsp.submap(mode_reset))
hl.bind("Escape", hl.dsp.submap(mode_reset))
hl.bind("Return", hl.dsp.submap(mode_reset))
end)
-- Preferences
local mode_preferences = "Toggle (d)ark mode, (n)otifications, (s)unset/nightlight"
local mode_preferences_toggle = "ALT + End"
hl.bind(mode_preferences_toggle, hl.dsp.submap(mode_preferences))
hl.bind("ALT + KP_End", hl.dsp.submap(mode_preferences))
hl.define_submap(mode_preferences, mode_reset, function ()
hl.bind("D", hl.dsp.exec_cmd("${SCRIPT_DIR}/toggle-light-dark.sh"))
hl.bind("N", hl.dsp.exec_cmd("${SCRIPT_DIR}/toggle-notifications.sh"))
hl.bind("S", hl.dsp.exec_cmd("${SCRIPT_DIR}/toggle-nightlight.sh"))
hl.bind("Escape", hl.dsp.submap(mode_reset))
hl.bind("Return", hl.dsp.submap(mode_reset))
end)
-- Ignore (all) keybinds. Useful when working with Virtual Machines.
local mode_ignore = "Ignoring keybinds - Press Ctrl+Alt+Shift+Insert to escape."
local mode_ignore_toggle = "CONTROL + ALT + Insert"
hl.bind(mode_ignore_toggle, hl.dsp.submap(mode_ignore))
hl.define_submap(mode_ignore, function ()
hl.bind("CONTROL + ALT + SHIFT + Insert", hl.dsp.submap(mode_reset))
end)
-- Screenshots
local mode_screenshot = "Screenshot of (a)rea, current (w)indow, (s)creen - Shift to save"
local mode_screenshot_toggle = "Print"
local screenshot_format = "~/Nextcloud/Afbeeldingen/Screenshots/$(date +%F-%H-%M-%S).png"
hl.bind(mode_screenshot_toggle, hl.dsp.submap(mode_screenshot))
hl.define_submap(mode_screenshot, mode_reset, function ()
local function take_screenshot(target, action, interactive)
local date_str = os.date("%F-%H-%M-%S")
local save_dir = os.getenv("HOME") .. "/Nextcloud/Afbeeldingen/Screenshots/"
local save_path
if action == "save" then
save_path = save_dir .. "/" .. date_str .. ".png"
else
save_path = "/tmp/screenshot_" .. date_str .. ".png"
end
local cmd = ""
if target == "area" then
cmd = cmd .. string.format('grim -g "$( slurp )" "%s"', save_path)
elseif target == "window" then
local window_geometry
if interactive then
--window_geometry = [[$(workspace_id="$(hyprctl activeworkspace -j | jq '.id')"; hyprctl clients -j | jq -r --argjson ws "${workspace_id}" '.[] | select(.workspace.id == $ws) | "\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"' | slurp -d)]]
window_geometry = [[$(ws="$(hyprctl activeworkspace -j | jq '.id')"; hyprctl clients -j | jq -r --argjson ws "$ws" '.[] | select(.workspace.id == $ws) | (.at[0]|tostring) + "," + (.at[1]|tostring) + " " + (.size[0]|tostring) + "x" + (.size[1]|tostring)' | slurp -d)]]
else
-- window_geometry = [[$(hyprctl activewindow -j | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"')]]
window_geometry = [[$(hyprctl activewindow -j | jq -r '(.at[0]|tostring) + "," + (.at[1]|tostring) + " " + (.size[0]|tostring) + "x" + (.size[1]|tostring)')]]
end
cmd = cmd .. string.format('grim -g "%s" "%s"', window_geometry, save_path)
elseif target == "screen" then
local monitor_geometry
if interactive then
-- monitor_geometry = [[$(hyprctl monitors -j | jq -r '.[] | "\(.x),\(.y) \(.width)x\(.height)"' | slurp -d)]]
monitor_geometry = [[$(hyprctl monitors -j | jq -r '.[] | (.x|tostring) + "," + (.y|tostring) + " " + (.width|tostring) + "x" + (.height|tostring)' | slurp -d)]]
cmd = cmd .. string.format('grim -g "%s" "%s"', monitor_geometry, save_path)
else
-- monitor_geometry = [[$(workspace_id="$(hyprctl activeworkspace -j | jq '.id')"; hyprctl monitors -j | jq -r --argjson ws "${workspace_id}" '.[] | select(.activeWorkspace.id == $ws) | .name')]]
monitor_geometry = [[$(ws="$(hyprctl activeworkspace -j | jq '.id')"; hyprctl monitors -j | jq -r --argjson ws "$ws" '.[] | select(.activeWorkspace.id == $ws) | .name')]]
cmd = cmd .. string.format('grim -o "%s" "%s"', monitor_geometry, save_path)
end
elseif target == "all" then
cmd = cmd .. string.format('grim "%s"', save_path)
else
--hl.error("Invalid screenshot target: " .. target)
return
end
if action == "copy" then
cmd = cmd .. string.format(' && wl-copy < "%s"', save_path)
end
local destination = (action == "copy") and "Copied to clipboard" or ("Saved to " .. save_path)
cmd = cmd .. string.format(' && notify-send -a "Grim" -i "%s" "Screenshot Captured" "%s"', save_path, destination)
hl.exec_cmd("sh -c '" .. cmd .. "'")
end
hl.bind("A", function() take_screenshot("area", "copy", false) end)
hl.bind("W", function() take_screenshot("window", "copy", false) end)
hl.bind("S", function() take_screenshot("screen", "copy", false) end)
hl.bind("A", function() take_screenshot("area", "copy", true) end, { longpress = true })
hl.bind("SHIFT + A", function() take_screenshot("area", "save", false) end)
hl.bind("SHIFT + W", function() take_screenshot("window", "save", false) end)
hl.bind("SHIFT + S", function() take_screenshot("screen", "save", false) end)
hl.bind("SHIFT + A", function() take_screenshot("area", "save", true) end, { longpress = true })
hl.bind("CONTROL + W", function() take_screenshot("window", "copy", true) end)
hl.bind("CONTROL + S", function() take_screenshot("screen", "copy", true) end)
hl.bind("CONTROL + SHIFT + W", function() take_screenshot("window", "save", true) end)
hl.bind("CONTROL + SHIFT + S", function() take_screenshot("screen", "save", true) end)
hl.bind("Escape", hl.dsp.submap(mode_reset))
hl.bind("Return", hl.dsp.submap(mode_reset))
end)

View file

@ -0,0 +1,10 @@
# Generated by nwg-displays on 2025-01-27 at 13:58:39. Do not edit manually.
monitor=desc:BOE 0x08CF,1920x1080@60.0,0x0,1.0
monitor=desc:Hewlett Packard HP ZR2740w CNT319Y008,2560x1440@59.95,0x1800,1.0
monitor=desc:Hewlett Packard HP ZR2740w CNT319Y008,disable
monitor=desc:Dell Inc. DELL P2214H 29C2937M4YTL,1920x1080@60.0,2560x1800,1.0
monitor=desc:Dell Inc. DELL P2214H 29C2937M4YTL,transform,1
monitor=desc:Dell Inc. DELL P2214H 29C2937M4YTL,disable
monitor=desc:Samsung Electric Company SAMSUNG,0x0@60.0,-1x-1,1.0
monitor=desc:Samsung Electric Company SAMSUNG,disable

View file

@ -0,0 +1,9 @@
monitor=desc:BOE 0x08CF,1920x1080@60.0,0x0,1.0
monitor=desc:Hewlett Packard HP ZR2740w CNT319Y008,2560x1440@59.95,0x1800,1.0
monitor=desc:Hewlett Packard HP ZR2740w CNT319Y008,disable
monitor=desc:Dell Inc. DELL P2214H 29C2937M4YTL,1920x1080@60.0,2560x1800,1.0
monitor=desc:Dell Inc. DELL P2214H 29C2937M4YTL,transform,1
monitor=desc:Dell Inc. DELL P2214H 29C2937M4YTL,disable
monitor=desc:Samsung Electric Company SAMSUNG,0x0@60.0,-1x-1,1.0
monitor=desc:Samsung Electric Company SAMSUNG,disable

View file

@ -0,0 +1,26 @@
local M = {}
-- SHIFT CAPS CTRL/CONTROL ALT MOD2 MOD3 SUPER/WIN/LOGO/MOD4 MOD5
M.flag = "Super"
M.LMB = "mouse:272"
M.RMB = "mouse:273"
M.MMB = "mouse:274"
M.left = "h"
M.down = "j"
M.up = "k"
M.right = "l"
M.ws = {
ids = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" },
keys = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "Minus", "Equal" },
}
M.term = "foot"
M.menu = "j4-dmenu-desktop --dmenu=\"rofi -dmenu -i\" --no-generic --usage-log=\"/home/tdpeuter/.local/state/dmenu.log\" --term=$term"
M.lock = "swaylock --daemonize"
M.enable_hy3 = true
return M

View file

@ -1,9 +1,3 @@
Host Hugo
User admin
HostName 192.168.0.11
IdentitiesOnly yes
IdentityFile /run/secrets/Hugo/ssh
Host HPC
User vsc44995
HostName login.hpc.ugent.be
@ -15,7 +9,7 @@ Host git.depeuter.dev
User git
HostName git.depeuter.dev
IdentitiesOnly yes
IdentityFile /run/secrets/Hugo/Gitea/ssh
IdentityFile /run/secrets/Gitea/ssh
Host github.com
User git
@ -36,3 +30,66 @@ Host subgit.ugent.be
IdentityFile /run/secrets/UGent/SubGit/ssh
CanonicalizeHostname yes # Ignore capitalization
Host gitlab.ilabt.imec.be
User git
HostName gitlab.ilabt.imec.be
IdentitiesOnly yes
IdentityFile /run/secrets/UGent/GitHub/ssh
# HomeLab
# Physical hosts
Host Hugo
User admin
HostName 192.168.0.11
IdentitiesOnly yes
IdentityFile /run/secrets/HomeLab/Hugo/ssh
Host Roxanne
User ghost
Hostname 192.168.0.13
IdentitiesOnly yes
IdentityFile /run/secrets/HomeLab/Roxanne/ghost/ssh
Host HTPC
User root
Hostname 192.168.0.88
IdentitiesOnly yes
IdentityFile /run/secrets/HomeLab/HTPC/ssh
# Virtual hosts
Host Gitea
User gh0st
HostName 192.168.0.24
IdentitiesOnly yes
IdentityFile /run/secrets/HomeLab/Gitea/ssh
Host Nextcloud
User administrator
Hostname 192.168.0.23
IdentitiesOnly yes
IdentityFile /run/secrets/HomeLab/Nextcloud/ssh
Host Vaultwarden
User gh0st
Hostname 192.168.0.22
IdentitiesOnly yes
IdentityFile /run/secrets/HomeLab/Vaultwarden/ssh
Host Binnenpost
User admin
Hostname 192.168.0.89
IdentitiesOnly yes
IdentityFile /run/secrets/HomeLab/NixOS/admin/ssh
Host Development
User admin
Hostname 192.168.0.91
IdentitiesOnly yes
IdentityFile /run/secrets/HomeLab/NixOS/admin/ssh
Host Testing
User gh0st
Hostname 192.168.0.92
IdentitiesOnly yes
IdentityFile /run/secrets/HomeLab/NixOS/admin/ssh

View file

@ -0,0 +1 @@
sk-ssh-ed25519@openssh.com AAAAGnNrLXNzaC1lZDI1NTE5QG9wZW5zc2guY29tAAAAIHOoTp+e6qWGn4Sco5CZ6G0zrX5NAQBpLlDVirncJ/HqAAAABHNzaDo= ssh:

View file

@ -61,5 +61,9 @@ exec wlsunset -l 50.50 -L 4.00 -t 3000 -T 6500
exec gnome-keyring-daemon --start --components=secrets # Secrets
exec dunst --verbosity crit # Notification manager
exec swayidle -w
exec waycorner
exec nextcloud --background
# SwayFX
blur enable

View file

@ -1,6 +1,12 @@
input type:keyboard {
xkb_layout "us"
xkb_variant "altgr-intl"
xkb_layout "us","be"
xkb_variant "altgr-intl","iso-alternate"
xkb_numlock enable
}
# Disable numblock on laptop by default
input "1:1:AT_Translated_Set_2_keyboard" {
xkb_numlock disable
}
input type:touchpad {
@ -18,3 +24,7 @@ output * {
output "Dell Inc. DELL P2214H 29C2937M4YTL" {
transform 270
}
# Clamshell style
bindswitch lid:on output eDP-1 disable
bindswitch lid:off output eDP-1 enable

View file

@ -1,7 +1,8 @@
set $notify ~/projects/sisyphus/scripts/notify.sh
# Focus
bindsym {
# Focus
$flag+$up focus up
$flag+$right focus right
$flag+$down focus down
@ -14,10 +15,8 @@ bindsym {
$flag+p focus parent
$flag+space focus mode_toggle
}
# Move windows
bindsym {
# Move windows
$flag+Shift+$up move up
$flag+Shift+$right move right
$flag+Shift+$down move down
@ -32,10 +31,8 @@ bindsym {
$flag+KP_Next move scratchpad
$flag+Prior scratchpad show
$flag+KP_Prior scratchpad show
}
# Layouts
bindsym {
# Layouts
$flag+z layout toggle split
$flag+x layout tabbed
$flag+c split h
@ -209,23 +206,29 @@ bindsym {
-B 'Yes, exit sway' 'swaymsg exit'
# Kill focused window
$flag+q kill
$flag+q kill
# Start a terminal
$flag+Return exec $term
$alt+space exec $menu
$alt+Tab focus prev
$flag+Tab exec $window_switcher
$flag+Return exec $term
Control+$alt+t exec $term
$flag+Shift+Return exec $term -e -- zellij a main
Control+$alt+Shift+t exec $term -e -- zellij a main
$alt+space exec $menu
$alt+Tab focus prev
$flag+Tab exec $window_switcher
--whole-window $alt+$scrollUp focus prev
--whole-window $alt+$scrollDown focus next
# Lock the screen
$flag+Delete exec $lock
$flag+Delete exec $lock
# File explorer
$flag+e exec $term -e vifm
# Internet browser
$flag+i exec firefox
$flag+e exec $term -e vifm
# Task manager
Control+Shift+Escape exec $term -e zenith
}
bindgesture {

View file

@ -5,42 +5,51 @@
set $default "default"
# Resizing
set $resize "Resize"
bindsym $flag+r mode $resize
mode $resize bindsym {
$right resize grow width 10 px or 10 ppt
$up resize grow height 10 px or 10 ppt
$left resize shrink width 10 px or 10 ppt
$down resize shrink height 10 px or 10 ppt
set $mode_resize "Resize"
bindsym $flag+r mode $mode_resize
mode $mode_resize {
bindsym {
$right resize grow width 10 px or 10 ppt
$up resize grow height 10 px or 10 ppt
$left resize shrink width 10 px or 10 ppt
$down resize shrink height 10 px or 10 ppt
Right resize grow width 10 px or 10 ppt
Up resize grow height 10 px or 10 ppt
Left resize shrink width 10 px or 10 ppt
Down resize shrink height 10 px or 10 ppt
Right resize grow width 10 px or 10 ppt
Up resize grow height 10 px or 10 ppt
Left resize shrink width 10 px or 10 ppt
Down resize shrink height 10 px or 10 ppt
Shift+$right resize grow width 50 px or 50 ppt
Shift+$up resize grow height 50 px or 50 ppt
Shift+$left resize shrink width 50 px or 50 ppt
Shift+$down resize shrink height 50 px or 50 ppt
Shift+$right resize grow width 50 px or 50 ppt
Shift+$up resize grow height 50 px or 50 ppt
Shift+$left resize shrink width 50 px or 50 ppt
Shift+$down resize shrink height 50 px or 50 ppt
Shift+Right resize grow width 50 px or 50 ppt
Shift+Up resize grow height 50 px or 50 ppt
Shift+Left resize shrink width 50 px or 50 ppt
Shift+Down resize shrink height 50 px or 50 ppt
Shift+Right resize grow width 50 px or 50 ppt
Shift+Up resize grow height 50 px or 50 ppt
Shift+Left resize shrink width 50 px or 50 ppt
Shift+Down resize shrink height 50 px or 50 ppt
$flag+$right move right
$flag+$up move up
$flag+$left move left
$flag+$down move down
$flag+$right move right
$flag+$up move up
$flag+$left move left
$flag+$down move down
$flag+Right move right
$flag+Up move up
$flag+Left move left
$flag+Down move down
$flag+Right move right
$flag+Up move up
$flag+Left move left
$flag+Down move down
Return mode $default
Escape mode $default
$flag+r mode $default
$flag+r mode $default
Escape mode $default
Return mode $default
}
bindgesture {
swipe:2:right resize grow width 10 px or 10 ppt
swipe:2:down resize grow height 10 px or 10 ppt
swipe:2:left resize shrink width 10 px or 10 ppt
swipe:2:up resize shrink height 10 px or 10 ppt
}
}
# System actions
@ -53,9 +62,23 @@ mode $mode_system bindsym {
r mode $default, exec systemctl reboot
Shift+s mode $default, exec systemctl poweroff -i
Return mode $default
Escape mode $default
Control+$alt+Delete mode $default
Escape mode $default
Return mode $default
}
set $mode_preferences "Toggle (d)ark mode, (s)unset, (n)otification"
bindsym $alt+end mode $mode_preferences
bindsym $alt+KP_End mode $mode_preferences
mode $mode_preferences bindsym {
d exec "${SCRIPT_DIR}/toggle-light-dark.sh", mode $default
n exec "${SCRIPT_DIR}/toggle-notifications.sh", mode $default
s exec "${SCRIPT_DIR}/toggle-nightlight.sh", mode $default
$alt+end mode $default
$alt+KP_End mode $default
Escape mode $default
Return mode $default
}
# Screenshots
@ -72,20 +95,23 @@ mode $mode_screenshot bindsym {
Shift+s exec grimshot --notify save screen $save_format, mode $default
Print exec grimshot --notify save screen $save_format, mode $default
Return mode $default
Escape mode $default
Return mode $default
}
set $mode_preferences "Toggle (d)ark mode, (s)unset, (n)otification"
bindsym $alt+end mode $mode_preferences
bindsym $alt+KP_End mode $mode_preferences
mode $mode_preferences bindsym {
d exec "${SCRIPT_DIR}/toggle-light-dark.sh", mode $default
s exec "${SCRIPT_DIR}/sunset.sh", mode $default
n exec "${SCRIPT_DIR}/do-not-disturb.sh", mode $default
# Launcher
set $mode_launcher "Launch (f)irefox, (s)potify or (t)hunderbird."
bindsym $flag+o mode $mode_launcher
mode $mode_launcher bindsym {
f exec firefox, mode $default
t exec thunderbird, mode $default
Return mode $default
Escape mode $default
$alt+end mode $default
$alt+KP_End mode $default
$flag+o mode $default
Escape mode $default
Return mode $default
}
# Ignore (all) keybinds. Useful when working with Virtual Machines.
set $mode_ignore "Ignore keybinds - Press Control+Alt+Insert to escape."
bindsym Control+$alt+Insert mode $mode_ignore
mode $mode_ignore bindsym Control+$alt+Insert mode $default

View file

@ -15,6 +15,10 @@ default_border pixel 1
default_floating_border normal 1
hide_edge_borders smart
smart_borders on
gaps {
inner 5
outer 3
}
# Mimic no titles by setting the text color to background color
# border backgr. text indic. child_border

View file

@ -2,41 +2,55 @@
# .config/swaylock/config
#
indicator
indicator-radius=200
#indicator
#indicator-radius=200
#
#clock
#datestr=%A, %B %d %Y
#
#show-failed-attempts
#
#screenshots
#effect-pixelate=10
#effect-vignette=0.75:0 # Darken the whole screen.
#fade-in=0.25
#
#grace=7 # Allow to unlock without password for duration
#grace-no-mouse
clock
datestr=%A, %B %d %Y
screenshots
effect-blur=5x5
effect-vignette=0.75:0 # Darken the whole screen.
fade-in=0.25
grace=7 # Allow to unlock without password for duration
grace-no-mouse
image=${ASSETS_DIR}/bluescreen.png
# Styling
color=000000 # The default background color when no image could be loaded
font=letter extended
text-color=ffffff
text-clear-color=ffffff
text-wrong-color=eb4d4b
text-caps-lock-color=ffffff
text-wrong-color=bd2024
layout-text-color=ffffff
# Make all the other stuff invisible
key-hl-color=00000000
separator-color=00000000
ring-color=00000000
ring-clear-color=00000000
ring-ver-color=00000000
ring-wrong-color=00000000
line-color=00000000
line-clear-color=00000000
line-ver-color=00000000
line-wrong-color=00000000
inside-color=00000000
inside-clear-color=00000000
inside-caps-lock-color=00000000
inside-ver-color=00000000
inside-wrong-color=00000000
key-hl-color=00000000
layout-bg-color=00000000
layout-border-color=00000000
line-color=00000000
line-clear-color=00000000
line-caps-lock-color=00000000
line-ver-color=00000000
line-wrong-color=00000000
ring-color=00000000
ring-clear-color=00000000
ring-caps-lock-color=00000000
ring-ver-color=00000000
ring-wrong-color=00000000
separator-color=00000000
text-ver-color=00000000

View file

@ -25,8 +25,7 @@ set smarttab
set tabstop=4
set title
set wildignore=*.docx,*.jpg,*.png,*.gif,*.pdf,*.pyc,*.exe,*.flv,*.img,*.xlsx
"" Show suggestions on another line instead of inplace
set wildmenu
set wildmenu "" Show suggestions on another line instead of inplace
syntax enable
@ -82,6 +81,9 @@ Plug 'prabirshrestha/vim-lsp'
Plug 'sheerun/vim-polyglot'
Plug 'vifm/vifm.vim'
" Coq
Plug 'whonore/Coqtail'
call plug#end()
" }}}

View file

@ -1,42 +0,0 @@
//
// ~/.config/waybar/config
//
[{
"name": "toggle",
"mode": "hide",
"ipc": true,
"position": "top",
"height": 25,
"spacing": 4,
"margin": "-25px 0 0 0", // Show this bar on top of the other one, seemingly the "same" one.
"custom/sep": {
"format": "\uf142"
},
"include": [
// Import modules (!)
"~/.config/waybar/modules.json",
// "~/.config/waybar/default.json"
"~/.config/waybar/left.json"
],
},
{
"name": "keep",
"position": "top",
"height": 25,
"modules-left": ["sway/mode", "keyboard-state"],
"modules-center": ["clock"],
"modules-right": ["privacy"],
"include": [
// Import modules (!)
"~/.config/waybar/modules.json"
],
}]

View file

@ -0,0 +1,62 @@
/* * * * * * * * * * * * * * * * *
* *
* ~/.config/waybar/config.jsonc *
* *
* * * * * * * * * * * * * * * * */
[
/* Always visible, contains less information */
{
"name": "keep",
"position": "top",
"height": 26,
"modules-left": [
"group/mode"
],
"modules-center": [
"clock#center"
],
"modules-right": [
"keyboard-state#numlock",
"keyboard-state#capslock",
"privacy"
],
"include": [
"~/.config/waybar/modules.json"
],
"start_hidden": true
},
/* Toggle this bar, contains all information */
{
"name": "toggle",
"position": "top",
"height": 26,
/* Show this bar on top of the other one, seemingly replacing it. */
/*"margin": "-26px 0 0 0",*/
"modules-left": [
"custom/meta",
"sway/window",
"group/workspaces",
"custom/scratchpad-indicator",
"group/mode"
],
"modules-center": [
"mpris"
],
"modules-right": [
"group/badges",
"tray",
"group/control-center",
"group/display",
"group/network",
"pulseaudio",
"group/power",
"clock#bar"
],
"include": [
"~/.config/waybar/modules.json"
],
"reload_style_on_change": true
}
]

View file

@ -2,17 +2,15 @@
"modules-left": [
"sway/workspaces",
"custom/scratchpad-indicator",
"mpris",
"group/system",
"group/system"
],
"modules-right": [
"group/hardware",
"custom/sep",
"tray",
"sway/language",
"bluetooth",
"network",
"pulseaudio",
"battery",
"custom/sep",
"tray"
"group/battery",
"mpris"
]
}

View file

@ -0,0 +1,80 @@
@define-color foreground rgb(202, 202, 202);
@define-color background rgb( 3, 3, 3);
@define-color highlight-background alpha(@foreground, 0.4);
@define-color accent #00897b;
@define-color white #ecf0f1;
@define-color warning-red #eb4d4b;
* {
font-family: letter, "Font Awesome 6 Free", font-awesome, monospace;
font-size: 13px;
font-weight: 600;
}
window#waybar {
border: none;
color: @white;
transition-property: background-color;
transition-duration: .5s;
}
window#waybar.keep {
background-color: @transparent;
}
window#waybar.toggle {
background-color: alpha(@foreground, 0.4);
}
tooltip {
background: alpha(@background, 0.8);
}
tooltip label {
color: @white;
}
#workspaces button {
border: none;
padding: 0 8px;
border-radius: 5px;
animation: ws_normal 20s ease-in-out 1;
}
#mode,
#workspaces button.focused {
background-color: alpha(@background, 0.2);
}
#workspaces button:hover {
background-color: alpha(@background, 0.2);
}
#battery,
#disk,
#bluetooth,
#clock,
#custom-browser,
#custom-scratchpad-indicator,
#custom-system-hibernate, #custom-system-lock, #custom-system-reboot, #custom-system-shutdown, #custom-system-sleep,
#custom-toggle-light-dark,
#custom-toggle-night-light,
#custom-toggle-notifications,
#cpu,
#idle_inhibitor,
#keyboard-state,
#memory,
#mpris,
#network,
#sway-language,
#sway-window,
#power-profiles-daemon,
#privacy,
#pulseaudio,
#temperature,
#tray {
color: @white;
}

View file

@ -1,292 +1,472 @@
{
"backlight": {
"device": "intel_backlight",
"format": "{percent}% {icon}",
"format-icons": [
"\uf111", /* */
"\uf185" /* */
],
"on-click": "brightnessctl -sq set 0",
"on-click-right": "wl-mirror $(hyprctl monitors -j | jq --raw-output '.[] | select(.focused) | .name')"
},
"battery": {
"format": "{capacity}% {icon}",
"format-alt": "{time} {icon}",
"format-charging": "{capacity}% \uf0e7 {icon}",
"format-icons": ["\uf244", "\uf243", "\uf242", "\uf241", "\uf240"],
"format-charging": "{capacity}% \ue55b", /* */
"format-plugged": "{capacity}% \ue55c",
"states": {
"warning": 30,
"critical": 15
"format-icons": [
"\uf244", /* */
"\uf243", /* */
"\uf242", /* */
"\uf241", /* */
"\uf240" /* */
],
"states": {
"warning": 25,
"critical": 12
}
},
"disk": {
"interval": 30,
"format": "{percentage_used}% \uf0a0",
"on-click": "kitty -e duf /",
"path": "/",
"tooltip-format": "{used} used out of {total} on {path} ({percentage_free}% or {free} free)"
},
"bluetooth": {
"format-disabled": "<big>\uf294</big>",
"format-off": "\uf294",
"format-on": "<big>\uf294</big>",
"format-connected": "<big>\uf294</big>c",
"format-disabled": "\uf294", /* */
"format-off": "\uf294", /* */
"format-on": "<big>\uf294</big>", /* */
"format-connected": "<big>\uf294</big>c", /* c */
"max-length": 10.3,
"on-click": "bluetoothctl power $( bluetoothctl show | sed -n 's/\\s*Powered: \\(yes\\|no\\)/\\1/p' | sed 's/yes/off/;s/no/on/' )",
"on-click-right": "kitty -e bluetoothctl",
"tooltip-format": "{status}",
"tooltip-format-on": "{status}, no devices connected",
"tooltip-format-connected": "{status} ({num_connections}):\n{device_enumerate}",
"tooltip-format-enumerate-connected": "{device_alias} ({device_address})",
"tooltip-format-enumerate-connected-battery": "{device_alias}\t{device_address}\t{device_battery_percentage}"
},
"clock": {
"clock#center": {
"format": "{:%H:%M}",
"format-alt": "{:%d/%m/%Y %H:%M}",
"format-alt": "{:%a %b %d, %Y, %R}",
"timezone": "Europe/Brussels",
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>"
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
"calendar": {
"mode": "month",
"week-pos": "left",
"format": {
/* Highlight todays date. */
"today": "<span background='#ffffff' color='#000000'><b>{}</b></span>"
}
},
"actions": {
"on-click": "mode"
}
},
"custom/browser": {
"format": "\uf120",
"on-click": "dmenu_run",
"tooltip-format": "Launch an application"
"clock#bar": {
"format": "{:%a %b %d, %R}",
"timezone": "Europe/Brussels",
"tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
"calendar": {
"mode-mon-col": 3,
"on-scroll": 1,
"format": {
/* Highlight today's date. */
"today": "<span background='#FFFFFF' color='#000000'><b>{}</b></span>"
}
},
"actions": {
"on-click": "mode"
}
},
"custom/light-dark-toggle": {
"on-click": "bash ${SCRIPT_DIR}/toggle-light-dark.sh",
"tooltip-format": "Toggle between light and dark mode",
"format": "\uf042 ",
"tooltip": true
"custom/battery": {
"exec": "bash ${SCRIPT_DIR}/battery.sh",
"return-type": "json",
"interval": 60
},
"custom/night-light-toggle": {
"on-click": "bash ${SCRIPT_DIR}/sunset.sh",
"tooltip-format": "Toggle night-light on or off",
"format": "\uf0eb ",
"tooltip": true,
"tooltip-format": "Toggle night-light on or off",
"custom/control-center": {
"format": "\uf085", /* */
"tooltip": false
},
"custom/display": {
"format": "\ue163", /* */
"tooltip": false,
"on-click": "wdisplays"
},
"custom/meta": {
"format": "\uf17c", /* */
"tooltip": false,
"on-click": "dmenu_run"
},
"custom/scratchpad-indicator": {
"interval": 3,
"return-type": "json",
"exec": "swaymsg -t get_tree | jq --unbuffered --compact-output '(recurse(.nodes[]) | select(.name == \"__i3_scratch\") | .focus) as $scratch_ids | [.. | (.nodes? + .floating_nodes?) // empty | .[] | select(.id |IN($scratch_ids[]))] as $scratch_nodes | if ($scratch_nodes|length) > 0 then { text: \"\\($scratch_nodes | length)\", tooltip: $scratch_nodes | map(\"\\(.app_id // .window_properties.class) (\\(.id)): \\(.name)\") | join(\"\\n\") } else empty end'",
"format": "{} \uf2d2",
"format": "\uf2d2 {}",
"on-click": "exec swaymsg 'scratchpad show'",
"on-click-right": "exec swaymsg 'move scratchpad'"
},
"custom/system-lock": {
"format": "\uf09c",
"format": "\uf09c", /* */
"tooltip": true,
"tooltip-format": "Lock device",
"on-click": "swaylock -f"
"on-click": "swaylock --daemonize"
},
"custom/system-sleep": {
"format": "\uf186",
"format": "\uf186", /* */
"tooltip": true,
"tooltip-format": "Put device to sleep",
"on-click": "swaylock -f; systemctl suspend"
"on-click": "swaylock --daemonize; systemctl suspend"
},
"custom/system-hibernate": {
"format": "\uf2dc",
"format": "\uf2dc", /* */
"tooltip": true,
"tooltip-format": "Hibernate device",
"on-click": "swaylock -f; systemctl hibernate"
"on-click": "swaylock --daemonize; systemctl hibernate"
},
"custom/system-reboot": {
"format": "\uf0e2",
"format": "\uf0e2", /* */
"tooltip": true,
"tooltip-format": "Reboot device",
"on-click": "systemctl reboot"
},
"custom/system-shutdown": {
"format": "\uf011",
"format": "\uf011", /* */
"tooltip": true,
"tooltip-format": "Shutdown device",
"on-click": "systemctl poweroff -i"
},
"custom/toggle-notifications": {
"on-click": "bash ${SCRIPT_DIR}/do-not-disturb.sh",
"tooltip-format": "Toggle notifications",
"format": "\uf1f6 ",
"tooltip": true
},
"cpu": {
"format": "{usage}% \uf2db",
"on-click": "foot -e htop",
"custom/toggle-light-dark": {
"exec": "bash ${SCRIPT_DIR}/toggle-light-dark.sh -g",
"interval": 60,
"return-type": "json",
"on-click": "bash ${SCRIPT_DIR}/toggle-light-dark.sh",
"format": "{icon}",
"format-icons": {
"default": "\uf185",
"prefer-dark": "\uf005"
},
"tooltip": true
},
"group/hardware": {
"custom/toggle-nightlight": {
"exec": "bash ${SCRIPT_DIR}/toggle-nightlight.sh -g",
"interval": 60,
"return-type": "json",
"on-click": "bash ${SCRIPT_DIR}/toggle-nightlight.sh",
"format": "{icon}",
"format-icons": {
"active": "\uf186", /* */
"inactive": "\uf0eb" /* */
},
"tooltip": true
},
"custom/toggle-notifications": {
"exec": "bash ${SCRIPT_DIR}/toggle-notifications.sh -g",
"interval": 60,
"return-type": "json",
"on-click": "bash ${SCRIPT_DIR}/toggle-notifications.sh",
"format": "{icon}",
"format-icons": {
"normal": "\uf0f3", /* */
"paused": "\uf1f6" /* */
},
"tooltip": true
},
"custom/toggle-tailscale": {
"exec": "bash ${SCRIPT_DIR}/toggle-tailscale.sh -g",
"interval": 60,
"return-type": "json",
"on-click": "bash ${SCRIPT_DIR}/toggle-tailscale.sh",
"format": "{icon}",
"format-icons": {
"disconnected": "\ue50b",
"connected": "\ue509",
},
"tooltip": true
},
"group/badges": {
"orientation": "inherit",
"modules": [
"power-profiles-daemon",
"memory",
"cpu",
"temperature",
"keyboard-state#numlock",
"keyboard-state#capslock",
"systemd-failed-units",
"privacy"
]
},
"group/control-center": {
"orientation": "inherit",
"modules": [
/* Preview */
"custom/control-center",
/* Left-most */
"group/language",
"custom/toggle-notifications"
/* Right-most */
],
"drawer": {
"transition-duration": 500,
"transition-left-to-right": false,
"children-class": "drawer-child"
}
},
"group/display": {
"orientation": "inherit",
"modules": [
/* Preview */
"custom/display",
/* Most-left */
"idle_inhibitor",
"custom/toggle-nightlight",
"custom/toggle-light-dark",
"backlight"
/* Most-right */
],
"drawer": {
"transition-duration": 500,
"transition-left-to-right": false,
"children-class": "drawer-child"
}
},
"group/language": {
"orientation": "inherit",
"modules": [
"hyprland/language",
"sway/language"
]
},
"group/mode": {
"orientation": "inherit",
"modules": [
"hyprland/submap",
"sway/mode"
]
},
"group/network": {
"orientation": "inherit",
"modules": [
/* Preview */
"network",
/* Most-left */
"bluetooth",
"custom/toggle-tailscale"
/* Most-right */
],
"drawer": {
"transition-duration": 500,
"transition-left-to-right": false,
"children-class": "drawer-child"
}
},
"group/power": {
"orientation": "inherit",
"modules": [
/* Preview */
/* "battery", */ "custom/battery",
/* Most-left */
"custom/system-shutdown",
"custom/system-reboot",
"custom/system-hibernate",
"custom/system-sleep",
"custom/system-lock",
"power-profiles-daemon"
/* Most-right */
],
"drawer": {
"transition-duration": 500,
"transition-left-to-right": false,
"children-class": "drawer-child",
},
"children-class": "drawer-child"
}
},
"group/system": {
"group/workspaces": {
"orientation": "inherit",
"modules": [
"idle_inhibitor",
"custom/light-dark-toggle",
"custom/night-light-toggle",
"custom/toggle-notifications",
],
"drawer": {
"transition-duration": 500,
"tansition-left-to-right": true,
"children-class": "drawer-child",
},
"hyprland/workspaces",
"sway/workspaces"
]
},
"hyprland/language": {
"format": "\uf11c",
"on-click": "hyprctl switchxkblayout at-translated-set-2-keyboard next && notify-send \"$(hyprctl devices -j | jq -r '.keyboards[] | select(.name == \"at-translated-set-2-keyboard\") | .active_keymap')\" --app-name 'waybar'",
"tooltip": true,
"tooltip-format": "Switch keyboard layouts",
"keyboard-name": "at-translated-set-2-keyboard"
},
"hyprland/workspaces": {
"all-outputs": false,
"disable-scroll": true,
"format": "{icon}{name}",
"format-icons": {
"default": "",
"urgent": "\uf071 " /* */
}
},
"idle_inhibitor": {
"format": "{icon}",
"format-icons": {
"activated": "\uf06e",
"deactivated": "\uf070"
},
"activated": "\uf06e", /* */
"deactivated": "\uf070" /* */
},
"tooltip": false
},
"keyboard-state": {
"keyboard-state#capslock": {
"capslock": true,
"format": {
"capslock": "{icon}",
"capslock": "{icon}"
},
"format-icons": {
"locked": "\uf023",
"locked": "\uf11c", /* */
"unlocked": ""
},
"numlock": false,
"capslock": true,
"scrollock": false,
}
},
"memory": {
"format": "{}% \uf1c0",
"on-click": "kitty -e zenith"
"keyboard-state#numlock": {
"numlock": true,
"format": {
"numlock": "{icon}"
},
"format-icons": {
"locked": "\uf1ec", /* */
"unlocked": ""
}
},
"mpris": {
// "ignored-players": ["firefox"]
"format": "{player_icon} {dynamic}",
"format-paused": "{status_icon} <i>{dynamic}</i>",
"tooltip-format": "{player} ({status}) {title} - {artist} - {album}",
"player-icons": {
"default": "\uf51f",
"spotify": "\uf1bc",
"mpv": "🎵"
"default": "\uf8d9", /* */
"mpv": "\uf144", /* */
"spotify": "\uf1bc" /* */
},
"status-icons": {
"paused": "⏸"
"paused": "\uf04c" /* */
},
"dynamic-order": [
"title",
"artist"
],
"dynamic-len": 40,
"dynamic-len": 40
},
"network": {
"format-disconnected": "\uf127",
"format-ethernet": "\uf6ff {ifname}: {ipadds}/{cidr}",
"format-wifi": "\uf1eb",
"format-disconnected": "\uf127", /* */
"format-ethernet": "\uf6ff", /* */
"format-linked": "\uf0c1", /* */
"format-wifi": "{icon}",
"interval": 5,
"on-click-right": "kitty -e nmtui",
"tooltip": true,
"tooltip-format": "{ifname}: {ipaddr}",
"tooltip-format-disconnected": "Disconnected",
"tooltip-format-wifi": "{essid} ({signalStrength}%)\n{ifname}: {ipaddr}"
"tooltip-format-wifi": "{essid} ({signalStrength}%)\n{ifname}: {ipaddr}",
"format-icons": [
"\uf05e", /* */
"\uf1eb", /* */
"\uf1eb" /* */
]
},
"power-profiles-daemon": {
"format": "{icon}",
"format-icons": {
"default": "\uf110", /* */
"performance": "\uf135", /* */
"balanced": "\uf24e", /* */
"power-saver": "\uf06c" /* */
},
"tooltip": true,
"tooltip-format": "Profile: {profile}\nDriver: {driver}"
},
"privacy": {
"transition-duration": 250,
"icon-size": 16,
"modules": [
{
"type": "screenshare",
"tooltip": true
},
{
"type": "audio-in",
"tooltip": true
}
]
},
"pulseaudio": {
"format": "{volume}% {icon}",
"format-headset": "{volume}% \uf58f", /* */
"format-muted": "\uf6a9", /* */
"format-icons": [
"\uf026", /* */
"\uf027", /* */
"\uf028" /* */
],
"scroll-step": 2.0,
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"
},
"sway/language": {
"format": "{short}",
"on-click": "swaymsg input type:keyboard xkb_switch_layout next",
"tooltip": true,
"tooltip-format": "Switch keyboard layouts"
},
"sway/window": {
"max-length": 85
"format": "{title}",
"max-length": 20,
"tooltip": true,
"all-outputs": true,
"icon": false,
"icon-size": 18,
"rewrite": {
".* - (.*)": "$1",
".* — (.*)": "$1"
}
},
"sway/workspaces": {
"all-outputs": false,
"disable-scroll": true,
"format": "{icon}{name}",
"format": "{icon}{name}",
"format-icons": {
"default": "", // Prevent showing workspace name literal.
"urgent": "\uf071 "
},
// "persistent_workspaces": {
// "0:¯\\_(ツ)_/¯": []
// }
},
"power-profiles-daemon": {
"format": "{icon}",
"tooltip-format": "Power profile: {profile}\nDriver: {driver}",
"tooltip": true,
"format-icons": {
"default": "",
"performance": "",
"balanced": "",
"power-saver": ""
"default": "",
"urgent": "\uf071 " /* */
}
},
"privacy": {
"icon-spacing": 4,
"icon-size": 18,
"transition-duration": 250,
"modules": [
{
"type": "screenshare",
"tooltip": true,
"tooltip-icon-size": 18,
},
{
"type": "audio-in",
"tooltip": true,
"tooltip-icon-size": 18,
},
],
"systemd-failed-units": {
"hide-on-ok": true,
"format": "\uf071 {nr_failed}", /* */
},
"pulseaudio": {
"format": "{volume}% {icon}{format_source}",
"format-muted": "\uf6a9{format_source}",
"format-bluetooth": "{volume}% {icon}\uf294{format_source}",
"format-bluetooth-muted": "\uf6a9 {icon}\uf294{format_source}",
"format-source": " {volume}% \uf130",
"format-source-muted": "",
"format-icons": {
"headphone": "\uf58f",
"hands-free": "\uf590",
"headset": "\uf590",
"phone": "\uf3ce",
"portable": "\uf3ce",
"car": "\uf1b9",
"default": ["\uf026", "\uf027", "\uf028 "]
},
"on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle",
"on-click-right": "pavucontrol",
"scroll-step": 2
},
"temperature": {
"critical-threshold": 70,
"format": "{temperatureC}°C {icon}",
"format-icons": ["\uf2cb", "\uf2c9", "\uf2c7"]
},
"tray": {
"icon-size": 16,
"show-passive-items": true,
"spacing": 10
}
}

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