Compare commits

...

3 Commits

Author SHA1 Message Date
625039ee58 link wallpapers 2025-11-07 11:02:20 +01:00
7b9122fe7f cleanup hyprland and embrace dms 2025-11-07 10:39:48 +01:00
94f392c388 add networking through secrets 2025-11-07 10:39:29 +01:00
27 changed files with 331 additions and 763 deletions

1
.envrc Normal file
View File

@@ -0,0 +1 @@
use flake

4
.gitignore vendored
View File

@@ -1,2 +1,4 @@
# Result is a symlink to the built iso
result
result
# direnv binaries
.direnv

View File

@@ -1,14 +1,12 @@
# This example uses YAML anchors which allows reuse of multiple keys
# without having to repeat yourself.
# Also see https://github.com/Mic92/dotfiles/blob/d6114726d859df36ccaa32891c4963ae5717ef7f/nixos/.sops.yaml
# for a more complex example.
keys:
- &remy_usb age1027e2vu808mvf95m4f0am3aeg88n8vgzt56s04ndpkgm7awzeajspxl6tu
- &remy_yoga age1t2stzdjfwrtekk23w43623fdvt9awdujth765f8l6mu9g6l4537q4gw8d0
# - &admin_bob age12zlz6lvcdk6eqaewfylg35w0syh58sm7gh53q5vvn7hd7c6nngyseftjxl
- &remy_yoga ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIAX4zsiXSSWbE75C0wyBVwaHOw6Gsbh/WqQsgEhvPwT8 remy@nyx
- &host_yoga age1ckqer7nxzq7q58v9xaqy8ac9vx2va69a46t86wp9m78pj5dpuy3sq8xeaj
creation_rules:
- path_regex: secrets/[^/]+\.(yaml|json|env|ini)$
key_groups:
- age:
- *remy_usb
- *remy_yoga
- *host_yoga

190
flake.lock generated
View File

@@ -20,11 +20,11 @@
]
},
"locked": {
"lastModified": 1760101617,
"narHash": "sha256-8jf/3ZCi+B7zYpIyV04+3wm72BD7Z801IlOzsOACR7I=",
"lastModified": 1761420899,
"narHash": "sha256-kxGCip6GNbcbNWKu4J2iKbNYfFTS8Zbjg9CWp0zmFoM=",
"owner": "hyprwm",
"repo": "aquamarine",
"rev": "1826a9923881320306231b1c2090379ebf9fa4f8",
"rev": "62479232aae42c1ef09c2c027c8cfd91df060897",
"type": "github"
},
"original": {
@@ -112,11 +112,11 @@
]
},
"locked": {
"lastModified": 1761744363,
"narHash": "sha256-c+lu6aSPPeI9HnqFg4pyNYUWqLrRL2Yju3sFDu42q/w=",
"lastModified": 1762403774,
"narHash": "sha256-CXgW0EEW+WV4jJ/5mxNluQeTgS6wyuuUlUcsZF84bKU=",
"owner": "AvengeMedia",
"repo": "DankMaterialShell",
"rev": "5e36b1454a7b2cec0c657fd4345a715736bbef19",
"rev": "c9ee856f916023563d9446483024a8aec2dce870",
"type": "github"
},
"original": {
@@ -148,17 +148,16 @@
},
"dms-cli": {
"inputs": {
"gomod2nix": "gomod2nix",
"nixpkgs": [
"nixpkgs"
]
},
"locked": {
"lastModified": 1761674192,
"narHash": "sha256-KpQxBHiXjs1xFlM8mtVaY/XcKX0J5tCoqg8lXtIC9Pk=",
"lastModified": 1762404200,
"narHash": "sha256-/GhnVY1AwcgxOVhSXdrejVQNbi27kXRNMD93C2nH5ho=",
"owner": "AvengeMedia",
"repo": "danklinux",
"rev": "477968d6b3e5dbb82f5e07feb0a1a7b2de9d948e",
"rev": "b94cc56f44e7fb987d293e4880871fa0845da8ed",
"type": "github"
},
"original": {
@@ -220,24 +219,6 @@
"type": "github"
}
},
"flake-utils": {
"inputs": {
"systems": "systems"
},
"locked": {
"lastModified": 1731533236,
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"fromYaml": {
"flake": false,
"locked": {
@@ -293,29 +274,6 @@
"type": "github"
}
},
"gomod2nix": {
"inputs": {
"flake-utils": "flake-utils",
"nixpkgs": [
"dms-cli",
"nixpkgs"
]
},
"locked": {
"lastModified": 1756047880,
"narHash": "sha256-JeuGh9kA1SPL70fnvpLxkIkCWpTjtoPaus3jzvdna0k=",
"owner": "nix-community",
"repo": "gomod2nix",
"rev": "47d628dc3b506bd28632e47280c6b89d3496909d",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "v1.7.0",
"repo": "gomod2nix",
"type": "github"
}
},
"home-manager": {
"inputs": {
"nixpkgs": [
@@ -323,11 +281,11 @@
]
},
"locked": {
"lastModified": 1761750844,
"narHash": "sha256-ab6kNHAEP/oWz8qdblnDw7TIwetr4GnmnDyvya0aw/k=",
"lastModified": 1762367206,
"narHash": "sha256-c/164YOPkV09BH8KIUdvVvJs3VF2LNIbE2piKGgXPxk=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "b8082c6803353456d45e6a8c0d4b36ad33fb7d6a",
"rev": "af119feb17cb242398e0fb97f92b867d25882522",
"type": "github"
},
"original": {
@@ -344,11 +302,11 @@
]
},
"locked": {
"lastModified": 1752603129,
"narHash": "sha256-S+wmHhwNQ5Ru689L2Gu8n1OD6s9eU9n9mD827JNR+kw=",
"lastModified": 1762351818,
"narHash": "sha256-0ptUDbYwxv1kk/uzEX4+NJjY2e16MaAhtzAOJ6K0TG0=",
"owner": "nix-community",
"repo": "home-manager",
"rev": "e8c19a3cec2814c754f031ab3ae7316b64da085b",
"rev": "b959c67241cae17fc9e4ee7eaf13dfa8512477ea",
"type": "github"
},
"original": {
@@ -427,15 +385,15 @@
"hyprwayland-scanner": "hyprwayland-scanner",
"nixpkgs": "nixpkgs",
"pre-commit-hooks": "pre-commit-hooks",
"systems": "systems_2",
"systems": "systems",
"xdph": "xdph"
},
"locked": {
"lastModified": 1761742422,
"narHash": "sha256-dke/JIFqles3r4nZwn+XPASGpIxIaKgeUp7NTBHpxgM=",
"lastModified": 1762387591,
"narHash": "sha256-dbxpwgat8W/+P/cYnLXzoj5Gi8WKdtMgvqHuEzIU8fs=",
"owner": "hyprwm",
"repo": "Hyprland",
"rev": "ff50dc36e912b6ad764802d51be838bc7f6ed323",
"rev": "c757fd375cce299e3da922190ddf1a0622ce807c",
"type": "github"
},
"original": {
@@ -578,11 +536,11 @@
]
},
"locked": {
"lastModified": 1759619523,
"narHash": "sha256-r1ed7AR2ZEb2U8gy321/Xcp1ho2tzn+gG1te/Wxsj1A=",
"lastModified": 1762208756,
"narHash": "sha256-hC1jb4tdjFfEuU18KQiMgz5XPAO+d5SfbjAUS7haLl4=",
"owner": "hyprwm",
"repo": "hyprutils",
"rev": "3df7bde01efb3a3e8e678d1155f2aa3f19e177ef",
"rev": "164a30b3d8b3174a32ac7326782476f1188e6118",
"type": "github"
},
"original": {
@@ -631,31 +589,34 @@
"type": "github"
}
},
"nix-vscode-extensions": {
"nix4vscode": {
"inputs": {
"nixpkgs": "nixpkgs_2"
"nixpkgs": [
"nixpkgs"
],
"systems": "systems_2"
},
"locked": {
"lastModified": 1761726545,
"narHash": "sha256-+Id4G/5NRpf8Lkdr5q4PBrQo6hvVFTbrN/J+0Q0KU6s=",
"lastModified": 1762394598,
"narHash": "sha256-AbDS8JL8mXAP0gVAXQA1RIUwnH6rUHueCTPf/hxAooE=",
"owner": "nix-community",
"repo": "nix-vscode-extensions",
"rev": "daf7c5026b02623d17ad74548a791c387db438d8",
"repo": "nix4vscode",
"rev": "4c90ca996c860583f8fc77fa8abd24610439f850",
"type": "github"
},
"original": {
"owner": "nix-community",
"repo": "nix-vscode-extensions",
"repo": "nix4vscode",
"type": "github"
}
},
"nixpkgs": {
"locked": {
"lastModified": 1761114652,
"narHash": "sha256-f/QCJM/YhrV/lavyCVz8iU3rlZun6d+dAiC3H+CDle4=",
"lastModified": 1762111121,
"narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "01f116e4df6a15f4ccdffb1bcd41096869fb385c",
"rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4",
"type": "github"
},
"original": {
@@ -667,11 +628,11 @@
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1761373498,
"narHash": "sha256-Q/uhWNvd7V7k1H1ZPMy/vkx3F8C13ZcdrKjO7Jv7v0c=",
"lastModified": 1762111121,
"narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "6a08e6bb4e46ff7fcbb53d409b253f6bad8a28ce",
"rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4",
"type": "github"
},
"original": {
@@ -683,27 +644,11 @@
},
"nixpkgs_2": {
"locked": {
"lastModified": 1759770925,
"narHash": "sha256-CZwkCtzTNclqlhuwDsVtGoRumTpqCUK0xSnFIMgd8ls=",
"lastModified": 1762111121,
"narHash": "sha256-4vhDuZ7OZaZmKKrnDpxLZZpGIJvAeMtK6FKLJYUtAdw=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "674c2b09c59a220204350ced584cadaacee30038",
"type": "github"
},
"original": {
"owner": "nixos",
"repo": "nixpkgs",
"rev": "674c2b09c59a220204350ced584cadaacee30038",
"type": "github"
}
},
"nixpkgs_3": {
"locked": {
"lastModified": 1761373498,
"narHash": "sha256-Q/uhWNvd7V7k1H1ZPMy/vkx3F8C13ZcdrKjO7Jv7v0c=",
"owner": "nixos",
"repo": "nixpkgs",
"rev": "6a08e6bb4e46ff7fcbb53d409b253f6bad8a28ce",
"rev": "b3d51a0365f6695e7dd5cdf3e180604530ed33b4",
"type": "github"
},
"original": {
@@ -768,8 +713,8 @@
"home-manager": "home-manager",
"hyprland": "hyprland",
"nix-flatpak": "nix-flatpak",
"nix-vscode-extensions": "nix-vscode-extensions",
"nixpkgs": "nixpkgs_3",
"nix4vscode": "nix4vscode",
"nixpkgs": "nixpkgs_2",
"nixpkgs-unstable": "nixpkgs-unstable",
"sops-nix": "sops-nix",
"stylix": "stylix",
@@ -818,11 +763,11 @@
"tinted-zed": "tinted-zed"
},
"locked": {
"lastModified": 1761666531,
"narHash": "sha256-nKOOPeblDcebtYfBjHo+PHXHKNSNKuifn1EGcBEgKWs=",
"lastModified": 1762264356,
"narHash": "sha256-QVfC53Ri+8n3e7Ujx9kq6all3+TLBRRPRnc6No5qY5w=",
"owner": "nix-community",
"repo": "stylix",
"rev": "f8f4e3c3658ee962f8f332a56720c8dfc2836f7a",
"rev": "647bb8dd96a206a1b79c4fd714affc88b409e10b",
"type": "github"
},
"original": {
@@ -832,21 +777,6 @@
}
},
"systems": {
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_2": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
@@ -861,6 +791,22 @@
"type": "github"
}
},
"systems_2": {
"flake": false,
"locked": {
"lastModified": 1681028828,
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
"owner": "nix-systems",
"repo": "default",
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default",
"type": "github"
}
},
"systems_3": {
"locked": {
"lastModified": 1681028828,
@@ -1006,11 +952,11 @@
]
},
"locked": {
"lastModified": 1760713634,
"narHash": "sha256-5HXelmz2x/uO26lvW7MudnadbAfoBnve4tRBiDVLtOM=",
"lastModified": 1761431178,
"narHash": "sha256-xzjC1CV3+wpUQKNF+GnadnkeGUCJX+vgaWIZsnz9tzI=",
"owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland",
"rev": "753bbbdf6a052994da94062e5b753288cef28dfb",
"rev": "4b8801228ff958d028f588f0c2b911dbf32297f9",
"type": "github"
},
"original": {
@@ -1027,11 +973,11 @@
]
},
"locked": {
"lastModified": 1761712008,
"narHash": "sha256-Nf2s59dLg6KDUV0omZqIlOGNUxw/Rl/KKXEXQGFCAlo=",
"lastModified": 1762403216,
"narHash": "sha256-BPv/dC0S54hqsurgmxGxUbXb3kJMpK3KNKQDrdO4NRE=",
"owner": "0xc000022070",
"repo": "zen-browser-flake",
"rev": "1383ed38745d12f3896c996848d24c451643db58",
"rev": "a3a22c5ad43f46f8ddad7eed8aa7f82ec649765f",
"type": "github"
},
"original": {

View File

@@ -1,6 +1,7 @@
{
description = "Nix config entry point";
# since secrets live in a submodule, enable submodules by default
inputs.self.submodules = true;
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable";
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable";
@@ -49,7 +50,10 @@
inputs.dms-cli.follows = "dms-cli";
};
nix-vscode-extensions.url = "github:nix-community/nix-vscode-extensions";
nix4vscode = {
url = "github:nix-community/nix4vscode";
inputs.nixpkgs.follows = "nixpkgs";
};
};
outputs = {
@@ -59,7 +63,7 @@
home-manager,
stylix,
sops-nix,
nix-vscode-extensions,
nix4vscode,
...
} @ inputs:
let
@@ -112,11 +116,12 @@
./users/remy_yoga
inputs.nix-flatpak.homeManagerModules.nix-flatpak
inputs.dankMaterialShell.homeModules.dankMaterialShell.default
];
extraModules = [
inputs.stylix.nixosModules.stylix
inputs.sops-nix.nixosModules.sops
{ nixpkgs.overlays = [ inputs.nix-vscode-extensions.overlays.default ]; }
{ nixpkgs.overlays = [ inputs.nix4vscode.overlays.default ]; }
];
};
};
@@ -160,5 +165,15 @@
# })
# ];
# };
# devshell for this configuration
devShells.x86_64-linux.default = nixpkgs.legacyPackages.x86_64-linux.mkShell {
packages = [
pkgs.sops
];
# tell sops where the public ssh key to "seed" the age key from is located
SOPS_AGE_SSH_PRIVATE_KEY_FILE = "/home/remy/.ssh/main_key";
};
};
}

View File

@@ -5,17 +5,21 @@
{ config, lib, pkgs, ... }:
{
boot.loader = {
systemd-boot.enable = true;
timeout = 0;
efi.canTouchEfiVariables = true;
};
# cause it is so inconveniently located
services.logind.powerKey = "ignore";
services.logind.lidSwitch = "sleep";
services.logind.lidSwitchDocked = "ignore";
services.logind.settings.Login = {
# because it is so inconveniently located
HandlePowerKey = "ignore";
# handled by the dm instead
HandleLidSwitch = "ignore";
HandleLidSwitchDocked = "ignore";
};
# requires too many shenanigans so I just install using --no-root-passwd
# users.users.root.hashedPassword = "!";

View File

@@ -26,6 +26,7 @@
../../modules/nixos/pipewire.nix
../../modules/nixos/podman.nix
../../modules/nixos/power.nix
../../modules/nixos/sops.nix
../../modules/nixos/stylix.nix
../../modules/nixos/user.nix

View File

@@ -1,14 +1,14 @@
{pkgs, ...}:
let
baseExtensions = with pkgs.vscode-marketplace; [
baseExtensions = pkgs.nix4vscode.forVscode [
# QOL
mhutchie.git-graph
redhat.vscode-yaml
# github.copilot
# github.copilot-chat
"mhutchie.git-graph"
"redhat.vscode-yaml"
"github.copilot"
"github.copilot-chat"
# Nix environment selector
arrterian.nix-env-selector
continue.continue
"arrterian.nix-env-selector"
# continue.continue
];
@@ -102,21 +102,21 @@ in
};
profiles.development = {
extensions = baseExtensions ++ (with pkgs.vscode-marketplace; [
extensions = baseExtensions ++ pkgs.nix4vscode.forVscode [
# python
ms-python.python
ms-python.isort
ms-python.debugpy
ms-python.vscode-pylance
"ms-python.python"
"ms-python.isort"
"ms-python.debugpy"
"ms-python.vscode-pylance"
# nix language
jnoortheen.nix-ide
"jnoortheen.nix-ide"
# Flutter and co
dart-code.flutter
dart-code.dart-code
"dart-code.flutter"
"dart-code.dart-code"
]);
];
keybindings = baseKeybindings;
@@ -125,19 +125,19 @@ in
profiles.science = {
extensions = baseExtensions ++ (with pkgs.vscode-marketplace; [
extensions = baseExtensions ++ pkgs.nix4vscode.forVscode [
# python + jupyter
ms-python.python
ms-python.isort
ms-python.debugpy
# ms-python.vscode-pylance
ms-toolsai.vscode-jupyter-slideshow
ms-toolsai.jupyter
ms-toolsai.jupyter-hub
ms-toolsai.jupyter-renderers
"ms-python.python"
"ms-python.isort"
"ms-python.debugpy"
"ms-python.vscode-pylance"
"ms-toolsai.vscode-jupyter-slideshow"
"ms-toolsai.jupyter"
"ms-toolsai.jupyter-hub"
"ms-toolsai.jupyter-renderers"
# Typst
myriad-dreamin.tinymist
]);
"myriad-dreamin.tinymist"
];
keybindings = baseKeybindings ++ [
# run code cell in jupyter

View File

@@ -11,7 +11,7 @@
createDirectories = true;
documents = "${config.home.homeDirectory}/Documents";
download = "${config.home.homeDirectory}/Downloads";
pictures = "${config.home.homeDirectory}/Pictures";#
pictures = "${config.home.homeDirectory}/Pictures";
# do not create the following
desktop = null;
music = null;

View File

@@ -1,9 +1,23 @@
{
config,
lib,
...
}:
let
cfg = config.nix-config.hypr;
in
{
options = {
nix-config.hypr.enable = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable an opinionated hyprland+quickshell setup as a desktop environment.";
};
};
imports = [
./hyprland
./hyprpaper.nix
./hyprlock.nix
./hypridle.nix
./waybar.nix
];
}

View File

@@ -19,7 +19,8 @@ in
};
config = {
wayland.windowManager.hyprland = {
wayland.windowManager.hyprland = lib.mkIf cfg.enable {
enable = true;
systemd.enable = true;
settings = {
@@ -28,10 +29,11 @@ in
# };
general = {
resize_on_border = true;
gaps_in = 5;
gaps_out = 5;
gaps_in = 3;
gaps_out = 3;
border_size = 1;
"col.active_border" = "rgb(98971A) rgb(CC241D) 45deg";
"col.inactive_border" = "rgba(595959aa)";
layout = "master";
};
@@ -61,9 +63,10 @@ in
};
decoration = {
rounding = 7;
# active_opacity = 0.95;
rounding = 10;
inactive_opacity = 0.9;
dim_inactive = false;
dim_strength = 0.1;
shadow = {
enabled = false;
@@ -94,6 +97,16 @@ in
"float, class:org.gnome.Nautilus"
# when there is a single window, deactivate border and gaps
# "border_size 0, onworkspace:w[tv1], "
# File pickers and dialogs
"float, title:^(Save As)$"
"float, title:^(Open File)$"
"size 50% 50%, title:^(Open File)$"
"center, title:^(Open File)$"
# Disable idle when gaming
"idleinhibit always, class:^(steam_app_)"
"idleinhibit always, class:^(gamescope)$"
];
};

View File

@@ -17,7 +17,7 @@ in
"$mod, return, exec, kitty"
"$mod, b, exec, ${cfg.browser}"
"$mod, s, exec, ${cfg.ide}"
"$mod, e, exec, nautilus"
"$mod, e, exec, ${lib.getExe pkgs.nautilus}"
# Lock screen
"$mod, l, exec, loginctl lock-session"
@@ -54,10 +54,10 @@ in
"$mod+Ctrl, right, movetoworkspace, +1"
# Switch workspace
"$mod, left, workspace, -1"
"$mod, right, workspace, +1"
"$mod, mouse_down, workspace, -1"
"$mod, mouse_up, workspace, +1"
"$mod, left, workspace, prev"
"$mod, right, workspace, next"
"$mod, mouse_down, workspace, prev"
"$mod, mouse_up, workspace, next"
# move to scratch workspace
@@ -101,8 +101,6 @@ in
"$mod, KP_Subtract, resizeactive, -2% -2%"
"$mod, PLUS, resizeactive, 2% 2%"
"$mod, KP_Add, resizeactive, 2% 2%"
];
# lock-screen bindings

View File

@@ -8,35 +8,33 @@ in
settings = {
master = {
# TODO - I am not yet happy about the layout + toggle keybinds
orientation = "center";
# equivalent toalways_center_master = true;
slave_count_for_center_master = 0;
# new_is_master = false;
# allow_small_split = true;
# special_scale_factor = 0.80;
mfact = 0.34;
# no_gaps_when_only = true;
# default: single app is centered/fullscreen; when more apps are added it splits
orientation = "right";
# keep center-master behaviour when there is exactly 1 slave (i.e. single app appears fullscreen)
slave_count_for_center_master = 1;
# only split in two columns
mfact = 0.6;
inherit_fullscreen = false;
# always_center_master = false;
# allow a maximum of 3 windows in the master area for 3-column layout
};
#create special workspaces with no gaps
workspace = [
"w[t1], gapsout:0, gapsin:0"
"w[tg1], gapsout:0, gapsin:0"
"f[1], gapsout:0, gapsin:0"
];
# #create special workspaces with no gaps
# workspace = [
# "w[t1], gapsout:0, gapsin:0"
# "w[tg1], gapsout:0, gapsin:0"
# "f[1], gapsout:0, gapsin:0"
# ];
# automatically assign windows to workspaces when there is only one window
windowrulev2 = [
"bordersize 0, floating:0, onworkspace:w[t1]"
"rounding 0, floating:0, onworkspace:w[t1]"
"bordersize 0, floating:0, onworkspace:w[tg1]"
"rounding 0, floating:0, onworkspace:w[tg1]"
"bordersize 0, floating:0, onworkspace:f[1]"
"rounding 0, floating:0, onworkspace:f[1]"
];
# # automatically assign windows to workspaces when there is only one window
# windowrulev2 = [
# "bordersize 0, floating:0, onworkspace:w[t1]"
# "rounding 0, floating:0, onworkspace:w[t1]"
# "bordersize 0, floating:0, onworkspace:w[tg1]"
# "rounding 0, floating:0, onworkspace:w[tg1]"
# "bordersize 0, floating:0, onworkspace:f[1]"
# "rounding 0, floating:0, onworkspace:f[1]"
# ];
misc = {
vfr = false;
@@ -45,12 +43,14 @@ in
# Keybind to toggle between 2 and 3 column master layout
bind = [
# Toggle master layout between 2 and 3 columns
"$mod, m, exec, hyprctl dispatch layoutmsg orientationleft"
"$mod, m, exec, hyprctl dispatch layoutmsg mfact exact 0.5"
# "SUPER_SHIFT,C,exec,hyprctl dispatch layoutmsg swap_master_count 2 3"
];
# Toggle master layout between 2 and 3 columns (press $mod + m)
"$mod, m, exec, hyprctl dispatch layoutmsg orientationcenter"
"$mod, m, exec, hyprctl dispatch layoutmsg mfact exact 0.34"
# Toggle master layout between 3 and 2 columns (press $mod + Shift + m)
"$mod, Shift+m, exec, hyprctl dispatch layoutmsg orientationright"
"$mod, Shift+m, exec, hyprctl dispatch layoutmsg mfact exact 0.6"
];
};
};
};

View File

@@ -9,7 +9,6 @@ in
pkgs.nautilus
pkgs.gnome-control-center
pkgs.gnome-bluetooth # needed by gnome-control-center to manage bluetooth
pkgs.brightnessctl
pkgs.cliphist
pkgs.wl-clipboard
pkgs.gcr # Provides org.gnome.keyring.SystemPrompter

View File

@@ -1,66 +0,0 @@
{
pkgs,
lib,
...
}:
let
wallpapers = [
../../../wallpapers/codioful-formerly-gradienta-lweK7Wme_jo-unsplash.jpg
../../../wallpapers/codioful-formerly-gradienta-n2XqPm7Bqhk-unsplash.jpg
../../../wallpapers/luke-chesser-eICUFSeirc0-unsplash.jpg
../../../wallpapers/luke-chesser-pJadQetzTkI-unsplash.jpg
../../../wallpapers/magicpattern-87PP9Zd7MNo-unsplash.jpg
];
monitor = ""; # leave empty to set the wallpaper on all monitors
wallpaperPicker = pkgs.writeShellScriptBin "wallpaper-picker" ''
#!/usr/bin/env bash
# use an array of wallpapers to randomly select one
wallpapers=(${pkgs.lib.concatStringsSep " " (map (p: "${p}") wallpapers)})
# select a random wallpaper from the array
index=$((RANDOM % ${toString (builtins.length wallpapers)}))
wallpaper="''${wallpapers[index]}"
echo "Setting wallpaper to: $wallpaper"
hyprctl hyprpaper unload all
hyprctl hyprpaper reload "${monitor},$wallpaper"
'';
in {
home.packages = [wallpaperPicker];
services.hyprpaper = {
enable = true;
settings = {
ipc = "on";
};
};
# systemd.user = {
# services.wallpaperRandomizer = {
# Install = {WantedBy = ["graphical-session.target"];};
# Unit = {
# Description = "Set random desktop background using hyprpaper";
# After = ["graphical-session-pre.target"];
# PartOf = ["graphical-session.target"];
# };
# Service = {
# Type = "oneshot";
# ExecStart = "${wallpaperRandomizer}/bin/wallpaperRandomizer";
# IOSchedulingClass = "idle";
# };
# };
# timers.wallpaperRandomizer = {
# Unit = {Description = "Set random desktop background using hyprpaper on an interval";};
# Timer = {OnUnitActiveSec = "6h";};
# Install = {WantedBy = ["timers.target"];};
# };
# };
}

View File

@@ -1,331 +0,0 @@
{inputs, pkgs, lib, config, ...}:
let
cfg = config.nix-config.style;
in
{
options.nix-config.waybar = {
burninPrevention = lib.mkOption {
type = lib.types.bool;
default = true;
description = "Enable burn-in prevention for Waybar";
example = ''
burninPrevention = true;
'';
};
};
config = {
# required to autoload fonts from packages installed via Home Manager
fonts.fontconfig.enable = true;
# waybar requires font-awesome
home.packages = [
pkgs.pavucontrol
];
# enable waybar
programs.waybar.enable = false;
programs.waybar = {
settings = {
mainBar = {
layer = "top";
position = "top";
margin-top = 5;
# margin-bottom = 2;
# margin-left = 5;
# margin-right = 5;
# margin between the modules
spacing = 2;
modules-left = [
"hyprland/workspaces"
"hyprland/window"
];
modules-center = [
"clock"
"custom/notification"
];
modules-right = [
"tray"
"privacy"
"network"
"bluetooth"
"wireplumber"
"battery"
"backlight"
"idle_inhibitor"
];
# module specific settings
"hyprland/workspaces" = {
format = "{icon}";
format-icons = {
active = "";
default = "";
};
};
"hyprland/window"= {
"icon" = true;
"separate-outputs" = true;
"format" = "{}";
"rewrite" = {
"(.*) Mozilla Firefox" = "$1";
"(.*) Zen Browser" = "$1";
"(.*) - fish" = "> [$1]";
"(.*) - Visual Studio Code" = "$1";
};
};
"clock" = {
format = "{:%H:%M}";
interval = 1;
tooltip-format = "{calendar}";
# calendar = {
# format = "%Y-%m-%d\n󰃰 %A\n\n%H:%M";
# start-day = 1; # Monday
# first-weekday = 1; # Monday
# week-number = false;
# long-weekdays = true;
# hide-if-empty = false;
# };
};
"idle_inhibitor" = {
format = "{icon}";
format-icons = {
activated = "";
deactivated = "";
};
tooltip = "true";
};
"bluetooth" = {
format-on = "󰂯";
format-off = "󰂲";
format-disabled = "󰂲";
format-connected-battery = "{device_battery_percentage}% 󰂯";
format-alt = "{device_alias} 󰂯";
tooltip-format = "{controller_alias}\t{controller_address}\n\n{num_connections} connected";
tooltip-format-connected = "{controller_alias}\t{controller_address}\n\n{num_connections} connected\n\n{device_enumerate}";
tooltip-format-enumerate-connected = "{device_alias}\n{device_address}";
tooltip-format-enumerate-connected-battery = "{device_alias}\n{device_address}\n{device_battery_percentage}%";
on-click-right = "XDG_CURRENT_DESKTOP=GNOME gnome-control-center bluetooth";
};
"battery" = {
interval = 60;
states = {
good = 80;
warning = 30;
critical = 10;
};
format = "{capacity}% {icon}";
format-charging = "{capacity}% 󰂄";
format-plugged = "{capacity}% 󰂄";
format-icons = [ "󰁻" "󰁼" "󰁾" "󰂀" "󰂂" "󰁹" ];
};
"backlight" = {
# format = "{percent}% {icon}";
format = "{icon}";
tooltip-format = "{percent}%";
format-icons = [ "" "" "" "" "" "" "" "" "" ];
};
"wireplumber" = {
scroll-step = 1;
format = "{volume}% {icon}";# {format_source}";
format-bluetooth = "{volume}% {icon}";# {format_source}";
format-bluetooth-muted = " {icon}";# {format_source}";
format-muted = "";# {format_source}";
format-alt = "{format_source} {icon}";
# format-source = " {volume}%";
# format-source-muted = "";
format-icons = {
headphone = "";
hands-free = "";
headset = "";
phone = "";
portable = "";
default = [
""
""
""
];
};
on-click = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
on-click-right = "XDG_CURRENT_DESKTOP=GNOME gnome-control-center sound";
};
"memory" = {
interval = 5;
format = "󰍛 {}%";
max-length = 10;
};
"tray" = {
spacing = 5;
};
"custom/notification" = {
format = "{icon} {}";
format-icons = {
notification = "<span foreground='red'><sup></sup></span>";
none = "";
dnd-notification = "<span foreground='red'><sup></sup></span>";
dnd-none = "";
inhibited-notification = "<span foreground='red'><sup></sup></span>";
inhibited-none = "";
dnd-inhibited-notification = "<span foreground='red'><sup></sup></span>";
dnd-inhibited-none = "";
};
return-type = "json";
exec-if = "which swaync-client";
exec = "swaync-client -swb";
on-click = "swaync-client -t -sw";
on-click-right = "swaync-client -d -sw";
escape = true;
};
"network" = {
format = "󰤭";
format-ethernet = " {ipaddr}";
format-wifi = "{icon}";
format-icons = [ "󰤯" "󰤟" "󰤢" "󰤥" "󰤨" ];
format-disconnected = "󰤭";
tooltip-format = " {ifname} via {gwaddr}";
tooltip-format-wifi = ''
󰤨 {essid}({signalStrength}%), {frequency} GHz (Interface: {ifname})
IP: {ipaddr} GW: {gwaddr}
<span color='#a6da95'>{bandwidthUpBits}</span> <span color='#ee99a0'>{bandwidthDownBits}</span> <span color='#c6a0f6'>󰹹{bandwidthTotalBits}</span>
'';
tooltip-format-ethernet = ''
{ifname} - {ipaddr}/{cidr}
<span color='#a6da95'>{bandwidthUpBits}</span> <span color='#ee99a0'>{bandwidthDownBits}</span> <span color='#c6a0f6'>󰹹{bandwidthTotalBits}</span>
'';
tooltip-format-disconnected = "Disconnected";
on-click = "XDG_CURRENT_DESKTOP=GNOME gnome-control-center wifi";
};
"privacy" = {
icon-spacing = 4;
# icon-size" = 18;
transition-duration = 250;
modules = [
{
type = "screenshare";
tooltip = true;
# tooltip-icon-size = 24
}
{
type = "audio-out";
tooltip = true;
# tooltip-icon-size = 24
}
{
type = "audio-in";
tooltip = true;
# tooltip-icon-size = 24
}
];
};
};
};
style = ''
* {
font-family: "${cfg.monospaceFont}";
font-weight: bold;
font-size: ${builtins.toString (cfg.fontSizes.desktop + 5)}px;
}
window#waybar {
background-color: transparent;
}
.module {
background: rgba(0, 0, 0, 0.6);
color: white;
border-radius: 7px;
margin: 1px 3px;
padding: 1px 6px;
animation: bgFade 3600s infinite alternate, textColorFade 3600s infinite alternate;
}
box.module button:hover {
box-shadow: inset 0 -3px #ffffff;
}
/*.modules-left {
padding: 3px;
}
.modules-right {
padding: 3px;
}
.modules-center {
padding: 3px;
}*/
#workspaces button {
color: white;
background: none;
animation: textColorFade 3600s infinite alternate;
}
#battery.warning {
background:rgba(240, 165, 0, 0.6);
}
#battery.critical {
background:rgba(255, 0, 0, 0.6);
}
#battery.charging {
background-color:rgba(14, 173, 0, 0.6);
}
#privacy {
color: #ffffff;
background:rgba(240, 165, 0, 0.6);
border-radius: 7px;
margin: 1px 3px;
padding: 1px 6px;
}
@keyframes bgFade {
0% {
background-color: white;
}
100% {
background-color: black;
}
}
@keyframes textColorFade {
0% {
color: black;
}
/* 45% {
color: black;
} */
60% {
color: rgb(29, 38, 96);
}
/* 55% {
color: white;
} */
100% {
color: white;
}
}
'';
};
};
}

View File

@@ -1,110 +0,0 @@
{ config, pkgs, lib, ... }:
let
cfg = config.nix-config.style;
in
{
services.swaync = {
enable = true;
settings = {
control-center-margin-top = 13;
control-center-margin-bottom = 0;
control-center-margin-right = 14;
control-center-margin-left = 0;
notification-2fa-action = true;
notification-inline-replies = true;
notification-icon-size = 48;
notification-body-image-height = 160;
notification-body-image-width = 200;
notification-window-width = 400;
timeout = 6;
timeout-low = 3;
timeout-critical = 0;
image-visibility = "when-available";
transition-time = 200;
hide-on-clear = false;
hide-on-action = true;
script-fail-notify = true;
widgets = [
"dnd"
"buttons-grid"
"mpris"
"volume"
"backlight"
"title"
"notifications"
];
widget-config = {
title = {
text = "Notifications";
clear-all-button = true;
button-text = "";
};
dnd = {
text = "Do Not Disturb";
};
label = {
max-lines = 1;
text = "Notification";
};
mpris = {
image-size = 50;
image-radius = 0;
};
volume = {
label = "";
};
backlight = {
label = "󰃠";
device = "amdgpu_bl2";
};
buttons-grid = {
actions = [
{
label = "";
command = "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle";
type = "toggle";
}
{
label = "";
command = "wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle";
type = "toggle";
}
{
label = "󰤨";
command = "nm-connection-editor";
}
{
label = "󰂯";
command = "blueman-manager";
}
{
label = "󱡽";
command = "bash -c $HOME/.config/hypr/scripts/airplaneMode.sh";
type = "toggle";
}
{
label = "";
command = "shutdown now";
}
{
label = "";
command = "hyprlock";
}
{
label = "";
command = "~/.config/hypr/scripts/wlogout.sh";
}
];
};
};
};
style = ''
* {
font-family: "monospace";
}
'';
};
}

View File

View File

@@ -90,7 +90,7 @@ in
};
emoji = {
package = pkgs.noto-fonts-emoji;
package = pkgs.noto-fonts-color-emoji;
name = "Noto Color Emoji";
};

View File

@@ -0,0 +1,11 @@
# Write an importable nix file that copies a folder from this repo into the store and creates a symlink to a predictible directory in my home file
{
lib, pkgs, ...
}:
{
# Copy the entire wallpapers directory into the Nix store and symlink it to ~/wallpapers
home.file."wallpapers" = {
source = ../../wallpapers;
target = "Pictures/wallpapers";
};
}

View File

@@ -22,7 +22,7 @@ in
defaultSession = "hyprland";
};
services.xserver.displayManager.gdm = {
services.displayManager.gdm = {
enable = true;
wayland = true;
};

View File

@@ -13,6 +13,11 @@ in
type = lib.types.str;
default = "nixos";
};
nix-config.networking.vpn = lib.mkOption {
type = lib.types.bool;
default = true;
};
};
config = {
@@ -30,6 +35,60 @@ in
# enable = false;
# };
};
# # VPN setup
networking.networkmanager.ensureProfiles = {
environmentFiles = [ config.sops.secrets.vpnEnvironment.path ];
profiles.wg-home = {
connection = {
id = "wg-home";
type = "wireguard";
interface-name = "wgh";
autoconnect = false;
};
ipv4 = {
address = "10.0.0.2/32";
method = "manual";
};
wireguard = {
listen-port = 51820;
private-key = "$HOME_PRIVATE_KEY";
};
"wireguard-peer.y/TBD/c0GkrRtekDkCb8TUnYYil8bSRPIjPDY650pz8=" = {
endpoint = "$HOME_ENDPOINT";
allowed-ips = "192.168.1.0/16";
};
};
profiles.wg-fritzbox = {
connection = {
id = "wg-fritzbox";
type = "wireguard";
interface-name = "wgfb";
autoconnect = false;
};
ipv4 = {
address = "192.168.178.201/24";
dns = "192.168.178.1";
method = "manual";
};
wireguard = {
listen-port = 51820;
private-key = "$FRITZBOX_PRIVATE_KEY";
};
"wireguard-peer.Jf/seKAL7kWm2qX9gf5Ln8FiN7OlPQB3CyRovDIOEHw=" = {
endpoint = "$FRITZBOX_ENDPOINT";
allowed-ips = "192.168.178.0/24;fd73:ea00:5841::/64";
preshared-key = "$FRITZBOX_PRESHARED_KEY";
};
};
};
};
}

View File

@@ -23,42 +23,42 @@
config = {
# services.tlp = {
# enable = true;
# settings = {
# # processor chooses frequencies itself but respects the limits set by the user
# CPU_DRIVER_OPMODE_ON_AC = "guided";
# CPU_DRIVER_OPMODE_ON_BAT = "guided";
services.tlp = {
enable = true;
settings = {
# processor chooses frequencies itself but respects the limits set by the user
CPU_DRIVER_OPMODE_ON_AC = "guided";
CPU_DRIVER_OPMODE_ON_BAT = "guided";
# # governor dictates global behavior of the CPU
# CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
# CPU_SCALING_GOVERNOR_ON_AC = "performance";
# governor dictates global behavior of the CPU
CPU_SCALING_GOVERNOR_ON_BAT = "powersave";
CPU_SCALING_GOVERNOR_ON_AC = "performance";
# # energy performance policy (EPP) sets the energy/performance balance
# CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power";
# CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
# energy performance policy (EPP) sets the energy/performance balance
CPU_ENERGY_PERF_POLICY_ON_BAT = "balance_power";
CPU_ENERGY_PERF_POLICY_ON_AC = "performance";
# # clock speeds reported by `sudo tlp-stat`
# # 623377 [kHz] and 5090910 [kHz]
# # CPU_SCALING_MIN_FREQ_ON_AC = 623377;
# # CPU_SCALING_MAX_FREQ_ON_AC = 5090910;
# # CPU_SCALING_MIN_FREQ_ON_BAT = 0;
# # # reduce max frequency on battery to save power
# # CPU_SCALING_MAX_FREQ_ON_BAT = 3000000;
# clock speeds reported by `sudo tlp-stat`
# 623377 [kHz] and 5090910 [kHz]
CPU_SCALING_MIN_FREQ_ON_AC = 623377;
CPU_SCALING_MAX_FREQ_ON_AC = 5090910;
CPU_SCALING_MIN_FREQ_ON_BAT = 0;
# reduce max frequency on battery to save power
CPU_SCALING_MAX_FREQ_ON_BAT = 3000000;
# # Allow the CPU to boost
# CPU_BOOST_ON_AC = 1;
# CPU_BOOST_ON_BAT = 1;
# Allow the CPU to boost
CPU_BOOST_ON_AC = 1;
CPU_BOOST_ON_BAT = 1;
# RADEON_DPM_PERF_LEVEL_ON_AC = "high";
# WIFI_PWR_ON_BAT = "off";
RADEON_DPM_PERF_LEVEL_ON_AC = "high";
# WIFI_PWR_ON_BAT = "off";
# # enable battery charge thresholds on the default battery
# STOP_CHARGE_THRESH_BAT0 = 1;
# };
# };
# enable battery charge thresholds on the default battery
STOP_CHARGE_THRESH_BAT0 = 1;
};
};
@@ -69,15 +69,15 @@
AllowSuspendThenHibernate=yes
'';
services.watt = {
enable = true;
settings = {
battery_charge_thresholds = [
40
80
];
};
};
# services.watt = {
# enable = true;
# settings = {
# battery_charge_thresholds = [
# 40
# 80
# ];
# };
# };
services.upower.enable = true;

12
modules/nixos/sops.nix Normal file
View File

@@ -0,0 +1,12 @@
{
inputs,
...
}:
{
sops.age.sshKeyPaths = [ "/etc/ssh/ssh_host_ed25519_key" ];
sops.defaultSopsFile = ./../../secrets/vpn.env;
sops.secrets.vpnEnvironment = {
sopsFile = ./../../secrets/vpn.env;
format = "dotenv";
};
}

Submodule secrets updated: 2aef0ad374...a51d89c420

View File

@@ -12,8 +12,10 @@
## Utils relevant to this user only
programs.git = {
enable = true;
userName = "Remy Moll";
userEmail = "me@moll.re";
settings = {
user.name = "Remy Moll";
user.email = "me@moll.re";
};
};
## XDG configuration
@@ -22,6 +24,7 @@
mimeApps = {
enable = true;
defaultApplications = {
# TODO
"inode/directory" = "org.gnome.Nautilus.desktop";
"application/zip" = "org.gnome.FileRoller.desktop";
"application/octet-stream" = "org.gnome.GHex.desktop";

View File

@@ -31,7 +31,6 @@ with lib.hm.gvariant;
../../modules/home-manager/kitty.nix
../../modules/home-manager/kubectl.nix
../../modules/home-manager/launcher.nix
../../modules/home-manager/notifications.nix
../../modules/home-manager/obsidian.nix
../../modules/home-manager/owncloud-client.nix
../../modules/home-manager/quickshell
@@ -39,7 +38,7 @@ with lib.hm.gvariant;
../../modules/home-manager/stylix.nix
../../modules/home-manager/thunderbird.nix
../../modules/home-manager/uxplay.nix
# ../../modules/home-manager/wofi.nix
../../modules/home-manager/wallpaper.nix
../../modules/home-manager/xdg-portals.nix
];
}