diff --git a/.gitignore b/.gitignore index b2be92b..10ea189 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ result + +.idea diff --git a/assets/bluescreen.png b/assets/bluescreen.png new file mode 100644 index 0000000..ef36cd9 Binary files /dev/null and b/assets/bluescreen.png differ diff --git a/colors.sh b/colors.sh index d7ccfdc..e51c155 100644 --- a/colors.sh +++ b/colors.sh @@ -79,3 +79,147 @@ 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" + diff --git a/nixos/.sops.yaml b/nixos/.sops.yaml index 62f72a2..385e7af 100644 --- a/nixos/.sops.yaml +++ b/nixos/.sops.yaml @@ -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 diff --git a/nixos/flake.lock b/nixos/flake.lock index 91147eb..2124167 100644 --- a/nixos/flake.lock +++ b/nixos/flake.lock @@ -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,16 +25,16 @@ ] }, "locked": { - "lastModified": 1716736833, - "narHash": "sha256-rNObca6dm7Qs524O4st8VJH6pZ/Xe1gxl+Rx6mcWYo0=", + "lastModified": 1758463745, + "narHash": "sha256-uhzsV0Q0I9j2y/rfweWeGif5AWe0MGrgZ/3TjpDYdGA=", "owner": "nix-community", "repo": "home-manager", - "rev": "a631666f5ec18271e86a5cde998cba68c33d9ac6", + "rev": "3b955f5f0a942f9f60cdc9cacb7844335d0f21c3", "type": "github" }, "original": { "owner": "nix-community", - "ref": "release-24.05", + "ref": "release-25.05", "repo": "home-manager", "type": "github" } @@ -86,11 +47,11 @@ ] }, "locked": { - "lastModified": 1701208414, - "narHash": "sha256-xrQ0FyhwTZK6BwKhahIkUVZhMNk21IEI1nUcWSONtpo=", + "lastModified": 1720066371, + "narHash": "sha256-uPlLYH2S0ACj0IcgaK9Lsf4spmJoGejR9DotXiXSBZQ=", "owner": "nix-community", "repo": "nix-github-actions", - "rev": "93e39cc1a087d65bcf7a132e75a650c44dd2b734", + "rev": "622f829f5fe69310a866c8a6cd07e747c44ef820", "type": "github" }, "original": { @@ -101,42 +62,26 @@ }, "nixpkgs": { "locked": { - "lastModified": 1717144377, - "narHash": "sha256-F/TKWETwB5RaR8owkPPi+SPJh83AQsm6KrQAlJ8v/uA=", + "lastModified": 1763334038, + "narHash": "sha256-LBVOyaH6NFzQ3X/c6vfMZ9k4SV2ofhpxeL9YnhHNJQQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "805a384895c696f802a9bf5bf4720f37385df547", + "rev": "4c8cdd5b1a630e8f72c9dd9bf582b1afb3127d2c", "type": "github" }, "original": { "id": "nixpkgs", - "ref": "nixos-24.05", + "ref": "nixos-25.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=", + "lastModified": 1763283776, + "narHash": "sha256-Y7TDFPK4GlqrKrivOcsHG8xSGqQx3A6c+i7novT85Uk=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ad57eef4ef0659193044870c731987a6df5cf56b", + "rev": "50a96edd8d0db6cc8db57dab6bb6d6ee1f3dc49a", "type": "github" }, "original": { @@ -155,15 +100,15 @@ "nixpkgs" ], "poetry2nix": "poetry2nix", - "systems": "systems_3", + "systems": "systems_2", "treefmt-nix": "treefmt-nix" }, "locked": { - "lastModified": 1701455376, - "narHash": "sha256-FMLrMdi6JY7ZfqV5XnNj64jnDcGKznKZLn7O6OMO3u0=", + "lastModified": 1758594056, + "narHash": "sha256-6XyKDRWqBngw1g73e789iyIaw/0VF04ELk/ATtlkTVU=", "owner": "ThinkChaos", "repo": "openconnect-sso", - "rev": "20c0015c4264c72cc19ac272de0dc534309bd21b", + "rev": "2041471efd331d0591d34e122aefb02690fb233a", "type": "github" }, "original": { @@ -197,11 +142,11 @@ ] }, "locked": { - "lastModified": 1701105783, - "narHash": "sha256-5IOI0xXGbhAkUZNNcPId48V78Q+/JlW0hzlif0zxRmM=", + "lastModified": 1721039874, + "narHash": "sha256-XANsG9GYHip8pxZpbqKf/YGv8tIa0xTh289Y+WNBNfw=", "owner": "nix-community", "repo": "poetry2nix", - "rev": "0b2bff39e9bd4e6db3208e09c276ca83a063b370", + "rev": "d11c01e58587e5f21037ed6477465a7f26a32e27", "type": "github" }, "original": { @@ -212,29 +157,28 @@ }, "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" + "utils": "utils", + "zen-browser": "zen-browser" } }, "sops-nix": { "inputs": { "nixpkgs": [ "nixpkgs" - ], - "nixpkgs-stable": "nixpkgs-stable" + ] }, "locked": { - "lastModified": 1717297459, - "narHash": "sha256-cZC2f68w5UrJ1f+2NWGV9Gx0dEYmxwomWN2B0lx0QRA=", + "lastModified": 1763417348, + "narHash": "sha256-n5xDOeNN+smocQp3EMIc11IzBlR9wvvTIJZeL0g33Fs=", "owner": "Mic92", "repo": "sops-nix", - "rev": "ab2a43b0d21d1d37d4d5726a892f714eaeb4b075", + "rev": "3f66a7fb9626a9a9c077612ef10a0ce396286c7d", "type": "github" }, "original": { @@ -273,21 +217,6 @@ "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": [ @@ -296,11 +225,11 @@ ] }, "locked": { - "lastModified": 1699786194, - "narHash": "sha256-3h3EH1FXQkIeAuzaWB+nK0XK54uSD46pp+dMD3gAcB4=", + "lastModified": 1721769617, + "narHash": "sha256-6Pqa0bi5nV74IZcENKYRToRNM5obo1EQ+3ihtunJ014=", "owner": "numtide", "repo": "treefmt-nix", - "rev": "e82f32aa7f06bbbd56d7b12186d555223dc399d1", + "rev": "8db8970be1fb8be9c845af7ebec53b699fe7e009", "type": "github" }, "original": { @@ -316,11 +245,11 @@ ] }, "locked": { - "lastModified": 1715533576, - "narHash": "sha256-fT4ppWeCJ0uR300EH3i7kmgRZnAVxrH+XtK09jQWihk=", + "lastModified": 1738591040, + "narHash": "sha256-4WNeriUToshQ/L5J+dTSWC5OJIwT39SEP7V7oylndi8=", "owner": "gytis-ivaskevicius", "repo": "flake-utils-plus", - "rev": "3542fe9126dc492e53ddd252bb0260fe035f2c0f", + "rev": "afcb15b845e74ac5e998358709b2b5fe42a948d1", "type": "github" }, "original": { @@ -328,6 +257,26 @@ "repo": "flake-utils-plus", "type": "github" } + }, + "zen-browser": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1763352549, + "narHash": "sha256-hzLnXm0v1snDENpF3KvUQBO8XOAh45qg+y4D46K3rz8=", + "owner": "youwen5", + "repo": "zen-browser-flake", + "rev": "5d002fcacbc5423090f2bba19818adda471fe0c8", + "type": "github" + }, + "original": { + "owner": "youwen5", + "repo": "zen-browser-flake", + "type": "github" + } } }, "root": "root", diff --git a/nixos/flake.nix b/nixos/flake.nix index cda9173..fa8b125 100644 --- a/nixos/flake.nix +++ b/nixos/flake.nix @@ -2,20 +2,16 @@ description = "System configuration of my machines using flakes"; inputs = { - nixpkgs.url = "nixpkgs/nixos-24.05"; + nixpkgs.url = "nixpkgs/nixos-25.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-25.05"; inputs.nixpkgs.follows = "nixpkgs"; }; openconnect-sso = { - url = github:ThinkChaos/openconnect-sso/fix/nix-flake; + url = "github:ThinkChaos/openconnect-sso/fix/nix-flake"; inputs = { flake-utils.follows = "utils"; nixpkgs.follows = "nixpkgs"; @@ -23,29 +19,34 @@ }; sops-nix = { url = "github:Mic92/sops-nix"; - inputs.nixpkgs.follows = "nixpkgs"; + inputs.nixpkgs.follows = "nixpkgs"; }; utils = { url = "github:gytis-ivaskevicius/flake-utils-plus"; inputs.flake-utils.follows = "flake-utils"; }; + zen-browser = { + url = "github:youwen5/zen-browser-flake"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = inputs@{ self, nixpkgs, nixpkgs-unstable, - devshell, flake-utils, home-manager, openconnect-sso, sops-nix, utils, + flake-utils, home-manager, openconnect-sso, sops-nix, utils, zen-browser, ... }: 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" + "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" ]; in utils.lib.mkFlake { @@ -71,10 +72,11 @@ }; modules = [ - home-manager.nixosModule - sops-nix.nixosModules.sops ./modules ./users + + home-manager.nixosModules.home-manager + sops-nix.nixosModules.sops ]; }; @@ -82,6 +84,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 ]; }; }; } diff --git a/nixos/hosts/Tibo-NixDesk/default.nix b/nixos/hosts/Tibo-NixDesk/default.nix index 11b7a40..3a22a2c 100644 --- a/nixos/hosts/Tibo-NixDesk/default.nix +++ b/nixos/hosts/Tibo-NixDesk/default.nix @@ -6,7 +6,7 @@ ]; sisyphus = { - desktop.sway.enable = true; + desktop.hyprland.enable = true; hardware = { nvidia = { @@ -35,6 +35,7 @@ }; services = { + tailscale.enable = true; pipewire.enable = true; printing.enable = true; openrgb.enable = true; @@ -56,6 +57,8 @@ efiSysMountPoint = "/boot/efi"; }; }; + + plymouth.enable = true; }; environment.systemPackages = with pkgs; [ @@ -75,9 +78,15 @@ networking.hostName = "Tibo-NixDesk"; - services.xserver.xkb = { - layout = "us"; - variant = "altgr-intl"; + services = { + xserver.xkb = { + layout = "us"; + variant = "altgr-intl"; + }; + + openvpn.servers = { + tryHackMeVPN = { config = '' config /root/nixos/openvpn/tryHackMeVPN-tdpeuter.conf ''; }; + }; }; system.stateVersion = "24.05"; diff --git a/nixos/hosts/Tibo-NixFat/default.nix b/nixos/hosts/Tibo-NixFat/default.nix index 6f0e53c..2e790c3 100644 --- a/nixos/hosts/Tibo-NixFat/default.nix +++ b/nixos/hosts/Tibo-NixFat/default.nix @@ -6,7 +6,10 @@ ]; sisyphus = { - desktop.sway.enable = true; + desktop = { + sway.enable = true; + hyprland.enable = true; + }; hardware = { eid.enable = true; @@ -19,7 +22,7 @@ networking = { networkmanager.enable = true; - # openconnect-sso.enable = true; + openconnect-sso.enable = true; }; nix = { @@ -87,14 +90,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 +114,14 @@ # Touchpad libinput.enable = true; + + thermald.enable = true; }; system.stateVersion = "24.05"; + systemd.coredump.enable = false; + time.timeZone = "Europe/Brussels"; # --- Barrier --- diff --git a/nixos/hosts/Tibo-NixFat/hardware-configuration.nix b/nixos/hosts/Tibo-NixFat/hardware-configuration.nix index 30ba69a..b0dfd70 100644 --- a/nixos/hosts/Tibo-NixFat/hardware-configuration.nix +++ b/nixos/hosts/Tibo-NixFat/hardware-configuration.nix @@ -49,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; + }; } diff --git a/nixos/hosts/Tibo-NixTop/default.nix b/nixos/hosts/Tibo-NixTop/default.nix new file mode 100644 index 0000000..e689f5d --- /dev/null +++ b/nixos/hosts/Tibo-NixTop/default.nix @@ -0,0 +1,205 @@ +# 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-sso.enable = true; + }; + + nix = { + flakes.enable = true; + gc.onFull.enable = true; + }; + + programs = { + direnv.enable = true; + home-manager.enable = true; + sops.enable = true; + ssh.enable = true; + }; + + services = { + pipewire.enable = true; + tailscale.enable = true; + }; + + users.tdpeuter.enable = true; + + virtualisation = { + docker.enable = true; + virtualbox.enable = true; + }; + }; + + boot = { + initrd = { + # Use EFI and YubiKey + kernelModules = [ "vfat" "nls_cp437" "nls_iso8859-1" "usbhid" ]; + + luks = { + # Enable YubiKey PBA + yubikeySupport = true; + devices."encrypted".yubikey = { + slot = 2; + twoFactor = false; + gracePeriod = 10; + keyLength = 64; + saltLength = 16; + storage.device = "/dev/nvme0n1p1"; + }; + }; + }; + + loader = { + # Use the systemd-boot EFI boot loader. + systemd-boot = { + enable = true; + + editor = false; + memtest86.enable = true; + }; + efi.canTouchEfiVariables = true; + }; + + # Use latest kernel. + kernelPackages = pkgs.linuxPackages_latest; + + 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 = { + # Handle the laptop lid switch as follows: + lidSwitch = "hybrid-sleep"; + lidSwitchExternalPower = "lock"; + lidSwitchDocked = "ignore"; + + # Handle the power key + powerKey = "suspend"; + }; + + + power-profiles-daemon.enable = false; + + smartd.enable = true; + + thermald.enable = true; + + xserver = { + # Keyboard layout + xkb = { + layout = "us"; + variant = "altgr-intl"; + }; + }; + + # Touchpad + libinput.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. + }; + + # Enable CUPS to print documents. + # services.printing.enable = true; + + # Enable touchpad support (enabled default in most desktopManager). + # services.libinput.enable = true; + + # 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; [ + git + 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? + +} + diff --git a/nixos/hosts/Tibo-NixTop/hardware-configuration.nix b/nixos/hosts/Tibo-NixTop/hardware-configuration.nix new file mode 100644 index 0000000..ac27dba --- /dev/null +++ b/nixos/hosts/Tibo-NixTop/hardware-configuration.nix @@ -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..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; +} diff --git a/nixos/modules/desktop/default.nix b/nixos/modules/desktop/default.nix index 465f8ca..2defa4d 100644 --- a/nixos/modules/desktop/default.nix +++ b/nixos/modules/desktop/default.nix @@ -4,5 +4,7 @@ ./hyprland ./plasma ./sway + + ./waybar ]; } diff --git a/nixos/modules/desktop/gnome/default.nix b/nixos/modules/desktop/gnome/default.nix index e522780..2ce218c 100644 --- a/nixos/modules/desktop/gnome/default.nix +++ b/nixos/modules/desktop/gnome/default.nix @@ -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 - ]); }; } diff --git a/nixos/modules/desktop/hyprland/default.nix b/nixos/modules/desktop/hyprland/default.nix index 5209653..3572342 100644 --- a/nixos/modules/desktop/hyprland/default.nix +++ b/nixos/modules/desktop/hyprland/default.nix @@ -1,15 +1,87 @@ -{ config, lib, ... }: +{ config, lib, pkgs, pkgs-unstable, system, ... }: let cfg = config.sisyphus.desktop.hyprland; + + inherit (pkgs-unstable.hyprlandPlugins.hy3) version; + + # Make hyprland package follow latest release of Hy3 + hyprland = pkgs-unstable.hyprland.overrideAttrs (old: { + version = "0.52.0"; + src = pkgs-unstable.fetchFromGitHub { + owner = "hyprwm"; + repo = "Hyprland"; + fetchSubmodules = true; + rev = "f56ec180d3a03a5aa978391249ff8f40f949fb73"; + hash = "sha256-aZCTbfKkxsEinY5V7R0NYuuitKLYc8ig8T91+yDMGJ0="; + }; + }); + + hy3 = pkgs-unstable.hyprlandPlugins.hy3.overrideAttrs (old: { + version = "hl0.52.0"; + src = pkgs-unstable.fetchFromGitHub { + owner = "outfoxxed"; + repo = "hy3"; + rev = "16dae4d8f853b0d3e8434ee9941f9fc0155b8952"; + hash = "sha256-UeMEUlQsil5DEtF/VQ//41vXJF9ff2xjoYVjhR6dqu4="; + }; + }); in { options.sisyphus.desktop.hyprland.enable = lib.mkEnableOption "Hyprland"; config = lib.mkIf cfg.enable { + environment = { + sessionVariables = { + # Hint Electron apps to use wayland + NIXOS_OZONE_WL = "1"; + + 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 # Tool to configure displays + + swaylock + + glib + + libva + + dmenu + jq + j4-dmenu-desktop + rofi + ]) ++ [ + hy3 # i3/sway layout plugin + ]; + }; + programs.hyprland = { enable = true; + package = hyprland; 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; }; } diff --git a/nixos/modules/desktop/plasma/default.nix b/nixos/modules/desktop/plasma/default.nix index 39e1ab7..8bdb62c 100644 --- a/nixos/modules/desktop/plasma/default.nix +++ b/nixos/modules/desktop/plasma/default.nix @@ -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 ]; }; } diff --git a/nixos/modules/desktop/sway/default.nix b/nixos/modules/desktop/sway/default.nix index bab109b..b9a8003 100644 --- a/nixos/modules/desktop/sway/default.nix +++ b/nixos/modules/desktop/sway/default.nix @@ -71,7 +71,7 @@ in { 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 @@ -82,10 +82,11 @@ in { playerctl swaybg swaylock-effects - waybar wlsunset + waycorner # TODO Turn into own module/package? + dmenu jq j4-dmenu-desktop rofi @@ -94,6 +95,7 @@ in { ]); environment.sessionVariables = { + ASSETS_DIR = ../../../../assets; SCRIPT_DIR = ../../../../scripts; }; @@ -101,54 +103,45 @@ in { dejavu_fonts font-awesome noto-fonts - noto-fonts-cjk + noto-fonts-cjk-sans + noto-fonts-cjk-serif noto-fonts-emoji - source-han-sans - source-han-sans-japanese - source-han-serif-japanese ]; - 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 + ]; + }; }; } diff --git a/nixos/modules/desktop/waybar/default.nix b/nixos/modules/desktop/waybar/default.nix new file mode 100644 index 0000000..d893470 --- /dev/null +++ b/nixos/modules/desktop/waybar/default.nix @@ -0,0 +1,20 @@ +{ 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 + ]; + + programs.waybar.enable = true; + + services.atd.enable = true; # Command scheduler + }; +} diff --git a/nixos/modules/hardware/default.nix b/nixos/modules/hardware/default.nix index 2d38b1e..238bcea 100644 --- a/nixos/modules/hardware/default.nix +++ b/nixos/modules/hardware/default.nix @@ -1,6 +1,7 @@ { imports = [ ./eid + ./fingerprint-scanner ./nvidia ./yubikey ]; diff --git a/nixos/modules/hardware/fingerprint-scanner/default.nix b/nixos/modules/hardware/fingerprint-scanner/default.nix new file mode 100644 index 0000000..b7580c6 --- /dev/null +++ b/nixos/modules/hardware/fingerprint-scanner/default.nix @@ -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"; + }; + }; +} + diff --git a/nixos/modules/hardware/nvidia/default.nix b/nixos/modules/hardware/nvidia/default.nix index f4a0248..e98ed6d 100644 --- a/nixos/modules/hardware/nvidia/default.nix +++ b/nixos/modules/hardware/nvidia/default.nix @@ -25,26 +25,31 @@ in { }; config = lib.mkIf cfg.enable { -# boot = { -# extraModprobeConfig = "options nvidia-drm modeset=1"; -# -# initrd.kernelModules = [ -# "nvidia" -# "nvidia_modeset" -# "nvidia_uvm" -# "nvidia_drm" -# ]; -# }; + boot = { + extraModprobeConfig = '' + options nvidia-drm modeset=1 + ''; + kernelParams = [ + "nvidia_drm.modeset=1" + ]; + }; hardware = { - opengl = { + graphics = { enable = true; - driSupport = true; - driSupport32Bit = true; + enable32Bit = true; + extraPackages = with pkgs; [ + intel-ocl + intel-compute-runtime + opencl-clhpp + opencl-clang + opencl-headers + ocl-icd + ]; }; nvidia = { - # Use the NVidia open source kernel module + # Use the NVidia open source kernel module (or not) open = false; package = config.boot.kernelPackages.nvidiaPackages.stable; # Modesetting is required. diff --git a/nixos/modules/hardware/yubikey/default.nix b/nixos/modules/hardware/yubikey/default.nix index 708b9c1..2134c87 100644 --- a/nixos/modules/hardware/yubikey/default.nix +++ b/nixos/modules/hardware/yubikey/default.nix @@ -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"; }; }; diff --git a/nixos/modules/networking/networkmanager/default.nix b/nixos/modules/networking/networkmanager/default.nix index 492e724..b47874e 100644 --- a/nixos/modules/networking/networkmanager/default.nix +++ b/nixos/modules/networking/networkmanager/default.nix @@ -6,7 +6,13 @@ in { options.sisyphus.networking.networkmanager.enable = lib.mkEnableOption "NetworkManager"; config = lib.mkIf cfg.enable { - networking.networkmanager.enable = true; + networking.networkmanager = { + enable = true; + + plugins = with pkgs; [ + networkmanager-openvpn + ]; + }; # Prevent slow boot times systemd.services.NetworkManager-wait-online.enable = false; diff --git a/nixos/modules/nix/flakes/default.nix b/nixos/modules/nix/flakes/default.nix index 3c5d892..aeaf3c1 100644 --- a/nixos/modules/nix/flakes/default.nix +++ b/nixos/modules/nix/flakes/default.nix @@ -9,6 +9,6 @@ in { extraOptions = '' experimental-features = nix-command flakes ''; - package = pkgs.nixFlakes; + package = pkgs.nixVersions.stable; }; } diff --git a/nixos/modules/programs/direnv/default.nix b/nixos/modules/programs/direnv/default.nix index ad16c7c..f974886 100644 --- a/nixos/modules/programs/direnv/default.nix +++ b/nixos/modules/programs/direnv/default.nix @@ -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. diff --git a/nixos/modules/programs/sops/default.nix b/nixos/modules/programs/sops/default.nix index 443eac9..c18f0fc 100644 --- a/nixos/modules/programs/sops/default.nix +++ b/nixos/modules/programs/sops/default.nix @@ -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"; diff --git a/nixos/modules/services/openrgb/default.nix b/nixos/modules/services/openrgb/default.nix index ae4fc51..15d1564 100644 --- a/nixos/modules/services/openrgb/default.nix +++ b/nixos/modules/services/openrgb/default.nix @@ -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 + ]; }; }; } diff --git a/nixos/modules/services/pipewire/default.nix b/nixos/modules/services/pipewire/default.nix index b83eedc..68985d3 100644 --- a/nixos/modules/services/pipewire/default.nix +++ b/nixos/modules/services/pipewire/default.nix @@ -29,10 +29,8 @@ in { # Headphone jack on laptop { "node.name" = "alsa_output.pci-0000_00_1f.3.analog-stereo"; } ]; - actions = { - update-props = { - "session.suspend-timeout-seconds" = 0; - }; + actions.update-props = { + "session.suspend-timeout-seconds" = 0; }; } ]; diff --git a/nixos/modules/virtualisation/docker/default.nix b/nixos/modules/virtualisation/docker/default.nix index 51b9319..b48ae5e 100644 --- a/nixos/modules/virtualisation/docker/default.nix +++ b/nixos/modules/virtualisation/docker/default.nix @@ -10,6 +10,8 @@ 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. diff --git a/nixos/modules/virtualisation/virtualbox/default.nix b/nixos/modules/virtualisation/virtualbox/default.nix index ccd8fca..3124493 100644 --- a/nixos/modules/virtualisation/virtualbox/default.nix +++ b/nixos/modules/virtualisation/virtualbox/default.nix @@ -1,4 +1,4 @@ -{ config, lib, pkgs, ... }: +{ config, lib, pkgs-unstable, ... }: let cfg = config.sisyphus.virtualisation.virtualbox; @@ -6,18 +6,19 @@ in { options.sisyphus.virtualisation.virtualbox.enable = lib.mkEnableOption "VirtualBox"; config = lib.mkIf cfg.enable { - virtualisation.virtualbox = { - host = { - enable = true; - enableExtensionPack = true; - }; - 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 = {}; diff --git a/nixos/overlays/spotify/default.nix b/nixos/overlays/spotify/default.nix index fc77396..84be4da 100644 --- a/nixos/overlays/spotify/default.nix +++ b/nixos/overlays/spotify/default.nix @@ -9,7 +9,7 @@ final: prev: { sha256 = "sha256-UzpHAHpQx2MlmBNKm2turjeVmgp5zXKWm3nZbEo0mYE="; }; - cargoHash = "sha256-oHfk68mAIcmOenW7jn71Xpt8hWVDtxyInWhVN2rH+kk="; + cargoHash = "sha256-oGpe+kBf6kBboyx/YfbQBt1vvjtXd1n2pOH6FNcbF8M="; buildInputs = with final; [ cargo diff --git a/nixos/secrets/HomeLab.yaml b/nixos/secrets/HomeLab.yaml index 9678afb..d39ba71 100644 --- a/nixos/secrets/HomeLab.yaml +++ b/nixos/secrets/HomeLab.yaml @@ -1,25 +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:Tfuba25e4hJ8Ovl1IdVtDvg0L0sCc9sYTXstRg89IAUzwv/1u8mxdj9ka6ZKaSQr2QUaNWs0BoPV36O4bI2hTwoqhUarhXXZNnJKHtd8xBu/+kfMSOMGa5qD9V9m3L5OFdt+gdwhJxemeQNkvN0Vhsu4DJFPZRPmGflJ2HVRYaRW4AsI+JPqiWSEeKz40f3PQPJ2h26gF+pADmPwtEfcUGZdGnJXUsiYMC0aBEWWxyAgBgj5W+Nbe+OCopEX1qyRcR8qO+LONjuC0b5hcGeOXjWj/d1FnBfxDHeoxRGhNCo8TUk0ap1mpSAttdr55/C51duQfeV09Iow4nzUR2H0jmzojUAjKXXCkBsK6yjIKxW+4+4OKCC9ERz5mDmu5Z+4aFM7CpSquCAnDVFw1Uq9MJqAnSz6AGh29J4LUwMnVNtf+gQwzGyl/C9wE/Svm0UAwP19h6hLcM1rp6bV4xjfSXNDspUkz4Xr3RdPpTI1PemtMZIq8fP64q0FlFZeV62ctl9hCtDVRDo3fG3FUM08fa0OfJpVYjSEAOfC,iv:T8z+P5++cES9Co9d/2tcU0PbxZZM/5x63tcxIjBeQ0I=,tag:AjsulFme64/xEPjgZQFtow==,type:str] + 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: - 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+IFgyNTUxOSBlL05vZHk2T1B6OHArUXlj + bEZWV0dUeVN0M3ZpeHdKcGlKV1RWYmRLM0FjCm9PLzBZTFo3RjhZTEhYMDBSN2Nj + aithQ2hpZXVCSngxcVBvQ2hKRzFXUEEKLS0tIE5rL0NHb1llRmlSQXVUeU8rVmNY + aEZHdDFEWUdxMzRVVjFhQWZmS04wRkkKrD2CiwdNcbK9s64omQ7xSA29J48HwIHa + ickyL/uorYhXmBKhqdvNq/j1Nb88LR9ti55Z7eecJNbyJb4OTtgzXQ== -----END AGE ENCRYPTED FILE----- - lastmodified: "2024-10-19T12:24:34Z" - mac: ENC[AES256_GCM,data:Bh/vHdsFCzk+YaRcZe/Eiq4xfLSDX1tSV4Jg8lFgzPqXCBwCgohDREZ8LSZPuQtStIugzyRNyPcnWrZcDwDiaS9klM5sIxjeGIF7ZDS81sQnQVNRyX/m9vl6AgVtP9KHgOpJwGObzuvNBE7XnOZ3q03/ah1LXRowJUn63wB4Qxk=,iv:GVLQUjm0bMHusD0F8gJ5DlZvqdDHPsT0VwxLhHh9ozE=,tag:cffv8wKTQ9UYrCPx+3zTMw==,type:str] - pgp: [] + - 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.8.1 + version: 3.10.2 diff --git a/nixos/secrets/UGent.yaml b/nixos/secrets/UGent.yaml index ee6240b..634ba65 100644 --- a/nixos/secrets/UGent.yaml +++ b/nixos/secrets/UGent.yaml @@ -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 diff --git a/nixos/secrets/personal.yaml b/nixos/secrets/personal.yaml index 1e520ab..8a60040 100644 --- a/nixos/secrets/personal.yaml +++ b/nixos/secrets/personal.yaml @@ -3,22 +3,26 @@ GitHub: 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: - 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+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] - pgp: [] unencrypted_suffix: _unencrypted version: 3.8.1 diff --git a/nixos/secrets/secrets.yaml b/nixos/secrets/secrets.yaml index 6c8e2ac..b5bf68e 100644 --- a/nixos/secrets/secrets.yaml +++ b/nixos/secrets/secrets.yaml @@ -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 diff --git a/nixos/users/tdpeuter/default.nix b/nixos/users/tdpeuter/default.nix index 035bccf..353a1d4 100644 --- a/nixos/users/tdpeuter/default.nix +++ b/nixos/users/tdpeuter/default.nix @@ -1,4 +1,4 @@ -{ config, lib, pkgs, pkgs-unstable, ... }: +{ config, inputs, lib, pkgs, pkgs-unstable, ... }: let cfg = config.sisyphus.users.tdpeuter; @@ -8,7 +8,7 @@ let cursor = { package = pkgs.phinger-cursors; - name = "phinger-cursors"; + name = "phinger-cursors-light"; size = 24; }; in { @@ -33,14 +33,61 @@ 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 + 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; [ + logseq # Note taking + ]) ++ [ + inputs.zen-browser.packages.${pkgs.system}.default + ]; }; fonts.packages = with pkgs; [ corefonts # Calibri for Uni + dejavu_fonts font-awesome # Dependency of Vifm & zsh config letter # Personal font - noto-fonts-cjk # Dependency of Zellij config noto-fonts # Dependency of Zellij config + noto-fonts-cjk-sans # Dependency of Zellij config + noto-fonts-cjk-serif # Dependency of Zellij config + noto-fonts-emoji noto-fonts-color-emoji # Emoji's! vistafonts # Microsoft fonts ]; @@ -58,49 +105,13 @@ in { homeDirectory = "/home/${user}"; inherit (config.system) stateVersion; - packages = (with pkgs; [ - cmdtime # Zsh plugin - icosystem # Personal icon theme - nextcloud-client - spotify-adblock - ]) ++ (with pkgs-unstable; [ - brave - chafa # Terminal image viewer - duf # Df alternative - feishin # Jellyfin music client - foot - fzf - glow # Terminal Markdown renderer - jellyfin-media-player - libreoffice-fresh # Office tools - # FIXME Waiting for electron version to update, now insecure. - # logseq # Note taking - mpv # Media player - 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 - # TODO Move to devshells - # ruff pylint # Python - ]); + # packages = (with pkgs; [ + # ]) ++ (with pkgs-unstable; [ + # ]); pointerCursor = { inherit (cursor) package name size; gtk.enable = true; - x11.enable = true; }; }; @@ -131,9 +142,12 @@ in { }; }; - gtk = { + services.syncthing = { enable = true; - cursorTheme = cursor; + extraOptions = [ + "--no-default-folder" + ]; + tray.enable = true; }; xdg = { diff --git a/nixos/users/tdpeuter/dotfiles.nix b/nixos/users/tdpeuter/dotfiles.nix index 9766b08..aca5ba8 100644 --- a/nixos/users/tdpeuter/dotfiles.nix +++ b/nixos/users/tdpeuter/dotfiles.nix @@ -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,11 @@ in { recursive = true; source = ../../../stow/git/.config/git; }; + ".config/hypr" = { + inherit (config.sisyphus.desktop.hyprland) enable; + recursive = true; + source = ../../../stow/hyprland/.config/hypr; + }; ".config/kitty" = { enable = false; recursive = true; @@ -58,7 +63,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 +71,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 +102,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; }; diff --git a/nixos/users/tdpeuter/firefox.nix b/nixos/users/tdpeuter/firefox.nix index 1ff9e4c..5bb0b46 100644 --- a/nixos/users/tdpeuter/firefox.nix +++ b/nixos/users/tdpeuter/firefox.nix @@ -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,14 +54,30 @@ in { ]; }; + 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; + "GitHub" = { + urls = [{ + template = "https://github.com/search"; + params = [ + { name = "q"; value = "{searchTerms}"; } + { name = "type"; value = "repositories"; } + ]; + }]; + + icon = "${pkgs.icosystem}/share/icons/icosystem/scalable/apps/github-mark.svg"; + definedAliases = [ "@gh" ]; + }; "Nix Packages" = { urls = [{ template = "https://search.nixos.org/packages"; @@ -58,17 +101,15 @@ in { icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; definedAliases = [ "@no" ]; }; - "GitHub" = { + "Google Scholar" = { urls = [{ - template = "https://github.com/search"; + template = "https://scholar.google.ch/scholar"; params = [ { name = "q"; value = "{searchTerms}"; } - { name = "type"; value = "repositories"; } ]; }]; - icon = "${pkgs.icosystem}/share/icons/icosystem/scalable/apps/github-mark.svg"; - definedAliases = [ "@gh" ]; + definedAliases = [ "@gs" ]; }; }; }; diff --git a/nixos/users/tdpeuter/mail.nix b/nixos/users/tdpeuter/mail.nix index d6b4928..2e05b4b 100644 --- a/nixos/users/tdpeuter/mail.nix +++ b/nixos/users/tdpeuter/mail.nix @@ -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 ''; @@ -61,7 +65,7 @@ in { realName = config.users.users.tdpeuter.description; signature = { showSignature = "append"; - text = signatures.UGent; + text = signatures.academic; }; thunderbird = { @@ -69,7 +73,7 @@ in { settings = id: { "mail.server.server_${id}.authMethod" = 10; "mail.smtpserver.smtp_${id}.authMethod" = 10; - "mail.identity.id_${id}.htmlSigText" = signatures.UGent; + "mail.identity.id_${id}.htmlSigText" = signatures.academic; # Allow PGP "mail.identity.id_${id}.openpgp_key_id" = "9B11F5243089DB5B"; # Your 'master' key @@ -109,7 +113,7 @@ in { 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; + "mail.identity.id_${id}.htmlSigText" = signatures.alias; }; }; }; diff --git a/nixos/users/tdpeuter/secrets.nix b/nixos/users/tdpeuter/secrets.nix index 75939f3..fd1a363 100644 --- a/nixos/users/tdpeuter/secrets.nix +++ b/nixos/users/tdpeuter/secrets.nix @@ -32,8 +32,17 @@ in { "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; }); }; } diff --git a/scripts/do-not-disturb.sh b/scripts/do-not-disturb.sh deleted file mode 100755 index c9c5f21..0000000 --- a/scripts/do-not-disturb.sh +++ /dev/null @@ -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 diff --git a/scripts/sunset.sh b/scripts/sunset.sh deleted file mode 100755 index f185115..0000000 --- a/scripts/sunset.sh +++ /dev/null @@ -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 diff --git a/scripts/toggle-light-dark.sh b/scripts/toggle-light-dark.sh index 80e4d0d..c4667bf 100755 --- a/scripts/toggle-light-dark.sh +++ b/scripts/toggle-light-dark.sh @@ -30,10 +30,6 @@ declare -A wallpaper wallpaper[${THEME_LIGHT}]="bg-light" wallpaper[${THEME_DARK}]="bg-dark" -declare -A icon -icon[${THEME_LIGHT}]="\uf185" -icon[${THEME_DARK}]="\uf186" - ############# ### Logic ### ############# @@ -58,8 +54,8 @@ while getopts ":m:g" option; do class='activated' percentage=100 fi - printf '{"text": "%s", "alt": "%s", "tooltip": "Set theme to %s", "percentage": %d, "class": "%s"}' \ - "${icon[${current_state}]}" "${gsettings_alt[${next_state}]}" "${next_state}" "${percentage:=0}" "${class:="none"}" + printf '{"alt": "%s", "tooltip": "Set theme to %s", "percentage": %d, "class": "%s"}' \ + "${gsettings_alt[${current_state}]}" "${next_state}" "${percentage:=0}" "${class:="none"}" exit 0 ;; *) diff --git a/scripts/toggle-nightlight.sh b/scripts/toggle-nightlight.sh new file mode 100755 index 0000000..b4902b0 --- /dev/null +++ b/scripts/toggle-nightlight.sh @@ -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 diff --git a/scripts/toggle-notifications.sh b/scripts/toggle-notifications.sh new file mode 100755 index 0000000..fe5624a --- /dev/null +++ b/scripts/toggle-notifications.sh @@ -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 diff --git a/scripts/toggle-tailscale.sh b/scripts/toggle-tailscale.sh new file mode 100755 index 0000000..6f79489 --- /dev/null +++ b/scripts/toggle-tailscale.sh @@ -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": "%q", "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 diff --git a/stow/foot/.config/foot/foot.ini b/stow/foot/.config/foot/foot.ini index 51fdc7e..efcd8d9 100644 --- a/stow/foot/.config/foot/foot.ini +++ b/stow/foot/.config/foot/foot.ini @@ -29,7 +29,7 @@ dpi-aware=yes # initial-window-size-pixels=700x500 # Or, # initial-window-size-chars= # initial-window-mode=windowed -pad=10x10 # optionally append 'center' +#pad=10x10 # optionally append 'center' # resize-delay-ms=100 # notify=notify-send -a ${app-id} -i ${app-id} ${title} ${body} diff --git a/stow/gnupg/.gnupg/gpg-agent.conf b/stow/gnupg/.gnupg/gpg-agent.conf new file mode 100644 index 0000000..a11a3bd --- /dev/null +++ b/stow/gnupg/.gnupg/gpg-agent.conf @@ -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 diff --git a/stow/gnupg/.gnupg/gpg.conf b/stow/gnupg/.gnupg/gpg.conf new file mode 100644 index 0000000..bb37abf --- /dev/null +++ b/stow/gnupg/.gnupg/gpg.conf @@ -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 diff --git a/stow/gnupg/.gnupg/scdaemon.conf b/stow/gnupg/.gnupg/scdaemon.conf new file mode 100644 index 0000000..9f0e146 --- /dev/null +++ b/stow/gnupg/.gnupg/scdaemon.conf @@ -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 + diff --git a/stow/hyprland/.config/hypr/docked.conf b/stow/hyprland/.config/hypr/docked.conf new file mode 100644 index 0000000..ea4034f --- /dev/null +++ b/stow/hyprland/.config/hypr/docked.conf @@ -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 diff --git a/stow/hyprland/.config/hypr/hy3.conf b/stow/hyprland/.config/hypr/hy3.conf new file mode 100644 index 0000000..ef08fda --- /dev/null +++ b/stow/hyprland/.config/hypr/hy3.conf @@ -0,0 +1,165 @@ + +# TODO Do not hardcode this path +#plugin = /nix/store/afivj8v5kfdsadxs4pa45vh0y65s3ajm-hy3-hl0.49.0/lib/libhy3.so +plugin = /nix/store/fvy4gwas10pvww67gxc3da08kn2w3pm7-hy3-0.51.0/lib/libhy3.so + +general:layout = hy3 + +plugin { + hy3 { + # disable gaps when only one window is onscreen + # 0 - always show gaps + # 1 - hide gaps with a single window onscreen + # 2 - 1 but also show the window border + no_gaps_when_only = 1 # default: 0 + + # 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 # default: 2 + + # offset from group split direction when only one window is in a group + group_inset = 10 # default: 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 # default: 22 + + # padding between the tab bar and its focused node + padding = 0 # default: 6 + + # the tab bar should animate in/out from the top instead of below the window + from_top = false # default: false + + # radius of tab bar corners + radius = 0 # default: 6 + + # tab bar border width + border_width = 2 # default: 2 + + # render the window title on the bar + render_text = false # default: true + + # center the window title + text_center = true # default: true + + # font to render the window title with + text_font = Sans # default: Sans + + # height of the window title + text_height = 8 # default: 8 + + # left padding of the window title + text_padding = 3 # default: 3 + + # active tab bar segment colors + #col.active = # default: rgba(33ccff40) + #col.active.border = # default: rgba(33ccffee) + #col.active.text = # default: rgba(ffffffff) + + # active tab bar segment colors for bars on an unfocused monitor + #col.active_alt_monitor = # default: rgba(60606040) + #col.active_alt_monitor.border = # default: rgba(808080ee) + #col.active_alt_monitor.text = # default: rgba(ffffffff) + + # focused tab bar segment colors (focused node in unfocused container) + #col.focused = # default: rgba(60606040) + #col.focused.border = # default: rgba(808080ee) + #col.focused.text = # default: rgba(ffffffff) + + # inactive tab bar segment colors + col.inactive = rgba(a6a6a620) # default: rgba(30303020) + col.inactive.border = rgba(a6a6a6aa) # default: rgba(606060aa) + #col.inactive.text = # default: rgba(ffffffff) + + # urgent tab bar segment colors + #col.urgent = # default: rgba(ff223340) + #col.urgent.border = # default: rgba(ff2233ee) + #col.urgent.text = # default: rgba(ffffffff) + + # urgent tab bar segment colors + #col.locked = # default: rgba(90903340) + #col.locked.border = # default: rgba(909033ee) + #col.locked.text = # default: rgba(ffffffff) + + # if tab backgrounds should be blurred + # Blur is only visible when the above colors are not opaque. + blur = true # default: true + + # opacity multiplier for tabs + # Applies to blur as well as the given colors. + opacity = 1.0 # default: 1.0 + } + + # autotiling settings + autotile { + # enable autotile + enable = true # default: false + + # make autotile-created groups ephemeral + ephemeral_groups = true # default: 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 + # = pixel width to split at + trigger_width = -1 # default: 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 + # = pixel height to split at + trigger_height = 0 # default: 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: all + } + } +} + +# Keybinds + +# Navigation + +# Focus + +# First, unbind default +unbind = $flag, $up +unbind = $flag, $right +unbind = $flag, $down +unbind = $flag, $left + +unbind = $flag, up +unbind = $flag, right +unbind = $flag, down +unbind = $flag, left + +bind = $flag, $up, hy3:movefocus, u +bind = $flag, $right, hy3:movefocus, r +bind = $flag, $down, hy3:movefocus, d +bind = $flag, $left, hy3:movefocus, l + +bind = $flag, up, hy3:movefocus, u +bind = $flag, right, hy3:movefocus, r +bind = $flag, down, hy3:movefocus, d +bind = $flag, left, hy3:movefocus, l + +# Layout +bind = $flag, z, hy3:changegroup, opposite +bind = $flag, x, hy3:changegroup, toggletab +bind = $flag, c, hy3:changegroup, h +bind = $flag, v, hy3:changegroup, v + +bind = $flag, p, hy3:changefocus, raise +bind = $flag+Shift, p, hy3:changefocus, lower +bind = $flag, space, hy3:togglefocuslayer + diff --git a/stow/hyprland/.config/hypr/hyprland.conf b/stow/hyprland/.config/hypr/hyprland.conf new file mode 100644 index 0000000..9907aca --- /dev/null +++ b/stow/hyprland/.config/hypr/hyprland.conf @@ -0,0 +1,278 @@ +# ~/.config/hypr/hyperland.conf + +general { + border_size = 1 + no_border_on_floating = false + + gaps_in = 3 + gaps_out = 5 + gaps_workspaces = 0 + + col.inactive_border = 0xff444444 + col.active_border = 0xffffffff + col.nogroup_border = 0xffff00ff + + 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 + + snap { + enabled = false + window_gap = 10 + monitor_gap = 10 + border_overlap = false + } +} + +decoration { + rounding = 0 + # rounding_power = 4.0 + + active_opacity = 1.0 + inactive_opacity = 1.0 + fullscreen_opacity = 1.0 + dim_inactive = false + dim_strength = 0.5 + dim_special = 0.2 + dim_around = 0.4 + + blur { + enabled = true + + size = 8 + passes = 1 + noise = 0.01 + contrast = 0.8 + brightness = 0.8 + vibrancy = 0.0 + vibrancy_darkness = 0.0 + + ignore_opacity = true + new_optimizations = true + xray = true + special = false + popups = false + # input_methods = false + } + + shadow { + enabled = false + + range = 4 + render_power = 3 + sharp = false + + ignore_window = true + + color = 0xee1a1a1a + color_inactive = 0xee1a1a1a + # offset = [0,0] + scale = 1.0 + } +} + +animations { + enabled = false + first_launch_animation = true +} + +gestures { + workspace_swipe_distance = 300 + workspace_swipe_invert = true + workspace_swipe_min_speed_to_force = 30 + workspace_swipe_cancel_ratio = 0.2 + workspace_swipe_direction_lock = true + workspace_swipe_direction_lock_threshold = 10 + + workspace_swipe_touch = false + workspace_swipe_touch_invert = false + + workspace_swipe_create_new = false + + workspace_swipe_forever = true + + workspace_swipe_use_r = false + + #close_max_timeout = 1000 +} + +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 = 0x66ffff00 + col.border_inactive = 0x66777700 + col.border_locked_active = 0x66ff5500 + col.border_locked_inactive = 0x66775500 + + groupbar { + enabled = true + font_family = misc:font_family + font_size = 8 + gradients = true + height = 14 + stacked = false + priority = 3 + render_titles = false + scrolling = true + + text_color = 0xffffffff + + col.active = 0x66ffff00 + col.inactive = 0x66777700 + col.locked_active = 0x66ff5500 + col.locked_inactive = 0x66775500 + } +} + +misc { + disable_hyprland_logo = true + disable_splash_rendering = true + + col.splash = 0xffffffff + + font_family = Letter + # splash_font_family = + force_default_wallpaper = -1 + vfr = true + vrr = 1 + mouse_move_enables_dpms = false + key_press_enables_dpms = 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 = + # swallow_exception_regex = + focus_on_activate = true + mouse_move_focuses_monitor = true + render_ahead_of_time = false + render_ahead_safezone = 1 + allow_session_lock_restore = false + background_color = 0x018281 + close_special_on_empty = true + new_window_takes_over_fullscreen = 2 + exit_window_retains_fullscreen = false + initial_workspace_tracking = 1 + middle_click_paste = false + render_unfocused_fps = 12 + disable_xdg_env_checks = false + # disable_hyprland_qtutils_check = false + # lockdead_screen_delay = 1000 +} + +binds { + pass_mouse_when_bound = false + scroll_event_delay = 300 + workspace_back_and_forth = false + allow_workspace_cycles = false + workspace_center_on = 1 + focus_preferred_method = 0 + ignore_group_lock = false + # movefocus_cycles_fullscreen = true + # movefocus_cycles_groupfirst = false + disable_keybind_grabbing = false + window_direction_monitor_fallback = true + # allow_pin_fullscreen = true +} + +xwayland { + enabled = true + use_nearest_neighbor = true + force_zero_scaling = false +} + +opengl { + nvidia_anti_flicker = false +} + +render { + explicit_sync = 2 + explicit_sync_kms = 2 + direct_scanout = false + expand_undersized_textures = true + # xp_mode = false + # ctm_animation = 2 + # allow_early_buffer_release = true +} + +cursor { + sync_gsettings_theme = true + no_hardware_cursors = false + no_break_fs_vrr = false + min_refresh_rate = 24 + hotspot_padding = 1 + inactive_timeout = 10 + no_warps = false + persistent_warps = false + warp_on_change_workspace = 0 + # default_monitor = + zoom_factor = 1.0 + zoom_rigid = false + # enable_hypercursor = false + hide_on_key_press = true + hide_on_touch = true + # use_cpu_buffer = 2 + # warp_back_after_non_mouse_input = false +} + +ecosystem { + # no_update_news = false + # no_donation_nag = true +} + +exec-once = gnome-keyring-daemon --start --components=secrets +exec-once = dunst --verbosity crit +exec-once = waycorner +exec-once = waybar + +# TODO Replace with something else? +exec-once = wlsunset -t 2500 -l 50.51 -L 4.21 + +exec-once = nextcloud --background + +# Turn volume off at boot +exec-once = bash -c 'for i in $(seq 1 10); do pactl set-sink-mute @DEFAULT_SINK@ 1 && break; sleep 1; done' + +# STYLING +exec-once = swaybg -i "${HOME}/.local/state/sisyphus/bg" --mode=fill +env = XCURSOR_SIZE,24 + +# SHIFT CAPS CTRL/CONTROL ALT MOD2 MOD3 SUPER/WIN/LOGO/MOD4 MOD5 +$flag = MOD4 + +$left = h +$down = j +$up = k +$right = l + +$term = foot +$menu = j4-dmenu-desktop --dmenu="rofi -dmenu -i" --no-generic --usage-log="/home/tdpeuter/.local/state/dmenu.log" --term=$term +$lock = swaylock --daemonize + +# https://wiki.hyprland.org/Nvidia/#environment-variables +env = __GLX_VENDOR_LIBRARY_NAME,nvidia +env = LIBVA_DRIVER_NAME,nvidia +env = NVD_BACKEND,direct + +source = /home/tdpeuter/.config/hypr/input-output.conf +source = /home/tdpeuter/.config/hypr/keybinds.conf +source = /home/tdpeuter/.config/hypr/modes.conf +source = /home/tdpeuter/.config/hypr/hy3.conf # Sway tiling plugin + diff --git a/stow/hyprland/.config/hypr/input-output.conf b/stow/hyprland/.config/hypr/input-output.conf new file mode 100644 index 0000000..3c04c15 --- /dev/null +++ b/stow/hyprland/.config/hypr/input-output.conf @@ -0,0 +1,62 @@ +# ~/.config/hypr/input-output.conf + +input { + kb_layout = us,be,us + kb_variant = altgr-intl,iso-alternate,dvorak + + 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 + + left_handed = false + scroll_method = 2fg + scroll_button_lock = true + scroll_factor = 1.0 + natural_scroll = false + + follow_mouse = 2 + 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 = false + tap-and-drag = true + } +} + +device { + name = at-translated-set-2-keyboard + numlock_by_default = false +} + +monitor = , preferred, auto, 1 + +monitor = desc:BOE 0x08CF, preferred, 640x1440, 1 +monitor = desc:Hewlett Packard HP ZR2740w CNT319Y008, preferred, auto-up, 1 +# Vertical monitors +monitor = desc:Dell Inc. DELL P2214H 29C2937M4YTL, preferred, auto-right, 1, transform, 1 +monitor = desc:Samsung Electric Company S22C650, preferred, auto-right, 1, transform, 1 + +# TV +monitor = desc:Samsung Electric Company SAMSUNG, disable + +bindl = , switch:on:Lid Switch, exec, hyprctl keyword monitor "eDP-1, disable" +bindl = , switch:off:Lid Switch, exec, hyprctl keyword monitor "eDP-1, enable" + diff --git a/stow/hyprland/.config/hypr/keybinds.conf b/stow/hyprland/.config/hypr/keybinds.conf new file mode 100644 index 0000000..1a4f1e1 --- /dev/null +++ b/stow/hyprland/.config/hypr/keybinds.conf @@ -0,0 +1,180 @@ +$notify = "${SCRIPT_DIR}/notify.sh" + +# Navigation + +# Focus +bind = $flag, $up, movefocus, u +bind = $flag, $right, movefocus, r +bind = $flag, $down, movefocus, d +bind = $flag, $left, movefocus, l + +bind = $flag, up, movefocus, u +bind = $flag, right, movefocus, r +bind = $flag, down, movefocus, d +bind = $flag, left, movefocus, l + +# Move windows +bind = $flag+Shift, $up, movewindow, u +bind = $flag+Shift, $right, movewindow, r +bind = $flag+Shift, $down, movewindow, d +bind = $flag+Shift, $left, movewindow, l + +bind = $flag+Shift, up, movewindow, u +bind = $flag+Shift, right, movewindow, r +bind = $flag+Shift, down, movewindow, d +bind = $flag+Shift, left, movewindow, l + +# $flag+Next move scratchpad +# $flag+KP_Next move scratchpad +# $flag+Prior scratchpad show +# $flag+KP_Prior scratchpad show +bind = $flag, Next, movetoworkspace, special:scratchpad +bind = $flag, KP_Next, movetoworkspace, special:scratchpad + +bind = $flag, Prior, togglespecialworkspace, special:scratchpad +bind = $flag, Prior, movetoworkspace, special:scratchpad +bind = $flag, Prior, togglespecialworkspace, special:scratchpad + +# bind = $flag, Next, movetoworkspace, special:magic +# bind = $flag, Next, togglespecialworkspace, magic + +# bind = $flag, KP_Next, togglespecialworkspace, magic +# bind = $flag, KP_Next, movetoworkspace, +0 +# bind = $flag, KP_Next, togglespecialworkspace, magic +# bind = $flag, KP_Next, movetoworkspace, special:magic +# bind = $flag, KP_Next, togglespecialworkspace, magic + +# Layouts +bind = $flag, f, togglefloating +bind = $flag+Shift, f, settiled + +bind = $flag, s, pin +bind = $flag, s, setfloating +bind = $flag+Shift, s, pin +bind = $flag+Shift, s, settiled + +bind = $flag, F11, fullscreen, 1 +bind = $flag+Shift, F11, fullscreen, 0 + +# Workspaces + +$ws1 = 1 +$ws2 = 2 +$ws3 = 3 +$ws4 = 4 +$ws5 = 5 +$ws6 = 6 +$ws7 = 7 +$ws8 = 8 +$ws9 = 9 +$ws10 = 10 +$ws11 = 11 +$ws12 = 12 + +# Focus a specific workspace +bind = $flag, 1, workspace, $ws1 +bind = $flag, 2, workspace, $ws2 +bind = $flag, 3, workspace, $ws3 +bind = $flag, 4, workspace, $ws4 +bind = $flag, 5, workspace, $ws5 +bind = $flag, 6, workspace, $ws6 +bind = $flag, 7, workspace, $ws7 +bind = $flag, 8, workspace, $ws8 +bind = $flag, 9, workspace, $ws9 +bind = $flag, 0, workspace, $ws10 +bind = $flag, minus, workspace, $ws11 +bind = $flag, equal, workspace, $ws12 + +# Move window to a specific workspace +bind = $flag+Shift, 1, movetoworkspace, $ws1 +bind = $flag+Shift, 2, movetoworkspace, $ws2 +bind = $flag+Shift, 3, movetoworkspace, $ws3 +bind = $flag+Shift, 4, movetoworkspace, $ws4 +bind = $flag+Shift, 5, movetoworkspace, $ws5 +bind = $flag+Shift, 6, movetoworkspace, $ws6 +bind = $flag+Shift, 7, movetoworkspace, $ws7 +bind = $flag+Shift, 8, movetoworkspace, $ws8 +bind = $flag+Shift, 9, movetoworkspace, $ws9 +bind = $flag+Shift, 0, movetoworkspace, $ws10 +bind = $flag+Shift, Minus, movetoworkspace, $ws11 +bind = $flag+Shift, Equal, movetoworkspace, $ws12 + +# Go through workspaces in order +bind = $flag+Ctrl, $left, workspace, e-1 +bind = $flag+Ctrl, $right, workspace, e+1 + +bind = $flag+Ctrl, left, workspace, e-1 +bind = $flag+Ctrl, right, workspace, e+1 + +bind = $flag+Ctrl+Shift, $left, movetoworkspace, e-1 +bind = $flag+Ctrl+Shift, $right, movetoworkspace, e+1 + +bind = $flag+Ctrl+Shift, left, movetoworkspace, e-1 +bind = $flag+Ctrl+Shift, right, movetoworkspace, e+1 + +# GNOME-like keybinds +bind = $flag+Alt, $left, workspace, e-1 +bind = $flag+Alt, $right, workspace, e+1 + +bind = $flag+Alt, left, workspace, e-1 +bind = $flag+Alt, right, workspace, e+1 + +bind = $flag+Alt+Shift, $left, movetoworkspace, e-1 +bind = $flag+Alt+Shift, $right, movetoworkspace, e+1 + +bind = $flag+Alt+Shift, left, movetoworkspace, e-1 +bind = $flag+Alt+Shift, right, movetoworkspace, e+1 + +# System + +# Brightness +bind = , XF86MonBrightnessDown, exec, brightnessctl -e s 5%- && $notify -b +bind = , XF86MonBrightnessUp, exec, brightnessctl -e s +5% && $notify -b + +# Audio +bind = , XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 2%+ && $notify -v +bind = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%- && $notify -v +bind = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle && $notify -v +bind = , XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle + +# Media +bind = , XF86AudioPlay, exec, playerctl play-pause +bind = , XF86AudioPrev, exec, playerctl previous +bind = , XF86AudioNext, exec, playerctl next + +bind = Shift, XF86AudioMute, exec, playerctl play-pause +bind = Shift, XF86AudioLowerVolume, exec, playerctl previous +bind = Shift, XF86AudioRaiseVolume, exec, playerctl next + +# Other special keys +bind = , XF86Calculator, exec, qalculate-gtk + +# Shortcuts + +# Reload +bind = Alt+Shift, r, exec, "hyperctl reload" +bind = Ctrl+Alt+Shift, r, forcerendererreload +bind = Alt+Shift, e, exit + +# Kill a window +bind = $flag, q, closewindow, activewindow + +# Start a terminal +bind = $flag, Return, exec, $term +bind = CTRL&ALT, T, exec, $term +# Application menu +bind = Alt, Space, exec, $menu +bind = Alt, Tab, focuscurrentorlast + +bind = $flag, e, exec, $term -e vifm +bind = Ctrl+Shift, Escape, exec, $term -e zenith + +bind = Ctrl+Shift, a, exec, notify-send "hole!" && hyprctl setcursor _ 87 && sleep 5 && hyprctl setcursor _ 24 + +# bind = $flag, mouse_up, movefocus, l +bind = SUPER, mouse_down, workspace, e-1 +bind = SUPER, mouse_up, workspace, e+1 +# bind = $flag, mouse_down, movefocus, r + +bind = $flag, Delete, exec, $lock + diff --git a/stow/hyprland/.config/hypr/modes.conf b/stow/hyprland/.config/hypr/modes.conf new file mode 100644 index 0000000..81d90af --- /dev/null +++ b/stow/hyprland/.config/hypr/modes.conf @@ -0,0 +1,100 @@ +# Resizing +$mode_resize = Resize +bind = $flag, R, submap, $mode_resize +submap = $mode_resize + +bind = , $right, resizeactive, 10 0 +bind = , $up, resizeactive, 0 -10 +bind = , $left, resizeactive, -10 0 +bind = , $down, resizeactive, 0 10 + +bind = , Right , resizeactive, 10 0 +bind = , Up, resizeactive, 0 -10 +bind = , Left, resizeactive, -10 0 +bind = , Down, resizeactive, 0 10 + +bind = Shift, $right, resizeactive, 50 0 +bind = Shift, $up, resizeactive, 0 -50 +bind = Shift, $left, resizeactive, -50 0 +bind = Shift, $down, resizeactive, 0 50 + +bind = Shift, Right , resizeactive, 50 0 +bind = Shift, Up, resizeactive, 0 -50 +bind = Shift, Left, resizeactive, -50 0 +bind = Shift, Down, resizeactive, 0 50 + +bind = $flag, $right, moveactive, 10 0 +bind = $flag, $up, moveactive, 0 -10 +bind = $flag, $left, moveactive, -10 0 +bind = $flag, $down, moveactive, 0 10 + +bind = $flag, Right , moveactive, 10 0 +bind = $flag, Up, moveactive, 0 -10 +bind = $flag, Left, moveactive, -10 0 +bind = $flag, Down, moveactive, 0 10 + +bind = $flag+Shift, $right, moveactive, 50 0 +bind = $flag+Shift, $up, moveactive, 0 -50 +bind = $flag+Shift, $left, moveactive, -50 0 +bind = $flag+Shift, $down, moveactive, 0 50 + +bind = $flag+Shift, Right , moveactive, 50 0 +bind = $flag+Shift, Up, moveactive, 0 -50 +bind = $flag+Shift, Left, moveactive, -50 0 +bind = $flag+Shift, Down, moveactive, 0 50 + +gesture = 3, swipe, move +gesture = 4, swipe, resize + +bind = $flag, R, submap, reset +bind = , Escape, submap, reset +bind = , Return, submap, reset + +submap = reset + +# System actions +$mode_system = System (l)ock, (s)leep, (h)ibernate, (r)eboot, (Shift+s)hutdown +bind = Ctrl+Alt, Delete, submap, $mode_system +submap = $mode_system + +bind = , l, exec, $lock +bind = , l, submap, reset +bind = , s, exec, $lock, exec, systemctl suspend +bind = , s, submap, reset +bind = , h, exec, $lock, exec, systemctl hibernate +bind = , h, submap, reset +bind = , r, exec, systemctl reboot +bind = Shift, s, exec, systemctl poweroff -i + +bind = Ctrl+Alt, Delete, submap, reset +bind = , Escape, submap, reset +bind = , Return, submap, reset + +submap = reset + +# Launcher +$mode_launcher = Launch (f)irefox, (t)hunderbird, (l)ogseq. +bind = $flag, O, submap, $mode_launcher +submap = $mode_launcher + +bind = , F, exec, firefox +bind = , F, submap, reset +bind = , L, exec, logseq +bind = , L, submap, reset +bind = , T, exec, thunderbird +bind = , T, submap, reset + +bind = $flag, O, submap, reset +bind = , Escape, submap, reset +bind = , Return, submap, reset + +submap = reset + +# Ignore (all) keybinds. Useful when working with Virtual Machines. +$mode_ignore=Ignore keybinds - Press Control+Alt+Insert to escape. +bind = Ctrl+Alt, Insert, submap, $mode_ignore +submap = $mode_ignore + +bind = Ctrl+Alt, Insert, submap, reset + +submap = reset diff --git a/stow/hyprland/.config/hypr/monitors.conf b/stow/hyprland/.config/hypr/monitors.conf new file mode 100644 index 0000000..4b551d3 --- /dev/null +++ b/stow/hyprland/.config/hypr/monitors.conf @@ -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 diff --git a/stow/hyprland/.config/hypr/undocked.conf b/stow/hyprland/.config/hypr/undocked.conf new file mode 100644 index 0000000..6f27cc4 --- /dev/null +++ b/stow/hyprland/.config/hypr/undocked.conf @@ -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 + diff --git a/stow/hyprland/.config/hypr/workspaces.conf b/stow/hyprland/.config/hypr/workspaces.conf new file mode 100644 index 0000000..e69de29 diff --git a/stow/ssh/.ssh/config b/stow/ssh/.ssh/config index d3f6834..ea3df8e 100644 --- a/stow/ssh/.ssh/config +++ b/stow/ssh/.ssh/config @@ -31,14 +31,59 @@ Host subgit.ugent.be CanonicalizeHostname yes # Ignore capitalization # 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.14 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 admin + Hostname 192.168.0.92 + IdentitiesOnly yes + IdentityFile /run/secrets/HomeLab/Nixos/admin/ssh diff --git a/stow/sway/.config/sway/config b/stow/sway/.config/sway/config index 922a75b..e10c9dc 100644 --- a/stow/sway/.config/sway/config +++ b/stow/sway/.config/sway/config @@ -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 diff --git a/stow/sway/.config/sway/modes b/stow/sway/.config/sway/modes index 074dab5..d62608f 100644 --- a/stow/sway/.config/sway/modes +++ b/stow/sway/.config/sway/modes @@ -7,40 +7,49 @@ set $default "default" # Resizing 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 +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 - $flag+r mode $default - Escape mode $default - Return 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 @@ -94,8 +103,8 @@ mode $mode_screenshot bindsym { set $mode_launcher "Launch (f)irefox, (s)potify or (t)hunderbird." bindsym $flag+o mode $mode_launcher mode $mode_launcher bindsym { - f exec firefox - t exec thunderbird + f exec firefox, mode $default + t exec thunderbird, mode $default $flag+o mode $default Escape mode $default diff --git a/stow/sway/.config/sway/style b/stow/sway/.config/sway/style index 7377b3b..8aea2fc 100644 --- a/stow/sway/.config/sway/style +++ b/stow/sway/.config/sway/style @@ -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 diff --git a/stow/swaylock/.config/swaylock/config b/stow/swaylock/.config/swaylock/config index 96b053f..a5ecd8a 100644 --- a/stow/swaylock/.config/swaylock/config +++ b/stow/swaylock/.config/swaylock/config @@ -2,21 +2,23 @@ # .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 - -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 +image=${ASSETS_DIR}/bluescreen.png # Styling diff --git a/stow/vim/.vimrc b/stow/vim/.vimrc index 379ddb4..bd87fe5 100644 --- a/stow/vim/.vimrc +++ b/stow/vim/.vimrc @@ -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 diff --git a/stow/waybar/.config/waybar/config b/stow/waybar/.config/waybar/config deleted file mode 100644 index 3b1a053..0000000 --- a/stow/waybar/.config/waybar/config +++ /dev/null @@ -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"], - "modules-center": ["clock"], - "modules-right": ["privacy", "keyboard-state"], - - "include": [ - // Import modules (!) - "~/.config/waybar/modules.json" - ], -}] - diff --git a/stow/waybar/.config/waybar/config.jsonc b/stow/waybar/.config/waybar/config.jsonc new file mode 100644 index 0000000..addef9e --- /dev/null +++ b/stow/waybar/.config/waybar/config.jsonc @@ -0,0 +1,64 @@ +/* * * * * * * * * * * * * * * * * + * * + * ~/.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": [ + "keyboard-state#numlock", + "keyboard-state#capslock", + "privacy", + "tray", + "group/control-center", + "group/display", + "group/network", + "pulseaudio", + "group/power", + "clock#bar" + ], + "include": [ + "~/.config/waybar/modules.json" + ], + "reload_style_on_change": true + } +] diff --git a/stow/waybar/.config/waybar/left.json b/stow/waybar/.config/waybar/left.json index 8ab0639..86b9a00 100644 --- a/stow/waybar/.config/waybar/left.json +++ b/stow/waybar/.config/waybar/left.json @@ -2,16 +2,15 @@ "modules-left": [ "sway/workspaces", "custom/scratchpad-indicator", - "mpris", "group/system" ], "modules-right": [ - "group/hardware", + "tray", + "sway/language", "bluetooth", "network", "pulseaudio", "group/battery", - "custom/sep", - "tray" + "mpris" ] } diff --git a/stow/waybar/.config/waybar/modern.css b/stow/waybar/.config/waybar/modern.css new file mode 100644 index 0000000..35ce570 --- /dev/null +++ b/stow/waybar/.config/waybar/modern.css @@ -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; +} + diff --git a/stow/waybar/.config/waybar/modules.json b/stow/waybar/.config/waybar/modules.json index 026ad07..683d70b 100644 --- a/stow/waybar/.config/waybar/modules.json +++ b/stow/waybar/.config/waybar/modules.json @@ -1,149 +1,277 @@ { + "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": "\uf294", - "format-off": "\uf294", - "format-on": "\uf294", - "format-connected": "\uf294c", + "format-disabled": "\uf294", /*  */ + "format-off": "\uf294", /*  */ + "format-on": "\uf294", /*  */ + "format-connected": "\uf294c", /* 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": "{:%Y %B}\n{calendar}" + "tooltip-format": "{:%Y %B}\n{calendar}", + "calendar": { + "mode": "month", + "week-pos": "left", + "format": { + /* Highlight todays date. */ + "today": "{}" + } + }, + "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": "{:%Y %B}\n{calendar}", + "calendar": { + "mode-mon-col": 3, + "on-scroll": 1, + "format": { + /* Highlight today's date. */ + "today": "{}" + } + }, + "actions": { + "on-click": "mode" + } }, - "custom/light-dark-toggle": { - "exec": "bash ${SCRIPT_DIR}/toggle-light-dark.sh -g", - "exec-on-event": true, - "on-click": "bash ${SCRIPT_DIR}/toggle-light-dark.sh", - // "format": "\uf042 ", - "format": "{icon}", - "format-icons": [ - "\uf185", - "\uf111" - ], - "tooltip": true, - "tooltip-format": "Toggle between light and dark mode" + "custom/control-center": { + "format": "\uf085", /*  */ + "tooltip": false }, - "custom/keyboard-switch": { - "format": "\uf11c", - "on-click": "swaymsg input type:keyboard xkb_switch_layout next", - "tooltip-format": "Toggle keyboard layouts", - "tooltip": true + "custom/display": { + "format": "\ue163", /*  */ + "tooltip": false, + "on-click": "wdisplays" }, - "custom/night-light-toggle": { - "on-click": "bash ${SCRIPT_DIR}/sunset.sh", - "format": "\uf0eb ", - "tooltip": true, - "tooltip-format": "Toggle night-light on or off" + "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/battery": { + "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/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", + /* Most-left */ "custom/system-shutdown", "custom/system-reboot", "custom/system-hibernate", "custom/system-sleep", "custom/system-lock", - "custom/sep", - "power-profiles-daemon", - "custom/sep" + "power-profiles-daemon" + /* Most-right */ ], "drawer": { "transition-duration": 500, @@ -152,170 +280,172 @@ } }, - "group/hardware": { + "group/workspaces": { "orientation": "inherit", "modules": [ - "custom/sep", - "memory", - "cpu", - "temperature" - ], - "drawer": { - "transition-duration": 500, - "transition-left-to-right": false, - "children-class": "drawer-child" - } + "hyprland/workspaces", + "sway/workspaces" + ] }, - "group/system": { - "orientation": "inherit", - "modules": [ - "idle_inhibitor", - "custom/light-dark-toggle", - "custom/night-light-toggle", - "custom/keyboard-switch", - "custom/toggle-notifications" - ], - "drawer": { - "transition-duration": 500, - "tansition-left-to-right": true, - "children-class": "drawer-child" + "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}" }, "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} {dynamic}", "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, - }, - ], - }, - - "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 } } diff --git a/stow/waybar/.config/waybar/style-dark.css b/stow/waybar/.config/waybar/style-dark.css new file mode 100644 index 0000000..d99a2e8 --- /dev/null +++ b/stow/waybar/.config/waybar/style-dark.css @@ -0,0 +1,14 @@ +@import 'style.css'; + +* { + color: #C2C2C2; +} + +window#waybar { + background-color: #171717; +} + +window#waybar button.focused { + background-color: #C2C2C2; +} + diff --git a/stow/waybar/.config/waybar/style-light.css b/stow/waybar/.config/waybar/style-light.css new file mode 100644 index 0000000..a0bf37e --- /dev/null +++ b/stow/waybar/.config/waybar/style-light.css @@ -0,0 +1,14 @@ +@import 'style.css'; + +* { + color: #171717; +} + +window#waybar { + background-color: #C2C2C2; +} + +window#waybar button.focused { + background-color: #171717; +} + diff --git a/stow/waybar/.config/waybar/style.css b/stow/waybar/.config/waybar/style.css index f9fe080..39880dd 100644 --- a/stow/waybar/.config/waybar/style.css +++ b/stow/waybar/.config/waybar/style.css @@ -1,165 +1,119 @@ -/* - * ~/.config/waybar/style.css - * - * `otf-font-awesome` is required to be installed for icons. - * - * Pick your stylesheet: - * - sharp.css - * - transparent.css - * - round.css - */ +/* * * * * * * * * * * * * * * * + * * + * ~/.config/waybar/style.css * + * * + * * * * * * * * * * * * * * * */ -@define-color transparent-black rgba(23, 23, 23, 0.9); -@define-color white #ecf0f1; -@define-color warning-red #eb4d4b; -@define-color accent #00897b; +@define-color background #C2C2C2; +@define-color foreground #171717; + +/* Pantone / PMS 18-1559 TCX / Red Alert */ +@define-color warning rgb(208, 52, 44); +/* Safety orange */ +@define-color safety rgb(255, 103, 0); + +* { + padding: 0 4px; +} window#waybar { + /* background: linear-gradient(90deg, #CECECE 0%, #D1D1D1 10%, #C9C9C9 50%, #BBBBBB 90%, #BABABA 100%); */ + font-family: letter, "Font Awesome 6 Free", font-awesome, monospace; font-size: 13px; - -webkit-font-smoothing: antialiased; - transition-property: background-color; - transition-duration: .5s; + font-weight: 600; } -#window, #workspaces { - margin: 0 5px; -} - -#workspaces button { - border: none; - border-radius: 0; - min-width: 30px; - padding: 0 5px; -} - -#workspaces button.focused { - background-color: transparent; - color: @white; -} - -#workspaces button:hover { - background-color: transparent; - color: @transparent-black; -} - -#workspaces button.urgent { - color: @white; - background-color: @warning-red; -} - -/* All modules individually. */ -#backlight, -#battery, -#bluetooth, -#clock, -#cpu, -#custom-browser, -#custom-light-dark-toggle, -#custom-night-light-toggle, -#custom-system-lock, #custom-system-sleep, #custom-system-hibernate, #custom-system-reboot, #custom-system-shutdown, -#custom-toggle-notifications, -#disk, -#group-hardware, -#group-system, -#idle_inhibitor, -#keyboard-state, -#memory, -#mode, -#mpd, -#mpris, -#network, -#power-profiles-daemon, -#privacy-item.audio-in, #privacy-item.audio-out, #privacy-item.screenshare, -#pulseaudio, -#temperature, -#tray { - padding: 0 5px; -} - -/* If workspaces is the leftmost module, omit left margin */ -.modules-left > widget:first-child > #workspaces { - margin-left: 0; -} - -/* If workspaces is the rightmost module, omit right margin */ -.modules-right > widget:last-child > #workspaces { +.modules-right, +.modules-right > widget:last-child { + padding-right: 0; margin-right: 0; } -@keyframes blink { - to { - background-color: #ffffff; - color: #000000; - } -} - -label:focus { - background-color: #000000; -} - -/* Module specific colours */ - -#battery.charging, #battery.plugged { - color: #ffffff; +#battery.charging { background-color: #26A65B; + color: #FFFFFF; } #battery.critical:not(.charging) { - background-color: #f53c3c; - color: #ffffff; + background-color: @warning; + color: #FFFFFF; animation-name: blink; animation-duration: 0.5s; - animation-timing-function: linear; + animation-timing-function: steps(12); + animation-iteration-count: infinite; + animation-direction: alternate; +} + +#battery.plugged { + animation-name: blink; + animation-duration: 1.0s; + animation-timing-function: steps(12); animation-iteration-count: infinite; animation-direction: alternate; } #bluetooth.disabled, -#bluetooth.off, -#network.disconnected, -#pulseaudio.muted { +#bluetooth.off { opacity: 0.6; } -#mpris { - color: #2a5c45; - min-width: 100px; +#custom-toggle-tailscale.disconnected { + opacity: 0.6; +} + +#mpris.Feishin { + background: linear-gradient(45deg, rgba(170,92,195,1) 100%, rgba(0,164,220,1) 0%); } #mpris.spotify { background-color: #66cc99; + color: #2a5c45; } #mpris.vlc { background-color: #ffa000; } -#temperature.critical { - background-color: #eb4d4b; +#network.disconnected { + opacity: 0.6; } -#custom_light-dark-toggle.activated, -#idle_inhibitor.activated { - background-color: #ecf0f1; - color: #2d3436; +#privacy, +#privacy-item, +#privacy-item.screenshare, +#privacy-item.audio-in, +#privacy-item.audio-out { + background-color: @safety; +} + +#privacy-item { + padding: 0; +} + +#pulseaudio.muted { + opacity: 0.6; +} + +#systemd-failed-units.degraded { + background-color: @warning; +} + +#temperature.critical { + background-color: @warning; +} + +#tray > .needs-attention { + -gtk-icon-effect: highlight; + background-color: @warning; } #tray > .passive { -gtk-icon-effect: dim; } -#tray > .needs-attention { - -gtk-icon-effect: highlight; - background-color: #eb4d4b; +#workspaces button.urgent { + background-color: @warning; + color: white; } -#privacy-item.audio-in, -#privacy-item.audio-out, -#privacy-item.screenshare { - background-color: #ffaa01; - color: #2d3436; -} - -@import "sharp.css"; - diff --git a/stow/zsh/.zshrc b/stow/zsh/.zshrc index b21803c..155caec 100644 --- a/stow/zsh/.zshrc +++ b/stow/zsh/.zshrc @@ -51,7 +51,7 @@ fi alias cp='cp -i' alias df='df -h' alias free='free -m' -alias gs='git status' +alias gs='git status --short' alias hgrep='history | grep' alias ll='ls -la' alias mkdir='mkdir -pv'