Compare commits

..

53 Commits

Author SHA1 Message Date
Lennart J. Kurzweg (Nx2)
eb812dc9e0 nix without llm 2024-12-23 12:58:31 +01:00
Lennart J. Kurzweg (Nx2)
6d4d118685 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2024-12-19 15:19:51 +01:00
Lennart J. Kurzweg (Nx2)
94a78942f8 helix-gpt is to slow 2024-12-19 15:19:47 +01:00
Lennart J. Kurzweg (Nx2)
5c2437cee1 renaming node to js also in imports 2024-12-19 15:19:31 +01:00
Lennart J. Kurzweg (Nx2)
fa8875c0ee Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2024-12-15 15:36:15 +01:00
Lennart J. Kurzweg (Nx2)
2040ce3ea0 fixup 2024-12-15 15:33:39 +01:00
Lennart J. Kurzweg (Nx2)
d9822a7a91 gitea (theme&++) 2024-12-15 15:31:43 +01:00
Lennart J. Kurzweg (Nx2)
d2e0b9d2d3 paperless 2024-12-15 15:14:52 +01:00
Lennart J. Kurzweg (Nx2)
ccdd036935 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2024-12-15 14:53:43 +01:00
Lennart J. Kurzweg (Nx2)
5d36be3804 flake bump 2024-12-15 14:50:36 +01:00
Lennart J. Kurzweg (Nx2)
2640b00b05 better zahtura scrolling 2024-12-15 14:37:58 +01:00
Lennart J. Kurzweg (Nx2)
9087100c42 qt 2024-12-15 14:35:54 +01:00
Lennart J. Kurzweg (Nx2)
5c9a92c68e helic cleanup + java 2024-12-15 14:35:43 +01:00
Lennart J. Kurzweg (Nx2)
1fd894a3b3 cleanup 2024-12-15 14:28:51 +01:00
Lennart J. Kurzweg (Nx2)
09316011ab helix-gpt 2024-12-15 14:23:20 +01:00
Lennart J. Kurzweg (Nx2)
fdce6c3d57 go 2024-12-15 14:22:31 +01:00
Lennart J. Kurzweg (Nx2)
1be03c39ad Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2024-12-02 21:48:54 +01:00
Lennart J. Kurzweg (Nx2)
a0c098ea1f Better "special" window handeling 2024-12-02 21:44:24 +01:00
Lennart J. Kurzweg (Nx2)
9a4e3d7a78 flake bump 2024-12-02 21:33:52 +01:00
Lennart J. Kurzweg (Nx2)
1005cc522d gnome-calendar 2024-12-02 21:05:13 +01:00
Lennart J. Kurzweg (Nx2)
729e7e5f0e gnu parallel 2024-12-02 21:04:55 +01:00
Lennart J. Kurzweg (Nx2)
79cbdc9f69 health-reminder++ 2024-12-02 21:04:41 +01:00
Lennart J. Kurzweg (Nx2)
c6ca7c95f4 zathura++ 2024-12-02 21:04:14 +01:00
Lennart J. Kurzweg (Nx2)
e878158b71 better yazi 2024-12-02 21:03:48 +01:00
Lennart J. Kurzweg (Nx2)
ed5f0784d1 longer mako 2024-12-02 21:03:28 +01:00
Lennart J. Kurzweg (Nx2)
051648954a gtk tryouts 2024-12-02 21:03:20 +01:00
Lennart J. Kurzweg (Nx2)
f5538e69a5 better color changing (maual) 2024-12-02 21:00:01 +01:00
Lennart J. Kurzweg (Nx2)
a82660b049 Gimp 2024-12-02 20:59:20 +01:00
Lennart J. Kurzweg (Nx2)
f828268b14 24.11 Vicuna 2024-12-02 20:59:00 +01:00
Lennart J. Kurzweg (Nx2)
02c7814ce4 better/less userChrome 2024-12-02 20:49:33 +01:00
Lennart J. Kurzweg (Nx2)
e36ffd828b chatterino update 2024-12-02 20:46:51 +01:00
Lennart J. Kurzweg (Nx2)
219a19a3a8 fonts (no name2) 2024-12-02 20:46:32 +01:00
Lennart J. Kurzweg (Nx2)
683913e0fe rice syntax 2024-12-02 20:42:49 +01:00
Lennart J. Kurzweg (Nx2)
837e64c377 wallpaper to color hotkey syntax fix 2024-11-21 22:55:09 +01:00
Lennart J. Kurzweg (Nx2)
f8497f5538 health reminder syntax fix 2 2024-11-21 22:33:47 +01:00
Lennart J. Kurzweg (Nx2)
9c2a69aa03 Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2024-11-21 22:28:42 +01:00
Lennart J. Kurzweg (Nx2)
a8c3a12089 xps to linux_6_11 2024-11-21 22:27:48 +01:00
Lennart J. Kurzweg (Nx2)
b8199c24ef health reminder syntax fix 2024-11-21 22:27:28 +01:00
Lennart J. Kurzweg (Nx2)
971cea5418 steam 2024-11-21 22:19:14 +01:00
Lennart J. Kurzweg (Nx2)
d12b9ddf2f Merge branch 'master' of ssh://ssh.nx2.site:50022/nx2/dotfiles 2024-11-21 22:17:48 +01:00
Lennart J. Kurzweg (Nx2)
e4ec830aaa better health reminder 2024-11-21 22:07:53 +01:00
Lennart J. Kurzweg (Nx2)
ebb1da3fc2 typo 2024-11-21 22:07:36 +01:00
Lennart J. Kurzweg (Nx2)
80e06b3f49 more userChrome 2024-11-21 22:07:31 +01:00
Lennart J. Kurzweg (Nx2)
605381b553 waybar prettier battery 2024-11-21 22:07:07 +01:00
Lennart J. Kurzweg (Nx2)
298d31e21a submaps als functions + TUDa submap 2024-11-21 22:06:55 +01:00
Lennart J. Kurzweg (Nx2)
947b824796 hyprland nxcolor-functions better 2024-11-21 22:06:03 +01:00
Lennart J. Kurzweg (Nx2)
edbe4e7f66 moved NORTH screen 2024-11-20 01:27:20 +01:00
Lennart J. Kurzweg (Nx2)
dbccb827ad games also on ACE 2024-11-20 01:25:42 +01:00
Lennart J. Kurzweg (Nx2)
f5af726382 nx2site gitea and vaultwarden (working) 2024-11-20 01:24:57 +01:00
Lennart J. Kurzweg (Nx2)
e95332cedb Merge branch 'master' of ssh://ssh.nx2.site:20022/nx2/dotfiles 2024-11-15 14:10:50 +01:00
Lennart J. Kurzweg (Nx2)
6a7d8fe4be nx2site002 (unready) 2024-11-15 14:10:48 +01:00
Lennart J. Kurzweg (Nx2)
37eb70db63 Merge branch 'master' of ssh://ssh.nx2.site:20022/nx2/dotfiles 2024-11-14 01:21:42 +01:00
Lennart J. Kurzweg (Nx2)
77e9aa4ddd games 2024-11-14 01:21:34 +01:00
45 changed files with 1572 additions and 1004 deletions

9
configuration.nix Executable file → Normal file
View File

@@ -6,6 +6,7 @@
./system-modules/auto-mount.nix ./system-modules/auto-mount.nix
./system-modules/hardware-configuration.nix ./system-modules/hardware-configuration.nix
./system-modules/fuse.nix ./system-modules/fuse.nix
./system-modules/games.nix
./system-modules/nvidia.nix ./system-modules/nvidia.nix
./system-modules/users.nix ./system-modules/users.nix
./system-modules/sound.nix ./system-modules/sound.nix
@@ -41,8 +42,9 @@
./system-modules/nx2site.nix ./system-modules/nx2site.nix
./system-modules/postgres.nix ./system-modules/postgres.nix
./system-modules/nx2site/proxy.nix ./system-modules/nx2site/proxy.nix
# ./system-modules/nx2site/gitea.nix ./system-modules/nx2site/gitea.nix
# ./system-modules/nx2site/vaultwarden.nix ./system-modules/nx2site/vaultwarden.nix
./system-modules/nx2site/paperless.nix
] else []); ] else []);
# Set your time zone. # Set your time zone.
@@ -99,6 +101,7 @@
blueman blueman
dmidecode dmidecode
file file
parallel
# ]) ++ (with pkgs-unstable; [ # ]) ++ (with pkgs-unstable; [
# # sendme # # sendme
]); ]);
@@ -115,7 +118,7 @@
xwayland.enable = true; xwayland.enable = true;
}; };
system.stateVersion = "24.05"; system.stateVersion = "24.11";
nixpkgs.config.allowUnfree = true; nixpkgs.config.allowUnfree = true;

View File

@@ -6,8 +6,7 @@ pkgs: rec {
rounding = 3; rounding = 3;
gap-size = 5; gap-size = 5;
border-width = 2; border-width = 2;
color = color = let
let
dark = (-0.5); dark = (-0.5);
bright = (0.5); bright = (0.5);
alter-set = let f = lib.alter-luminace-hex; in color-name: color-value: { base = color-value; dark = f color-value dark; bright = f color-value bright; }; alter-set = let f = lib.alter-luminace-hex; in color-name: color-value: { base = color-value; dark = f color-value dark; bright = f color-value bright; };
@@ -26,7 +25,7 @@ pkgs: rec {
facolor = builtins.mapAttrs alter-set (builtins.fromJSON (builtins.readFile ./colors.json)).to_alter; facolor = builtins.mapAttrs alter-set (builtins.fromJSON (builtins.readFile ./colors.json)).to_alter;
fbcolor = (builtins.fromJSON (builtins.readFile ./colors.json)).base; fbcolor = (builtins.fromJSON (builtins.readFile ./colors.json)).base;
fcolor = facolor // fbcolor; fcolor = facolor // fbcolor;
xcolor = with ccolor; with fcolor; rec { xcolor = with ccolor; with fcolor; {
background = "#000000"; background = "#000000";
# foreground = "#dddddd"; # foreground = "#dddddd";
# accent = blue; # accent = blue;
@@ -42,8 +41,7 @@ pkgs: rec {
in ccolor // fcolor // xcolor; in ccolor // fcolor // xcolor;
font = { font = {
code = { code = {
name = "JetBrainsMono-NF"; name = "JetBrainsMono Nerd Font";
name2 = "JetBrainsMono Nerd Font";
package = (pkgs.nerdfonts.override { fonts = [ "JetBrainsMono" ]; }); package = (pkgs.nerdfonts.override { fonts = [ "JetBrainsMono" ]; });
# name = "CascadiaCove-NF"; # name = "CascadiaCove-NF";
# package = (pkgs.nerdfonts.override { fonts = [ "CascadiaCode" ]; }); # package = (pkgs.nerdfonts.override { fonts = [ "CascadiaCode" ]; });

300
flake.lock generated Executable file → Normal file
View File

@@ -8,11 +8,11 @@
"systems": "systems" "systems": "systems"
}, },
"locked": { "locked": {
"lastModified": 1728710667, "lastModified": 1733625860,
"narHash": "sha256-9HR9EePhzweUAUPUccByNYxKQzfFAnxfu2BXTLqOLZQ=", "narHash": "sha256-YiLUDw14NaavML8y9rxXxO7q+j3b/ghQhBmIy0+/Zmk=",
"owner": "KZDKM", "owner": "KZDKM",
"repo": "Hyprspace", "repo": "Hyprspace",
"rev": "e8406a7708bceb3b5bedf56b67490dbe3d27e6f8", "rev": "e2d561c933cd085d68bf0b39c4f78870ad0abbc2",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -41,11 +41,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1728902391, "lastModified": 1731959031,
"narHash": "sha256-44bnoY0nAvbBQ/lVjmn511yL39Sv7SknV0BDxn34P3Q=", "narHash": "sha256-TGcvIjftziC1CjuiHCzrYDwmOoSFYIhdiKmLetzB5L0=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "aquamarine", "repo": "aquamarine",
"rev": "9874e08eec85b5542ca22494e127b0cdce46b786", "rev": "4468981c1c50999f315baa1508f0e53c4ee70c52",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -124,11 +124,11 @@
"nixpkgs-lib": "nixpkgs-lib" "nixpkgs-lib": "nixpkgs-lib"
}, },
"locked": { "locked": {
"lastModified": 1727826117, "lastModified": 1733312601,
"narHash": "sha256-K5ZLCyfO/Zj9mPFldf3iwS6oZStJcU4tSpiXTMYaaL0=", "narHash": "sha256-4pDvzqnegAfRkPwO3wmwBhVi/Sye1mzps0zHWYnP88c=",
"owner": "hercules-ci", "owner": "hercules-ci",
"repo": "flake-parts", "repo": "flake-parts",
"rev": "3d04084d54bedc3d6b8b736c70ef449225c361b1", "rev": "205b12d8b7cd4802fbcb8e8ef6a0f1408781a4f9",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -176,6 +176,28 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils-plus": {
"inputs": {
"flake-utils": [
"yazi-plugins",
"flake-utils"
]
},
"locked": {
"lastModified": 1696281284,
"narHash": "sha256-xcmtTmoiiAOSk4abifbtqVZk0iwBcqJfg47iUbkwhcE=",
"owner": "gytis-ivaskevicius",
"repo": "flake-utils-plus",
"rev": "6cf1e312fb259693c4930d07ca3cbe1d07ef4a48",
"type": "github"
},
"original": {
"owner": "gytis-ivaskevicius",
"ref": "v1.4.0",
"repo": "flake-utils-plus",
"type": "github"
}
},
"flake-utils_2": { "flake-utils_2": {
"inputs": { "inputs": {
"systems": "systems_4" "systems": "systems_4"
@@ -194,6 +216,27 @@
"type": "github" "type": "github"
} }
}, },
"flake-utils_3": {
"inputs": {
"systems": [
"yazi-plugins",
"systems"
]
},
"locked": {
"lastModified": 1710146030,
"narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=",
"owner": "numtide",
"repo": "flake-utils",
"rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a",
"type": "github"
},
"original": {
"owner": "numtide",
"repo": "flake-utils",
"type": "github"
}
},
"gitignore": { "gitignore": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -238,6 +281,28 @@
"type": "github" "type": "github"
} }
}, },
"haumea": {
"inputs": {
"nixpkgs": [
"yazi-plugins",
"nixpkgs"
]
},
"locked": {
"lastModified": 1685133229,
"narHash": "sha256-FePm/Gi9PBSNwiDFq3N+DWdfxFq0UKsVVTJS3cQPn94=",
"owner": "nix-community",
"repo": "haumea",
"rev": "34dd58385092a23018748b50f9b23de6266dffc2",
"type": "github"
},
"original": {
"owner": "nix-community",
"ref": "v0.2.2",
"repo": "haumea",
"type": "github"
}
},
"home-manager": { "home-manager": {
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
@@ -245,16 +310,16 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1726989464, "lastModified": 1733951536,
"narHash": "sha256-Vl+WVTJwutXkimwGprnEtXc/s/s8sMuXzqXaspIGlwM=", "narHash": "sha256-Zb5ZCa7Xj+0gy5XVXINTSr71fCfAv+IKtmIXNrykT54=",
"owner": "nix-community", "owner": "nix-community",
"repo": "home-manager", "repo": "home-manager",
"rev": "2f23fa308a7c067e52dfcc30a0758f47043ec176", "rev": "1318c3f3b068cdcea922fa7c1a0a1f0c96c22f5f",
"type": "github" "type": "github"
}, },
"original": { "original": {
"owner": "nix-community", "owner": "nix-community",
"ref": "release-24.05", "ref": "release-24.11",
"repo": "home-manager", "repo": "home-manager",
"type": "github" "type": "github"
} }
@@ -288,11 +353,42 @@
"type": "github" "type": "github"
} }
}, },
"hyprgraphics": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1733248371,
"narHash": "sha256-FFLJzFTyNhS7tBEEECx0B8Ye/bpmxhFVEKlECgMLc6c=",
"owner": "hyprwm",
"repo": "hyprgraphics",
"rev": "cc95e5babc6065bc3ab4cd195429a9900836ef13",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprgraphics",
"type": "github"
}
},
"hyprland": { "hyprland": {
"inputs": { "inputs": {
"aquamarine": "aquamarine", "aquamarine": "aquamarine",
"hyprcursor": "hyprcursor", "hyprcursor": "hyprcursor",
"hyprgraphics": "hyprgraphics",
"hyprland-protocols": "hyprland-protocols", "hyprland-protocols": "hyprland-protocols",
"hyprland-qtutils": "hyprland-qtutils",
"hyprlang": "hyprlang", "hyprlang": "hyprlang",
"hyprutils": "hyprutils", "hyprutils": "hyprutils",
"hyprwayland-scanner": "hyprwayland-scanner", "hyprwayland-scanner": "hyprwayland-scanner",
@@ -302,11 +398,11 @@
"xdph": "xdph" "xdph": "xdph"
}, },
"locked": { "locked": {
"lastModified": 1729629261, "lastModified": 1734219437,
"narHash": "sha256-IJtor2qFpsZkCm4UMnCHOSosW9GXKZVOm7DILtJJgoM=", "narHash": "sha256-gOSSJHm9LKGTO1VaHy8Rly1OO/cOyiIb+XI6iFEdooI=",
"ref": "refs/heads/main", "ref": "refs/heads/main",
"rev": "29997ef4ba8ef0a80390e80199998d1390177454", "rev": "db249648776875ce3142141d0d3055e43ce606aa",
"revCount": 5366, "revCount": 5542,
"submodules": true, "submodules": true,
"type": "git", "type": "git",
"url": "https://github.com/hyprwm/Hyprland" "url": "https://github.com/hyprwm/Hyprland"
@@ -334,11 +430,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1729596320, "lastModified": 1733324289,
"narHash": "sha256-sBPr6O2Ad916f+L7biAjmJVx4TLDITC4joKgeOT47V8=", "narHash": "sha256-5gCIIiQT9JlBPO1M98j1Aaboa2CTKtwBqiksCLf6qC0=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprland-plugins", "repo": "hyprland-plugins",
"rev": "4d7f0b5d8b952f31f7d2e29af22ab0a55ca5c219", "rev": "2530394e67b436f4aea8225111cf37c1403ccb78",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -372,6 +468,35 @@
"type": "github" "type": "github"
} }
}, },
"hyprland-qtutils": {
"inputs": {
"hyprutils": [
"hyprland",
"hyprutils"
],
"nixpkgs": [
"hyprland",
"nixpkgs"
],
"systems": [
"hyprland",
"systems"
]
},
"locked": {
"lastModified": 1733472316,
"narHash": "sha256-PvXiFLIExJEJj+goLbIuXLTN5CSDSAUsAfiYSdbbWg0=",
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"rev": "969427419276c7ee170301ef1ebe0f68eb6eb2e2",
"type": "github"
},
"original": {
"owner": "hyprwm",
"repo": "hyprland-qtutils",
"type": "github"
}
},
"hyprlang": { "hyprlang": {
"inputs": { "inputs": {
"hyprutils": [ "hyprutils": [
@@ -407,11 +532,11 @@
"nixpkgs": "nixpkgs_2" "nixpkgs": "nixpkgs_2"
}, },
"locked": { "locked": {
"lastModified": 1725107917, "lastModified": 1732716575,
"narHash": "sha256-6on3nwb3gB4t+P/2IExgGhVLVgAkF6ZiE5x+qcQHEXU=", "narHash": "sha256-OvFJCj52HuXxRrcCXrieIoiOzbeYFvDXNO8SndFiyAE=",
"owner": "h3rmt", "owner": "h3rmt",
"repo": "hyprswitch", "repo": "hyprswitch",
"rev": "f478c394ad6db5ba268f80052f1eb2366366b21e", "rev": "2b77dbcb422123dfce9bb82d698649e9757f35e0",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -433,11 +558,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1728941256, "lastModified": 1732288281,
"narHash": "sha256-WRypmcZ2Bw94lLmcmxYokVOHPJSZ7T06V49QZ4tkZeQ=", "narHash": "sha256-XTU9B53IjGeJiJ7LstOhuxcRjCOFkQFl01H78sT9Lg4=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "hyprutils", "repo": "hyprutils",
"rev": "fd4be8b9ca932f7384e454bcd923c5451ef2aa85", "rev": "b26f33cc1c8a7fd5076e19e2cce3f062dca6351c",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -498,11 +623,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1728888510, "lastModified": 1733392399,
"narHash": "sha256-nsNdSldaAyu6PE3YUA+YQLqUDJh+gRbBooMMekZJwvI=", "narHash": "sha256-kEsTJTUQfQFIJOcLYFt/RvNxIK653ZkTBIs4DG+cBns=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "a3c0b3b21515f74fd2665903d4ce6bc4dc81c77c", "rev": "d0797a04b81caeae77bcff10a9dde78bc17f5661",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -514,11 +639,11 @@
}, },
"nixpkgs-latest": { "nixpkgs-latest": {
"locked": { "locked": {
"lastModified": 1729631290, "lastModified": 1734268571,
"narHash": "sha256-zVL79jvDihxcnq9FKkAoILYWxGmxCw1DGdBnpv/B+3s=", "narHash": "sha256-PFmGflNBdQx3TNDSAY3Xs6VmhplM1kBuXEj+5SGR0kA=",
"owner": "nixos", "owner": "nixos",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "1f9d2cf67508efd9b5e81cdf7af556bbbfe02377", "rev": "f03cbc4e787cbed5419e4434e68528a302f5f34a",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -530,23 +655,23 @@
}, },
"nixpkgs-lib": { "nixpkgs-lib": {
"locked": { "locked": {
"lastModified": 1727825735, "lastModified": 1733096140,
"narHash": "sha256-0xHYkMkeLVQAMa7gvkddbPqpxph+hDzdu1XdGPJR+Os=", "narHash": "sha256-1qRH7uAUsyQI7R1Uwl4T+XvdNv778H0Nb5njNrqvylY=",
"type": "tarball", "type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/fb192fec7cc7a4c26d51779e9bab07ce6fa5597a.tar.gz" "url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz"
}, },
"original": { "original": {
"type": "tarball", "type": "tarball",
"url": "https://github.com/NixOS/nixpkgs/archive/fb192fec7cc7a4c26d51779e9bab07ce6fa5597a.tar.gz" "url": "https://github.com/NixOS/nixpkgs/archive/5487e69da40cbd611ab2cadee0b4637225f7cfae.tar.gz"
} }
}, },
"nixpkgs-stable": { "nixpkgs-stable": {
"locked": { "locked": {
"lastModified": 1720386169, "lastModified": 1730741070,
"narHash": "sha256-NGKVY4PjzwAa4upkGtAMz1npHGoRzWotlSnVlqI40mo=", "narHash": "sha256-edm8WG19kWozJ/GqyYx2VjW99EdhjKwbY3ZwdlPAAlo=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "194846768975b7ad2c4988bdb82572c00222c0d7", "rev": "d063c1dd113c91ab27959ba540c0d9753409edf3",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -572,29 +697,13 @@
"type": "github" "type": "github"
} }
}, },
"nixpkgs-stable_3": {
"locked": {
"lastModified": 1729357638,
"narHash": "sha256-66RHecx+zohbZwJVEPF7uuwHeqf8rykZTMCTqIrOew4=",
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "bb8c2cf7ea0dd2e18a52746b2c3a5b0c73b93c22",
"type": "github"
},
"original": {
"owner": "NixOS",
"ref": "release-24.05",
"repo": "nixpkgs",
"type": "github"
}
},
"nixpkgs-unstable": { "nixpkgs-unstable": {
"locked": { "locked": {
"lastModified": 1729413321, "lastModified": 1733940404,
"narHash": "sha256-I4tuhRpZFa6Fu6dcH9Dlo5LlH17peT79vx1y1SpeKt0=", "narHash": "sha256-Pj39hSoUA86ZePPF/UXiYHHM7hMIkios8TYG29kQT4g=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "1997e4aa514312c1af7e2bda7fad1644e778ff26", "rev": "5d67ea6b4b63378b9c13be21e2ec9d1afc921713",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -636,16 +745,16 @@
}, },
"nixpkgs_4": { "nixpkgs_4": {
"locked": { "locked": {
"lastModified": 1729449015, "lastModified": 1734083684,
"narHash": "sha256-Gf04dXB0n4q0A9G5nTGH3zuMGr6jtJppqdeljxua1fo=", "narHash": "sha256-5fNndbndxSx5d+C/D0p/VF32xDiJCJzyOqorOYW4JEo=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "89172919243df199fe237ba0f776c3e3e3d72367", "rev": "314e12ba369ccdb9b352a4db26ff419f7c49fa84",
"type": "github" "type": "github"
}, },
"original": { "original": {
"id": "nixpkgs", "id": "nixpkgs",
"ref": "nixos-24.05", "ref": "nixos-24.11",
"type": "indirect" "type": "indirect"
} }
}, },
@@ -692,11 +801,11 @@
"nixpkgs-stable": "nixpkgs-stable" "nixpkgs-stable": "nixpkgs-stable"
}, },
"locked": { "locked": {
"lastModified": 1728778939, "lastModified": 1733318908,
"narHash": "sha256-WybK5E3hpGxtCYtBwpRj1E9JoiVxe+8kX83snTNaFHE=", "narHash": "sha256-SVQVsbafSM1dJ4fpgyBqLZ+Lft+jcQuMtEL3lQWx2Sk=",
"owner": "cachix", "owner": "cachix",
"repo": "git-hooks.nix", "repo": "git-hooks.nix",
"rev": "ff68f91754be6f3427e4986d7949e6273659be1d", "rev": "6f4e2a2112050951a314d2733a994fbab94864c6",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -749,6 +858,7 @@
"nixpkgs-unstable": "nixpkgs-unstable", "nixpkgs-unstable": "nixpkgs-unstable",
"sops-nix": "sops-nix", "sops-nix": "sops-nix",
"yazi": "yazi", "yazi": "yazi",
"yazi-plugins": "yazi-plugins",
"zen-browser": "zen-browser" "zen-browser": "zen-browser"
} }
}, },
@@ -802,15 +912,14 @@
"inputs": { "inputs": {
"nixpkgs": [ "nixpkgs": [
"nixpkgs" "nixpkgs"
], ]
"nixpkgs-stable": "nixpkgs-stable_3"
}, },
"locked": { "locked": {
"lastModified": 1729587807, "lastModified": 1733965552,
"narHash": "sha256-YOc4033a/j1TbdLfkaSOSX2SrvlmuM+enIFoveNTCz4=", "narHash": "sha256-GZ4YtqkfyTjJFVCub5yAFWsHknG1nS/zfk7MuHht4Fs=",
"owner": "Mic92", "owner": "Mic92",
"repo": "sops-nix", "repo": "sops-nix",
"rev": "26642e8f193f547e72d38cd4c0c4e45b49236d27", "rev": "2d73fc6ac4eba4b9a83d3cb8275096fbb7ab4004",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -879,6 +988,21 @@
"type": "github" "type": "github"
} }
}, },
"systems_5": {
"locked": {
"lastModified": 1689347949,
"narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=",
"owner": "nix-systems",
"repo": "default-linux",
"rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68",
"type": "github"
},
"original": {
"owner": "nix-systems",
"repo": "default-linux",
"type": "github"
}
},
"xdph": { "xdph": {
"inputs": { "inputs": {
"hyprland-protocols": [ "hyprland-protocols": [
@@ -907,11 +1031,11 @@
] ]
}, },
"locked": { "locked": {
"lastModified": 1728166987, "lastModified": 1733157064,
"narHash": "sha256-w6dVTguAn9zJ+7aPOhBQgDz8bn6YZ7b56cY8Kg5HJRI=", "narHash": "sha256-NetqJHAN4bbZDQADvpep+wXk2AbMZ2bN6tINz8Kpz6M=",
"owner": "hyprwm", "owner": "hyprwm",
"repo": "xdg-desktop-portal-hyprland", "repo": "xdg-desktop-portal-hyprland",
"rev": "fb9c8d665af0588bb087f97d0f673ddf0d501787", "rev": "fd85ef39369f95eed67fdf3f025e86916edeea2f",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -927,11 +1051,11 @@
"rust-overlay": "rust-overlay_2" "rust-overlay": "rust-overlay_2"
}, },
"locked": { "locked": {
"lastModified": 1729473414, "lastModified": 1734153997,
"narHash": "sha256-ffiEVFCUMnShcSa4hvCbT1EQeu7c2lVOk6OdaxjiUmU=", "narHash": "sha256-HKYX13kmksdqnAFs1XwflnDN7hAqquUmwOBAWDvTFuk=",
"owner": "sxyazi", "owner": "sxyazi",
"repo": "yazi", "repo": "yazi",
"rev": "0e118b5b3a5baacf7fe62971e2bfe2b0ad972bab", "rev": "6e1948e7e1871126e38cf463121c61e322f3884b",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -940,6 +1064,30 @@
"type": "github" "type": "github"
} }
}, },
"yazi-plugins": {
"inputs": {
"flake-utils": "flake-utils_3",
"flake-utils-plus": "flake-utils-plus",
"haumea": "haumea",
"nixpkgs": [
"nixpkgs"
],
"systems": "systems_5"
},
"locked": {
"lastModified": 1732366073,
"narHash": "sha256-rTWuZ7yr3JeCcmeWgbgsribsxyN5TH14vzZrsB869WA=",
"owner": "lordkekz",
"repo": "nix-yazi-plugins",
"rev": "064746e112746ddce3527a77d4524c2447672754",
"type": "github"
},
"original": {
"owner": "lordkekz",
"repo": "nix-yazi-plugins",
"type": "github"
}
},
"zen-browser": { "zen-browser": {
"inputs": { "inputs": {
"nixpkgs": "nixpkgs_6" "nixpkgs": "nixpkgs_6"

6
flake.nix Executable file → Normal file
View File

@@ -2,10 +2,10 @@
description = "Multisystem NixOS Flake of Lennart J. Kurzweg"; description = "Multisystem NixOS Flake of Lennart J. Kurzweg";
inputs = { inputs = {
nixpkgs = { url = "nixpkgs/nixos-24.05"; }; nixpkgs = { url = "nixpkgs/nixos-24.11"; };
nixpkgs-unstable = { url = "nixpkgs/nixos-unstable"; }; nixpkgs-unstable = { url = "nixpkgs/nixos-unstable"; };
nixpkgs-latest = { url = "github:nixos/nixpkgs?ref=master"; }; nixpkgs-latest = { url = "github:nixos/nixpkgs?ref=master"; };
home-manager = { url = "github:nix-community/home-manager/release-24.05"; inputs.nixpkgs.follows = "nixpkgs"; }; home-manager = { url = "github:nix-community/home-manager/release-24.11"; inputs.nixpkgs.follows = "nixpkgs"; };
sops-nix = { url = "github:Mic92/sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; }; sops-nix = { url = "github:Mic92/sops-nix"; inputs.nixpkgs.follows = "nixpkgs"; };
lanzaboote = { url = "github:nix-community/lanzaboote/v0.3.0"; }; lanzaboote = { url = "github:nix-community/lanzaboote/v0.3.0"; };
@@ -14,8 +14,8 @@
Hyprspace = { url = "github:KZDKM/Hyprspace"; inputs.hyprland.follows = "hyprland"; }; Hyprspace = { url = "github:KZDKM/Hyprspace"; inputs.hyprland.follows = "hyprland"; };
hyprswitch = { url = "github:h3rmt/hyprswitch/release"; }; hyprswitch = { url = "github:h3rmt/hyprswitch/release"; };
# firefox-addons = { url = "gitlab:rycee/nur-expressions?dir=pkgs/firefox-addons"; inputs.nixpkgs.follows = "nixpkgs"; };
yazi.url = "github:sxyazi/yazi"; yazi.url = "github:sxyazi/yazi";
yazi-plugins = { url = "github:lordkekz/nix-yazi-plugins"; inputs.nixpkgs.follows = "nixpkgs"; };
zen-browser.url = "github:MarceColl/zen-browser-flake"; zen-browser.url = "github:MarceColl/zen-browser-flake";
}; };

Binary file not shown.

View File

@@ -1,51 +1,31 @@
{ pkgs, lib, rice, user, secrets, ... }: { pkgs, lib, rice, user, secrets, ... }:
let let
channels = [ channels = [
"Caedrel"
"NoWay4u_Sir"
"zackrawrr"
"agurin" "agurin"
"asmongold" "asmongold"
"Broeki" "Caedrel"
"Broxah"
# "Caedrel"
"chrissyofficial"
"EintrachtSpandau" "EintrachtSpandau"
"GamesDoneQuick" "GamesDoneQuick"
"gdolphn" "gdolphn"
"GRONKH" "GRONKH"
"handofblood" "handofblood"
"HisWattson" "HisWattson"
"imls"
"iskall85"
"Jankos" "Jankos"
"Karni"
"KuruHS" "KuruHS"
"kutcherlol" "kutcherlol"
"LCK"
"LCS"
"LEC" "LEC"
"lol_nemesis" "lol_nemesis"
"loltyler1"
"LPL"
"maxim"
"NASA" "NASA"
"NNOPrime" "NNOPrime"
# "NoWay4u_Sir" "NoWay4u_Sir"
"OfficialMikeShinoda" "OfficialMikeShinoda"
"ow_esports"
"PrimeGaming"
"PrimeLeague"
"Rekkles" "Rekkles"
"riotgames" "riotgames"
"Sola"
"ThePrimeagen" "ThePrimeagen"
"Tolkin" "Tolkin"
"Trick2g"
"TSM_ImperialHal" "TSM_ImperialHal"
"Xisuma" "Xisuma"
# "zackrawrr" "zackrawrr"
]; ];
tabber = channel-name: { tabber = channel-name: {
highlightsEnabled = true; highlightsEnabled = true;

View File

@@ -5,17 +5,18 @@
<div class="color-container" style="border-color: ${color-set.base}"> <div class="color-container" style="border-color: ${color-set.base}">
<div class="color-box" style="background: ${color-set.dark}; height: ${builtins.toString size}px;"> <div class="color-box" style="background: ${color-set.dark}; height: ${builtins.toString size}px;">
<p style="color: ${color-set.bright}"> ${color-name}.dark </p> <p style="color: ${color-set.bright}"> ${color-name}.dark </p>
<p style="color: ${color-set.bright}"> ${color-set.dark} </p>
</div> </div>
<div class="color-box" style="background: ${color-set.base}; height: ${builtins.toString size}px;"> <div class="color-box" style="background: ${color-set.base}; height: ${builtins.toString size}px;">
<p class="dynamic-text"> ${color-name}.base </p> <p class="dynamic-text"> ${color-name}.base </p>
<p class="dynamic-text"> ${color-set.base} </p>
</div> </div>
<div class="color-box" style="background: ${color-set.bright}; height: ${builtins.toString size}px;"> <div class="color-box" style="background: ${color-set.bright}; height: ${builtins.toString size}px;">
<p style="color: ${color-set.dark}"> ${color-name}.bright </p> <p style="color: ${color-set.dark}"> ${color-name}.bright </p>
<p style="color: ${color-set.dark}"> ${color-set.bright} </p>
</div> </div>
</div> </div>
''; '';
in /* html */ '' in /* html */ ''
<!DOCTYPE html> <!DOCTYPE html>
<head> <head>
@@ -37,7 +38,7 @@
color: ${foreground}; color: ${foreground};
width: fit-content; width: fit-content;
margin: 10px auto 10px auto; margin: 10px auto 10px auto;
background: ${background}; background: rgba(${rice.lib.hex-to-rgb-comma-string background},${builtins.toString rice.transparency});
border: ${builtins.toString rice.border-width}px solid ${border}; border: ${builtins.toString rice.border-width}px solid ${border};
border-radius: ${builtins.toString rice.rounding}px; border-radius: ${builtins.toString rice.rounding}px;
padding: ${builtins.toString rice.gap-size}px; padding: ${builtins.toString rice.gap-size}px;
@@ -46,7 +47,7 @@
margin: ${builtins.toString rice.gap-size}px; margin: ${builtins.toString rice.gap-size}px;
} }
.color-container { .color-container {
font-family: ${rice.font.code.name2}; font-family: ${rice.font.code.name};
display: flex; display: flex;
gap: ${builtins.toString rice.gap-size}px; gap: ${builtins.toString rice.gap-size}px;
margin: ${builtins.toString rice.gap-size}px; margin: ${builtins.toString rice.gap-size}px;
@@ -66,18 +67,20 @@
${cb accent "accent" 100} ${cb accent "accent" 100}
${cb secondary "secondary" 100} ${cb secondary "secondary" 100}
${cb tertiary "tertiary" 100} ${cb tertiary "tertiary" 100}
${cb weird "weird" 75} ${cb weird "weird" 100}
${cb special "special" 75} ${cb special "special" 100}
${cb positive "positive" 30} <br>
${cb negative "negative" 30} ${cb positive "positive" 70}
${cb black "black" 25} ${cb negative "negative" 70}
${cb white "white" 25} <br>
${cb blue "blue" 25} ${cb black "black" 50}
${cb cyan "cyan" 25} ${cb white "white" 50}
${cb green "green" 25} ${cb blue "blue" 50}
${cb magenta "magenta" 25} ${cb cyan "cyan" 50}
${cb red "red" 25} ${cb green "green" 50}
${cb yellow "yellow" 25} ${cb magenta "magenta" 50}
${cb red "red" 50}
${cb yellow "yellow" 50}
</body> </body>
<script> <script>
function getLuminance(color) { function getLuminance(color) {

View File

@@ -9,14 +9,7 @@ lib.mkIf (host != "NxACE")
programs.thunderbird = let programs.thunderbird = let
inherit (lib.generators) toJSON; inherit (lib.generators) toJSON;
extensions = toJSON {} { extensions = toJSON {} {
"default-theme@mozilla.org" = "5787f490-29b8-436e-a111-640da8590790";
"google@search.mozilla.org" = "cc340383-7068-4b32-a10f-9f19334bfebc";
"ddg@search.mozilla.org" = "0c340210-f7ab-48e8-9778-600ed5d00160";
"amazondotcom@search.mozilla.org" = "881d8fdf-5772-4e33-81ff-faac2d1fa92c";
"wikipedia@search.mozilla.org" = "7ea3d39d-3eea-430f-9bd7-f902d8124d45";
"bing@search.mozilla.org" = "f480cce8-68af-4082-908e-f8996153352b";
"addon@darkreader.org" = "71d6c69d-55f9-4c56-888c-abdcf6efd73d"; "addon@darkreader.org" = "71d6c69d-55f9-4c56-888c-abdcf6efd73d";
"lightningcalendartabs@jlx.84" = "12d48e41-412e-4d09-835a-fa6fb8c180eb";
}; };
in { in {
enable = true; enable = true;
@@ -48,23 +41,20 @@ lib.mkIf (host != "NxACE")
"mailnews.headers.showUserAgent" = true; "mailnews.headers.showUserAgent" = true;
"toolkit.legacyUserProfileCustomizations.stylesheets" = true; "toolkit.legacyUserProfileCustomizations.stylesheets" = true;
}; };
userChrome = with rice.color; /* css */ '' # userChrome = with rice.color; /* css */ ''
* { # * {
color: ${rice.lib.hex-to-rgb-comma-string foreground} !important; # color: ${foreground} !important;
background-color: rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) !important; # background-color: rgba(${rice.lib.hex-to-rgb-comma-string background},${builtins.toString 0.1}) !important;
border: none !important; # border: none !important;
} # -moz-appearance: none !important;
treechildren::-moz-tree-row(odd), treechildren::-moz-tree-row(even) { # }
background-color: rgba(${rice.lib.hex-to-rgb-comma-string background}, ${builtins.toString rice.transparency}) !important; # '';
}
'';
}; };
}; };
}; };
accounts.email.accounts = accounts.email.accounts = let
let
OAuth2Settings = id: { OAuth2Settings = id: {
"mail.smtpserver.smtp_${id}.authMethod" = 10; "mail.smtpserver.smtp_${id}.authMethod" = 10;
"mail.server.server_${id}.authMethod" = 10; "mail.server.server_${id}.authMethod" = 10;

View File

@@ -1,6 +1,7 @@
# { pkgs-unstable, secrets, user, system, inputs, ...}: # { pkgs-unstable, secrets, user, system, inputs, ...}:
{ rice, user, ... }: { rice, user, ... }:
# browser.tabs.allow_transparent_browser # browser.tabs.allow_transparent_browser
# https://www.reddit.com/r/FirefoxCSS/comments/1dqws4b/firefox_128_will_allow_the_main_browser_content/
{ {
home.file = with rice.color; let home.file = with rice.color; let
blur = builtins.toString 20; blur = builtins.toString 20;
@@ -110,9 +111,15 @@
/* new-tab */ /* new-tab */
@-moz-document url-prefix(about:home), url-prefix(about:newtab) { @-moz-document url-prefix(about:home), url-prefix(about:newtab) {
:root{
--newtab-background-color-secondary: ${background} !important;
}
body, html { body, html {
background: transparent !important; background: transparent !important;
} }
.tile, .search-handoff-button {
border: ${builtins.toString rice.border-width}px solid ${border} !important;
}
} }
@-moz-document domain(youtube.com) { @-moz-document domain(youtube.com) {
@@ -140,7 +147,6 @@
@-moz-document domain(reddit.com) { @-moz-document domain(reddit.com) {
header { header {
background-color: rgba(${rice.lib.hex-to-rgb-comma-string background},${builtins.toString rice.transparency}) !important; background-color: rgba(${rice.lib.hex-to-rgb-comma-string background},${builtins.toString rice.transparency}) !important;
backdrop-filter: blur(20px);
} }
body, html, reddit-sidebar-nav, shreddit-post, aside, .reddit-search-bar{ body, html, reddit-sidebar-nav, shreddit-post, aside, .reddit-search-bar{
background-color: transparent !important; background-color: transparent !important;
@@ -171,6 +177,24 @@
} }
} }
@media (prefers-color-scheme: dark) {
:root .theme-system {
--color-bg: transtparent !important;
--color-text: ${rice.color.foreground}
}
}
@-moz-document domain(developer.mozilla.org) {
html, body {
background-color: transparent !important;
}
.top-navigation, .article-actions-container {
background-color: rgba(0,0,0,1) !important;
backdrop-filter: blur(100px);
border-radius: ${builtins.toString rice.rounding}px;
}
}
@-moz-document domain(github.com) { @-moz-document domain(github.com) {
body, html, header, #repository-container-header, .bgColor-muted, section { body, html, header, #repository-container-header, .bgColor-muted, section {
background-color: transparent !important; background-color: transparent !important;
@@ -182,7 +206,8 @@
background-color: transparent !important; background-color: transparent !important;
} }
header, footer { header, footer {
background-color: rgba(0,0,0,0.5) !important; background-color: rgba(0,0,0,1) !important;
backdrop-filter: blur(100px);
border-radius: ${builtins.toString rice.rounding}px; border-radius: ${builtins.toString rice.rounding}px;
} }
} }
@@ -203,6 +228,37 @@
background-size: 2vmin 2vmin !important; background-size: 2vmin 2vmin !important;
} }
} }
@-moz-document domain(pw.nx2.site) {
html {
background: radial-gradient(rgba(255, 255, 255, 0.8) 5%, transparent 5%) !important;
background-repeat: repeat !important;
background-size: 2vmin 2vmin !important;
}
body, .tw-bg-background-alt3, main, .card-header, .card-body, .modal-body {
background-color: transparent !important;
}
.modal-open, .modal-header, form.modal-content, .modal-footer {
background-color: rgba(0,0,0,0.8) !important;
backdrop-filter: blur(5px);
}
.cdk-virtual-scroll-content-wrapper, .card, .tw-bg-background, .modal-content {
background-color: rgba(0,0,0,0.8) !important;
border-radius: 10px !important;
border: ${toString rice.border-width}px solid ${border} !important;
}
}
@-moz-document domain(chatgpt.com) {
body, html , .bg-token-sidebar-surface-primary {
background-color: transparent !important;
}
.bg-token-main-surface-primary {
background-color: rgba(0,0,0,1) !important;
backdrop-filter: blur(100px) !important;
border-radius: ${builtins.toString rice.rounding}px !important;
}
}
''; '';
}; };
} }

View File

@@ -27,7 +27,7 @@
$(echo -e "$logo" | sed -n 7p): fish $(fish --version | rev | cut -f 1 -d' ' | rev) $(echo -e "$logo" | sed -n 7p): fish $(fish --version | rev | cut -f 1 -d' ' | rev)
$(echo -e "$logo" | sed -n 8p): ''$(uname -r) $(echo -e "$logo" | sed -n 8p): ''$(uname -r)
$(echo -e "$logo" | sed -n 9p): $($EDITOR --version | head -n 1 | sed -E 's-(.+?) \(.*-\1-g') $(echo -e "$logo" | sed -n 9p): $($EDITOR --version | head -n 1 | sed -E 's-(.+?) \(.*-\1-g')
$(echo -e "$logo" | sed -n 10p): $(yazi --version | yazi --version | sed -E 's-(.*?) \(.*-\1-g') $(echo -e "$logo" | sed -n 10p): $(yazi --version | sed -E 's-(.*?) \(.*-\1-g')
$(echo -e "$logo" | sed -n 11p): $(starship --version | head -n 1) $(echo -e "$logo" | sed -n 11p): $(starship --version | head -n 1)
" "
echo -e "$msg" echo -e "$msg"
@@ -85,20 +85,18 @@
# ya = "yazi"; # function # ya = "yazi"; # function
# nxfiglet = "figlet"; # nxfiglet = "figlet";
}; };
interactiveShellInit = '' interactiveShellInit = /* fish */ ''
set -g fish_greeting set -g fish_greeting
if not set -q IN_NIX_SHELL if not set -q IN_NIX_SHELL
nxfetch
# yazi
if set -q SESSION_FROM_DE if set -q SESSION_FROM_DE
set -e SESSION_FROM_DE
set tmp (mktemp -t "yazi-cwd.XXXXX") set tmp (mktemp -t "yazi-cwd.XXXXX")
yazi $argv --cwd-file="$tmp" yazi --cwd-file="$tmp"
if set cwd (cat -- "$tmp"); and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ] if set cwd (cat -- "$tmp"); and [ -n "$cwd" ]; and [ "$cwd" != "$PWD" ]
cd -- "$cwd" builtin cd -- "$cwd"
end end
rm -f -- "$tmp" rm -f -- "$tmp"
end end
nxfetch
end end
''; '';
functions = { functions = {

View File

@@ -1,7 +1,18 @@
{ pkgs, lib, host, ... }: { pkgs-unstable, pkgs, lib, host, ... }:
lib.mkIf (host != "NxACE") lib.mkIf (host == "NxNORTH" || host == "NxACE")
{ {
home.packages = with pkgs; [ home = {
packages = (with pkgs-unstable; [
protonup
mangohud
# heroic
mindustry-wayland mindustry-wayland
]; ]) ++ [ pkgs.heroic ];
sessionVariables = {
STEAM_EXTRA_COMPAT_TOOLS_PATHS = "\${HOME}/.steam/root/compatibilitytools.d";
};
};
} }

9
home-modules/gimp.nix Executable file
View File

@@ -0,0 +1,9 @@
{ pkgs, lib, host, ... }:
{
home.packages = with pkgs; [
(gimp-with-plugins.override {
plugins = with gimpPlugins; [ bimp ];
})
];
}

View File

@@ -1,4 +1,5 @@
{ config, pkgs, lib, rice, user, ... }: let { config, pkgs, rice, ... }:
let
# theme-name = "Colloid-Pink-Dark-Compact"; # theme-name = "Colloid-Pink-Dark-Compact";
# theme-package = pkgs.colloid-gtk-theme.override { # theme-package = pkgs.colloid-gtk-theme.override {
# themeVariants = [ "pink" ]; # themeVariants = [ "pink" ];
@@ -6,18 +7,134 @@
# sizeVariants = [ "compact" ]; # sizeVariants = [ "compact" ];
# tweaks = [ "black" ]; # tweaks = [ "black" ];
# }; # };
theme-name = "catppuccin-macchiato-pink-compact+rimless,black";
theme-package = pkgs.catppuccin-gtk.override { # theme-name = "catppuccin-macchiato-pink-compact+rimless,black";
accents = [ "pink" ]; # theme-package = pkgs.catppuccin-gtk.override {
size = "compact"; # accents = [ "pink" ];
tweaks = [ "rimless" "black" ]; # size = "compact";
variant = "macchiato"; # tweaks = [ "rimless" "black" ];
}; # variant = "macchiato";
# };
theme-name = "Materia-dark-compact";
theme-package = pkgs.materia-theme-transparent;
# theme-name = "numix";
# theme-name = "adw-gtk3-dark";
# theme-package = pkgs.adw-gtk3;
# theme-package = let
# theme-string = with rice.color; let
# h = rice.lib.nohash;
# d = rice.lib.float-to-drune;
# in /* ini */ ''
# BG=${h background}
# FG=${h foreground}
# SEL_BG=${h accent.base}
# SEL_FG=${h black.base}
# ACCENT_BG=${h accent.base}
# TXT_BG=${h black.dark}
# TXT_FG=${h foreground}
# HDR_BG=${h background}
# HDR_FG=${h foreground}
# BTN_BG=${h accent.dark}
# BTN_FG=${h foreground}
# HDR_BTN_BG=${h accent.dark}
# HDR_BTN_FG=${h foreground}
# WM_BORDER_FOCUS=${h border}
# WM_BORDER_UNFOCUS=${h accent.dark}
# ROUNDNESS=${builtins.toString rice.rounding}
# ROUNDNESS_GTK2_HIDPI=${builtins.toString rice.rounding}
# OUTLINE_WIDTH=${builtins.toString rice.border-width}
# BTN_OUTLINE_OFFSET=-3
# BTN_OUTLINE_WIDTH=1
# SPACING=${builtins.toString rice.gap-size}
# GRADIENT=0.0
# CINNAMON_OPACITY=${builtins.toString rice.transparency}
# INACTIVE_FG=${h foreground}
# INACTIVE_TXT_FG=${h foreground}
# INACTIVE_HDR_FG=${h foreground}
# ICONS_DARK=${h accent.dark}
# ICONS_MEDIUM=${h accent.base}
# ICONS_LIGHT=${h accent.bright}
# ICONS_LIGHT_FOLDER=${h accent.base}
# ICONS_SYMBOLIC_ACTION=${h accent.base}
# ICONS_SYMBOLIC_PANEL=${h accent.base}
# ICONS_STYLE=icons_papirus
# CARET1_FG=${h white.dark}
# CARET2_FG=${h black.bright}
# CARET_SIZE=0.04
# MENU_BG=${h accent.dark}
# MENU_FG=${h foreground}
# OUTLINE_WIDTH=${builtins.toString rice.border-width}
# SPOTIFY_PROTO_BG=${h accent.dark}
# SPOTIFY_PROTO_FG=${h foreground}
# SPOTIFY_PROTO_SEL=${h blue.base}
# BASE16_GENERATE_DARK=False
# BASE16_INVERT_TERMINAL=False
# BASE16_MILD_TERMINAL=False
# UNITY_DEFAULT_LAUNCHER_STYLE=False
# '';
# # theme-source-pkg = pkgs.materia-theme;
# theme-source-pkg = pkgs.themix-gui;
# in pkgs.stdenv.mkDerivation {
# name = "oomox-gtk";
# version = theme-source-pkg.version;
# src = theme-source-pkg.src;
# dontBuild = true;
# nativeBuildInputs = with pkgs; [
# glib
# libxml2
# bc
# ];
# buildInputs = with pkgs; [
# gnome-themes-extra
# gdk-pixbuf
# librsvg
# sassc
# inkscape
# optipng
# ];
# propagatedUserEnvPkgs = with pkgs; [
# gtk-engine-murrine
# ];
# # installPhase = ''
# # mkdir -p $out/share/themes/materia
# # patchShebangs .
# # ./change_color.sh -o materia -t $out/share/themes <(echo -e "${theme-string}")
# # '';
# installPhase = ''
# mkdir -p $out/share/icons/icons_papirus
# mkdir -p $out/share/icons/icons_numix
# mkdir -p $out/share/icons/icons_suruplus
# echo "${theme-string}" > $out/oomox.colors
# pushd plugins/icons_papirus
# patchShebangs .
# ./change_color.sh -o icons_papirus -d $out/share/icons/icons_papirus $out/oomox.colors
# popd
# pushd plugins/icons_numix
# patchShebangs .
# ./change_color.sh -o icons_numix -d $out/share/icons/icons_numix $out/oomox.colors
# popd
# pushd plugins/icons_suruplus
# patchShebangs .
# ./change_color.sh -o icons_suruplus -d $out/share/icons/icons_suruplus $out/oomox.colors
# popd
# mkdir -p $out/share/themes/numix
# pushd plugins/theme_oomox
# patchShebangs .
# HOME=$out ./change_color.sh -o numix -m all -t $out/share/themes $out/oomox.colors
# popd
# '';
# meta = {
# description = "custom theme utility";
# homepage = "https://github.com/themix-project/themix-gui";
# maintainers = [ ];
# };
# };
in { in {
home.packages = with pkgs; [ home = {
packages = with pkgs; [
# gnome.gnome-themes-extra # gnome.gnome-themes-extra
# gnome.adwaita-icon-theme adwaita-icon-theme
gnome.gnome-tweaks gnome-tweaks
gtk3 gtk3
gtk4 gtk4
# catppuccin-gtk # catppuccin-gtk
@@ -25,46 +142,57 @@ in {
] ++ [ ] ++ [
# pkgs-unstable.themix-gui # pkgs-unstable.themix-gui
]; ];
sessionVariables.GTK_THEME = theme-name;
pointerCursor = {
home.sessionVariables.GTK_THEME = theme-name; gtk.enable = true;
x11.enable = true;
} // rice.cursor;
};
gtk = { gtk = {
enable = true; enable = true;
theme = { theme = {
name = theme-name; name = theme-name;
package = theme-package; package = theme-package;
}; };
gtk3.extraConfig = { gtk2.configLocation = "${config.xdg.configHome}/gtk-2.0/gtkrc";
gtk-application-prefer-dark-theme = 1; gtk3 = {
extraConfig.gtk-application-prefer-dark-theme = 1;
# extraCss = with rice.color; /* css */ ''
# wnck-pager {
# color: ${black.bright};
# background-color: ${background};
# }
# wnck-pager:selected {
# color: ${background};
# background-color: ${accent.base};
# }
# '';
# window.background {
# background-color: rgba(${rice.lib.hex-to-rgb-comma-string background},${builtins.toString rice.transparency});
# }
# .background, .view, .surface, .frame, box, window.decoration, stack {
# background-color: transparent;
# }
}; };
gtk4.extraConfig = { gtk4 = {
gtk-application-prefer-dark-theme = 1; extraConfig.gtk-application-prefer-dark-theme = 1;
extraCss = config.gtk.gtk3.extraCss;
}; };
cursorTheme = rice.cursor; cursorTheme = rice.cursor;
}; };
home.pointerCursor = {
gtk.enable = true;
x11.enable = true;
} // rice.cursor;
xdg.configFile = { xdg.configFile = {
"gtk-4.0/assets".source = "${theme-package}/share/themes/${theme-name}/gtk-4.0/assets"; "gtk-4.0/assets".source = "${theme-package}/share/themes/${theme-name}/gtk-3.20/assets";
"gtk-4.0/gtk.css".source = "${theme-package}/share/themes/${theme-name}/gtk-4.0/gtk.css"; "gtk-4.0/gtk.css".source = "${theme-package}/share/themes/${theme-name}/gtk-3.20/gtk.css";
"gtk-4.0/gtk-dark.css".source = "${theme-package}/share/themes/${theme-name}/gtk-4.0/gtk-dark.css"; "gtk-4.0/gtk-dark.css".source = "${theme-package}/share/themes/${theme-name}/gtk-3.20/gtk-dark.css";
}; };
dconf = { dconf = {
enable = true; enable = true;
settings = { settings = {
"org/gnome/desktop/interface" = { "org/gnome/desktop/interface" = {
color-scheme = "prefer-dark"; color-scheme = "prefer-dark";
gtk-theme = theme-name; # gtk-theme = theme-name;
}; };
}; };
}; };
} }

View File

@@ -1,11 +1,13 @@
{ pkgs, pkgs-unstable,lib, rice, ... }: { pkgs, pkgs-unstable, lib, rice, ... }:
{ {
home = { home = {
packages = with pkgs; [ packages = with pkgs; [
# nixfmt-classic # nix formater # nixfmt-classic # nix formater
# nil # nix language server # nil # nix language server
# nixd # specified in nixd.nix # nixd # specified in nixd.nix
gopls
python311Packages.python-lsp-server python311Packages.python-lsp-server
jdt-language-server
ruff ruff
ruff-lsp ruff-lsp
pyright pyright
@@ -76,7 +78,10 @@
language = [ language = [
{ {
name = "nix"; name = "nix";
language-servers = [ "nixd" "nil" ]; language-servers = [
"nixd"
# "llm"
];
} }
{ {
name = "latex"; name = "latex";
@@ -122,6 +127,16 @@
}]; }];
}; };
} }
{
name = "go";
language-servers = [
"gopls"
# "llm"
];
# formatter = {
# command = "gofmt";
# };
}
]; ];
language-server = { language-server = {
"nixd" = { "nixd" = {
@@ -137,20 +152,19 @@
command = "ruff-lsp"; command = "ruff-lsp";
config.settings.args = [ config.settings.args = [
# Set line length # Set line length
# "--line-length" "--line-length"
# "79" "240"
# Enable custom ruff rules
# Enable some ruff rules # "--select" lib.concatStringsSep [ ]
# "--select" ];
# ( };
# "F,W,E,I,N,D200,D201,D202,D203,D204,D205,D206,D207,D208,D209,D210,D211," "llm" = {
# + "D212,D213,D214,D215,D300,D301,D400,D401,D402,D403,D404,D405,D406," command = lib.getExe pkgs.helix-gpt;
# + "D407,D408,D409,D410,D411,D412,D413,D414,D415,D416,D417,D418,D419," args = [
# + "UP,YTT,TRIO,ASYNC,B,A,COM,C4,DTZ,T10,DJ,EXE,FA,ISC,ICN001,G010," "--handler"
# + "G101,G201,G202,INP,PIE,Q,RSE,RET,SLOT,SIM,TCH,INT,ARG,PTH,TD001," "ollama"
# + "TD004,TD005,TD006,TD007,PD,PL,TRY004,TRY200,TRY201,TRY302,TRY400," "--ollamaModel"
# + "TRY401,FLY,NPY,AIR,PERF,FURB,LOG,RUF" "codellama:7b"
# )
]; ];
}; };
}; };
@@ -167,7 +181,7 @@
"constant.numeric" = foreground; "constant.numeric" = foreground;
"constructor" = weird.base; "constructor" = weird.base;
"debug" = yellow.base; "debug" = yellow.base;
"diagnostic.modifiers" = [ "underlined" ]; "diagnostic.modifiers" = [ "underline" ];
"diff.delta" = blue.bright; "diff.delta" = blue.bright;
"diff.minus" = negative.bright; "diff.minus" = negative.bright;
"diff.plus" = positive.bright; "diff.plus" = positive.bright;

View File

@@ -21,13 +21,13 @@ let
main = { main = {
name = "DP-4"; name = "DP-4";
resolution = "2560x1440"; resolution = "2560x1440";
position = "1920x0"; position = "1920x150";
scale = "1.0"; scale = "1.0";
}; };
left = { left = {
name = "HDMI-A-2"; name = "HDMI-A-2";
resolution = "1920x1080"; resolution = "1920x1080";
position = "0x360"; position = "0x0";
scale = "1.0"; scale = "1.0";
}; };
# right = { # right = {
@@ -52,6 +52,7 @@ in {
hyprland-protocols hyprland-protocols
hyprlock hyprlock
hypridle hypridle
hyprpicker
hyprcursor hyprcursor
grim grim
@@ -91,15 +92,13 @@ in {
"${main.name}, ${main.resolution}, ${main.position}, ${main.scale}" "${main.name}, ${main.resolution}, ${main.position}, ${main.scale}"
])); ]));
workspace = workspace = let
let
d1 = if host == "NxXPS" then monitors.xps.main.name else (if host == "NxNORTH" then monitors.north.main.name else monitors.ace.main.name); d1 = if host == "NxXPS" then monitors.xps.main.name else (if host == "NxNORTH" then monitors.north.main.name else monitors.ace.main.name);
d2 = if host == "NxXPS" then monitors.xps.second.name else (if host == "NxNORTH" then monitors.north.left.name else monitors.ace.main.name); d2 = if host == "NxXPS" then monitors.xps.second.name else (if host == "NxNORTH" then monitors.north.left.name else monitors.ace.main.name);
d3 = if host == "NxXPS" then monitors.xps.main.name else (if host == "NxNORTH" then monitors.north.main.name else monitors.ace.main.name); d3 = if host == "NxXPS" then monitors.xps.main.name else (if host == "NxNORTH" then monitors.north.main.name else monitors.ace.main.name);
# d3 = if host == "NxXPS" then monitors.xps.main.name else (if host == "NxNORTH" then monitors.north.right.name else monitors.ace.main.name); # d3 = if host == "NxXPS" then monitors.xps.main.name else (if host == "NxNORTH" then monitors.north.right.name else monitors.ace.main.name);
compact = "gapsin:0, gapsout:0, bordersize:1, rounding:false"; compact = "gapsin:0, gapsout:0, bordersize:1, rounding:false";
in in [
[
"11, monitor:${d1}, default:true" "11, monitor:${d1}, default:true"
"12, monitor:${d1}" "12, monitor:${d1}"
"13, monitor:${d1}" "13, monitor:${d1}"
@@ -131,6 +130,10 @@ in {
"38, monitor:${d3}" "38, monitor:${d3}"
"39, monitor:${d3}" "39, monitor:${d3}"
"30, monitor:${d3}, ${compact}" "30, monitor:${d3}, ${compact}"
] ++ [
# no gaps when only
"w[tv1], gapsout:0, gapsin:0"
"f[1], gapsout:0, gapsin:0"
]; ];
# "device:logitech-wireless-mouse-mx-master-1" = { # "device:logitech-wireless-mouse-mx-master-1" = {
@@ -174,12 +177,12 @@ in {
decoration = { decoration = {
rounding = rice.rounding; rounding = rice.rounding;
drop_shadow = false; # drop_shadow = false;
shadow_range = "20"; # shadow_range = "20";
shadow_offset = "0 0"; # shadow_offset = "0 0";
shadow_render_power = "4"; # shadow_render_power = "4";
"col.shadow" = "rgba(${rice.lib.nohash rice.color.red.base}ff)"; # "col.shadow" = "rgba(${rice.lib.nohash rice.color.red.base}ff)";
"col.shadow_inactive" = "rgba(${rice.lib.nohash rice.color.black.base}ff)"; # "col.shadow_inactive" = "rgba(${rice.lib.nohash rice.color.black.base}ff)";
active_opacity = "1.0"; active_opacity = "1.0";
inactive_opacity = "1.0"; inactive_opacity = "1.0";
@@ -228,7 +231,6 @@ in {
dwindle = { dwindle = {
preserve_split = true; # you probably want this preserve_split = true; # you probably want this
no_gaps_when_only = true;
}; };
# master = { # master = {
@@ -258,6 +260,16 @@ in {
"opacity ${transparency},class:^(com.chatterino.*)$" "opacity ${transparency},class:^(com.chatterino.*)$"
"opacity ${transparency},class:^(chatterino)$" "opacity ${transparency},class:^(chatterino)$"
"bordercolor rgba(${rice.lib.nohash rice.color.magenta.bright}ff), pinned:1" "bordercolor rgba(${rice.lib.nohash rice.color.magenta.bright}ff), pinned:1"
"noanim, class:^(presenter)$" # sent
"float, class:^(presenter)$" # sent
"noanim, class:^(imv)$"
"float, class:^(imv)$"
"fullscreen, class:^(imv)$"
] ++ [
"bordersize 0, floating:0, onworkspace:w[tv1]"
"rounding 0, floating:0, onworkspace:w[tv1]"
"bordersize 0, floating:0, onworkspace:f[1]"
"rounding 0, floating:0, onworkspace:f[1]"
]; ];
windowrule = [ windowrule = [
@@ -274,12 +286,12 @@ in {
"opacity ${transparency}, discord" "opacity ${transparency}, discord"
"opacity ${transparency}, vesktop" "opacity ${transparency}, vesktop"
"opacity ${transparency}, Element" "opacity ${transparency}, Element"
"opacity ${transparency}, thunderbird" # "opacity ${transparency}, thunderbird"
"opacity ${transparency}, lutris" "opacity ${transparency}, lutris"
"opacity ${transparency}, element" "opacity ${transparency}, element"
"opacity ${transparency}, ^([sS]potify)$" # "opacity ${transparency}, ^([sS]potify)$"
"opacity ${transparency}, virt-manager" # "opacity ${transparency}, virt-manager"
"opacity ${transparency}, thunar" # "opacity ${transparency}, thunar"
"opacity ${transparency}, title:^(wlogout)$" "opacity ${transparency}, title:^(wlogout)$"
"opaque, title:^(GNU Image Manipulation Program)$" "opaque, title:^(GNU Image Manipulation Program)$"
"float, title:^(Picture-in-Picture)$" "float, title:^(Picture-in-Picture)$"
@@ -326,15 +338,15 @@ in {
"SUPER, F1, workspace, 100" "SUPER, F1, workspace, 100"
"SUPER SHIFT, F1, movetoworkspace, 100" "SUPER SHIFT, F1, movetoworkspace, 100"
# "SUPER, F2," # "SUPER, F2,"
"SUPER, F3, toggleopaque" # "SUPER, F3, toggleopaque"
# "SUPER, F4," # "SUPER, F4,"
"SUPER, F5, exec, nx_gcal_event force-lookup" "SUPER, F5, exec, nx_gcal_event force-lookup"
"SUPER SHIFT, F5, exec, nx_gcal_event reauthenticate" "SUPER SHIFT, F5, exec, nx_gcal_event reauthenticate"
"SUPER, F6, exec, kitty -e 'htop'" "SUPER, F6, exec, kitty -e 'htop'"
"SUPER, F7, exec, kitty -e 'nmtui'" "SUPER, F7, exec, kitty -e 'nmtui'"
''SUPER, F8, exec, find ~/Pictures/wallpapers/* -type f -not -path "~/Pictures/wallpapers/.git/*" | sort -R | head -n 1 | xargs swww img --transition-type wipe --transition-angle 60 --transition-step 120 --transition-fps 120'' ''SUPER, F8, exec, find ~/Pictures/wallpapers/* -type f -not -path "~/Pictures/wallpapers/.git/*" | sort -R | head -n 1 | xargs -d '\n' swww img --transition-type wipe --transition-angle 60 --transition-step 120 --transition-fps 120 --transition-duration 2''
''SUPER, F9, exec, kitty -e sh -c 'change_colors_json $(swww query | sed -n 1p | sed -e "s-.*image: --g") && nh home switch && firefox /home/${user}/.config/color-pallete.html' '' "SUPER, F9, execr, waybar_mode set '󰸉 '"
''SUPER SHIFT, F9, exec, firefox /home/${user}/.config/color-pallete.html '' "SUPER, F9, submap, color"
# "SUPER, F10, hyprload,update" # "SUPER, F10, hyprload,update"
"SUPER, F11, exec, waybar" "SUPER, F11, exec, waybar"
"SUPER SHIFT, F11, exec, pkill waybar " "SUPER SHIFT, F11, exec, pkill waybar "
@@ -387,7 +399,8 @@ in {
# "SUPER SHIFT, T, exec, alacritty -e sh -c "ssh nxace"" # "SUPER SHIFT, T, exec, alacritty -e sh -c "ssh nxace""
"SUPER, T, exec, SESSION_FROM_DE=TRUE kitty" "SUPER, T, exec, SESSION_FROM_DE=TRUE kitty"
"SUPER SHIFT, T, exec, kitty -e sh -c 'ssh nxace'" "SUPER SHIFT, T, exec, kitty -e sh -c 'ssh nxace'"
# "SUPER, Z, " "SUPER, Z, exec, waybar_mode set ' '"
"SUPER, Z, submap, tuda"
"SUPER, U, exec, thunderbird " "SUPER, U, exec, thunderbird "
"SUPER, I, exec, kitty -e fish -c 'hx ~/nix-dots/ && fish'" "SUPER, I, exec, kitty -e fish -c 'hx ~/nix-dots/ && fish'"
"SUPER SHIFT, I, exec, kitty -e fish -c 'nh home switch || read'" "SUPER SHIFT, I, exec, kitty -e fish -c 'nh home switch || read'"
@@ -396,7 +409,8 @@ in {
"SUPER, P, pin " "SUPER, P, pin "
# "SUPER, Ü," # "SUPER, Ü,"
# "SUPER, +," # "SUPER, +,"
# "SUPER, Enter," "SUPER, Enter, exec, SESSION_FROM_DE=TRUE kitty"
########################################################################### ###########################################################################
## ROW 3: ## ROW 3:
@@ -424,6 +438,7 @@ in {
"SUPER, X, exec, pkill wlogout || wlogout --protocol layer-shell -b 3" "SUPER, X, exec, pkill wlogout || wlogout --protocol layer-shell -b 3"
# "SUPER, C, exec, /home/nx2/scripts/quickconfig/quickconfig.sh " # "SUPER, C, exec, /home/nx2/scripts/quickconfig/quickconfig.sh "
"SUPER, C, exec, chatterino" "SUPER, C, exec, chatterino"
"SUPER SHIFT, C, exec, hyprpicker -n -a"
"SUPER, V, togglefloating, " "SUPER, V, togglefloating, "
"SUPER, B, exec, bitwarden" "SUPER, B, exec, bitwarden"
"SUPER, N, togglesplit" "SUPER, N, togglesplit"
@@ -504,396 +519,91 @@ in {
# 'Y8b. 88 88 88''Yb. 88 88 8888888 888888P' 'Y8b. # 'Y8b. 88 88 88''Yb. 88 88 8888888 888888P' 'Y8b.
# db 8D 88. .88 88 8D 88 88 88' '88 88 db 8D # db 8D 88. .88 88 8D 88 88 88' '88 88 db 8D
# '8888Y' 'Y8888P' Y8888P' YP YP 88 YP YP '8888Y' # '8888Y' 'Y8888P' Y8888P' YP YP 88 YP YP '8888Y'
extraConfig = '' extraConfig = let
action_simple = { mods ? "", key, cmd }: ''
bind=${mods},${key},execr,waybar_mode unset
bind=${mods},${key},${cmd}
bind=${mods},${key},submap,reset
'';
extra_workspace = { key, wsnumber }: ''
bind=,${key},execr,waybar_mode unset
bind=,${key},workspace,${wsnumber}
bind=,${key},submap,reset
bind=SUPER,${key},execr,waybar_mode unset
bind=SUPER,${key},workspace,${wsnumber}
bind=SUPER,${key},submap,reset
bind=SUPER SHIFT,${key},execr, waybar_mode unset
bind=SUPER SHIFT,${key},movetoworkspace,${wsnumber}
bind=SUPER SHIFT,${key},submap,reset
'';
in ''
submap = browserSM submap = browserSM
bind = , W, exec, waybar_mode unset ${action_simple { key = "A"; cmd = "exec,firefox https://www.amazon.de/b?node=3010075031&ref_=nav_ya_signin";}}
bind = , W, exec, hyprctl dispatch exec firefox ${action_simple { key = "C"; cmd = "exec,firefox https://calendar.google.com";}}
bind = , W, submap, reset ${action_simple { key = "D"; cmd = "exec,firefox https://www.disneyplus.com/home";}}
${action_simple { key = "H"; cmd = "exec,firefox https://www.hs-mittweida.de";}}
bind = , Y, exec, waybar_mode unset ${action_simple { key = "I"; cmd = "exec,firefox https://www.imdb.com";}}
bind = , Y, exec, firefox https://youtube.com ${action_simple { key = "L"; cmd = "exec,firefox https://feddit.de";}}
bind = , Y, submap, reset ${action_simple { key = "M"; cmd = "exec,firefox https://ieji.de/home";}}
${action_simple { key = "N"; cmd = "exec,firefox https://Netflix.com";}}
bind = , T, exec, waybar_mode unset ${action_simple { key = "R"; cmd = "exec,firefox https://reddit.com";}}
bind = , T, exec, hyprctl dispatch exec firefox https://twitch.tv ${action_simple { key = "S"; cmd = "exec,firefox 127.0.0.1:8384/";}}
bind = , T, submap, reset ${action_simple { key = "T"; cmd = "exec,hyprctl dispatch exec firefox https://twitch.tv";}}
${action_simple { key = "udiaeresis"; cmd = "exec,firefox https://translate.google.com";}}
bind = , R, exec, waybar_mode unset ${action_simple { key = "W"; cmd = "exec,hyprctl dispatch exec firefox";}}
bind = , R, exec, firefox https://reddit.com ${action_simple { key = "X"; cmd = "exec,firefox https://nx2.site";}}
bind = , R, submap, reset ${action_simple { key = "Y"; cmd = "exec,firefox https://youtube.com";}}
${action_simple { key = "P"; cmd = "exec,firefox https://pw.nx2.site";}}
bind = , C, exec, waybar_mode unset
bind = , C, exec, firefox https://calendar.google.com
bind = , C, submap, reset
bind = , Ü, exec, waybar_mode unset
bind = , Ü, exec, firefox https://translate.google.com
bind = , Ü, submap, reset
bind = , N, exec, waybar_mode unset
bind = , N, exec, firefox https://Netflix.com
bind = , N, submap, reset
bind = , A, exec, waybar_mode unset
bind = , A, exec, firefox https://www.amazon.de/b?node=3010075031&ref_=nav_ya_signin
bind = , A, submap, reset
bind = , D, exec, waybar_mode unset
bind = , D, exec, firefox https://www.disneyplus.com/home
bind = , D, submap, reset
bind = , H, exec, waybar_mode unset
bind = , H, exec, firefox https://www.hs-mittweida.de
bind = , H, submap, reset
bind = , X, exec, waybar_mode unset
bind = , X, exec, firefox https://nx2.site
bind = , X, submap, reset
bind = , L, exec, waybar_mode unset
bind = , L, exec, firefox https://feddit.de
bind = , L, submap, reset
bind = , I, exec, waybar_mode unset
bind = , I, exec, firefox https://www.imdb.com
bind = , I, submap, reset
bind = , M, exec, waybar_mode unset
bind = , M, exec, firefox https://ieji.de/home
bind = , M, submap, reset
bind = , S, exec, waybar_mode unset
bind = , S, exec, firefox 127.0.0.1:8384/
bind = , S, submap, reset
bind = , Escape, exec, waybar_mode unset bind = , Escape, exec, waybar_mode unset
bind = , Escape, submap, reset bind = , Escape, submap, reset
submap = reset submap = reset
submap = scrL submap = scrL
bind = , 1, execr, waybar_mode unset ${builtins.concatStringsSep "\n" (builtins.map (num: extra_workspace { key = builtins.toString num; wsnumber = "2" + builtins.toString num;}) [1 2 3 4 5 6 7 8 9 0])}
bind = , 1, workspace, 21
bind = , 1, submap, reset
bind = SUPER, 1, execr, waybar_mode unset
bind = SUPER, 1, workspace, 21
bind = SUPER, 1, submap, reset
bind = SUPER SHIFT, 1, execr, waybar_mode unset
bind = SUPER SHIFT, 1, movetoworkspace, 21
bind = SUPER SHIFT, 1, submap, reset
bind = , 2, execr, waybar_mode unset
bind = , 2, workspace, 22
bind = , 2, submap, reset
bind = SUPER, 2, execr, waybar_mode unset
bind = SUPER, 2, workspace, 22
bind = SUPER, 2, submap, reset
bind = SUPER SHIFT, 2, execr, waybar_mode unset
bind = SUPER SHIFT, 2, movetoworkspace, 22
bind = SUPER SHIFT, 2, submap, reset
bind = , 3, execr, waybar_mode unset
bind = , 3, workspace, 23
bind = , 3, submap, reset
bind = SUPER, 3, execr, waybar_mode unset
bind = SUPER, 3, workspace, 23
bind = SUPER, 3, submap, reset
bind = SUPER SHIFT, 3, execr, waybar_mode unset
bind = SUPER SHIFT, 3, movetoworkspace, 23
bind = SUPER SHIFT, 3, submap, reset
bind = , 4, execr, waybar_mode unset
bind = , 4, workspace, 24
bind = , 4, submap, reset
bind = SUPER, 4, execr, waybar_mode unset
bind = SUPER, 4, workspace, 24
bind = SUPER, 4, submap, reset
bind = SUPER SHIFT, 4, execr, waybar_mode unset
bind = SUPER SHIFT, 4, movetoworkspace, 24
bind = SUPER SHIFT, 4, submap, reset
bind = , 5, execr, waybar_mode unset
bind = , 5, workspace, 25
bind = , 5, submap, reset
bind = SUPER, 5, execr, waybar_mode unset
bind = SUPER, 5, workspace, 25
bind = SUPER, 5, submap, reset
bind = SUPER SHIFT, 5, execr, waybar_mode unset
bind = SUPER SHIFT, 5, movetoworkspace, 25
bind = SUPER SHIFT, 5, submap, reset
bind = , 6, execr, waybar_mode unset
bind = , 6, workspace, 26
bind = , 6, submap, reset
bind = SUPER, 6, execr, waybar_mode unset
bind = SUPER, 6, workspace, 26
bind = SUPER, 6, submap, reset
bind = SUPER SHIFT, 6, execr, waybar_mode unset
bind = SUPER SHIFT, 6, movetoworkspace, 26
bind = SUPER SHIFT, 6, submap, reset
bind = , 7, execr, waybar_mode unset
bind = , 7, workspace, 27
bind = , 7, submap, reset
bind = SUPER, 7, execr, waybar_mode unset
bind = SUPER, 7, workspace, 27
bind = SUPER, 7, submap, reset
bind = SUPER SHIFT, 7, execr, waybar_mode unset
bind = SUPER SHIFT, 7, movetoworkspace, 27
bind = SUPER SHIFT, 7, submap, reset
bind = , 8, execr, waybar_mode unset
bind = , 8, workspace, 28
bind = , 8, submap, reset
bind = SUPER, 8, execr, waybar_mode unset
bind = SUPER, 8, workspace, 28
bind = SUPER, 8, submap, reset
bind = SUPER SHIFT, 8, execr, waybar_mode unset
bind = SUPER SHIFT, 8, movetoworkspace, 28
bind = SUPER SHIFT, 8, submap, reset
bind = , 9, execr, waybar_mode unset
bind = , 9, workspace, 29
bind = , 9, submap, reset
bind = SUPER, 9, execr, waybar_mode unset
bind = SUPER, 9, workspace, 29
bind = SUPER, 9, submap, reset
bind = SUPER SHIFT, 9, execr, waybar_mode unset
bind = SUPER SHIFT, 9, movetoworkspace, 29
bind = SUPER SHIFT, 9, submap, reset
bind = , 0, execr, waybar_mode unset
bind = , 0, workspace, 20
bind = , 0, submap, reset
bind = SUPER, 0, execr, waybar_mode unset
bind = SUPER, 0, workspace, 20
bind = SUPER, 0, submap, reset
bind = SUPER SHIFT, 0, execr, waybar_mode unset
bind = SUPER SHIFT, 0, movetoworkspace, 20
bind = SUPER SHIFT, 0, submap, reset
bind = , A, execr, waybar_mode unset bind = , A, execr, waybar_mode unset
bind = , A, submap, reset bind = , A, submap, reset
bind = , Escape, execr, waybar_mode unset bind = , Escape, execr, waybar_mode unset
bind = , Escape, submap, reset bind = , Escape, submap, reset
submap = reset submap = reset
submap = scrR submap = scrR
bind = , 1, execr, waybar_mode unset ${builtins.concatStringsSep "\n" (builtins.map (num: extra_workspace { key = builtins.toString num; wsnumber = "3" + builtins.toString num;}) [1 2 3 4 5 6 7 8 9 0])}
bind = , 1, workspace, 31
bind = , 1, submap, reset
bind = SUPER, 1, execr, waybar_mode unset
bind = SUPER, 1, workspace, 31
bind = SUPER, 1, submap, reset
bind = SUPER SHIFT, 1, execr, waybar_mode unset
bind = SUPER SHIFT, 1, movetoworkspace, 31
bind = SUPER SHIFT, 1, submap, reset
bind = , 2, execr, waybar_mode unset
bind = , 2, workspace, 32
bind = , 2, submap, reset
bind = SUPER, 2, execr, waybar_mode unset
bind = SUPER, 2, workspace, 32
bind = SUPER, 2, submap, reset
bind = SUPER SHIFT, 2, execr, waybar_mode unset
bind = SUPER SHIFT, 2, movetoworkspace, 32
bind = SUPER SHIFT, 2, submap, reset
bind = , 3, execr, waybar_mode unset
bind = , 3, workspace, 33
bind = , 3, submap, reset
bind = SUPER, 3, execr, waybar_mode unset
bind = SUPER, 3, workspace, 33
bind = SUPER, 3, submap, reset
bind = SUPER SHIFT, 3, execr, waybar_mode unset
bind = SUPER SHIFT, 3, movetoworkspace, 33
bind = SUPER SHIFT, 3, submap, reset
bind = , 4, execr, waybar_mode unset
bind = , 4, workspace, 34
bind = , 4, submap, reset
bind = SUPER, 4, execr, waybar_mode unset
bind = SUPER, 4, workspace, 34
bind = SUPER, 4, submap, reset
bind = SUPER SHIFT, 4, execr, waybar_mode unset
bind = SUPER SHIFT, 4, movetoworkspace, 34
bind = SUPER SHIFT, 4, submap, reset
bind = , 5, execr, waybar_mode unset
bind = , 5, workspace, 35
bind = , 5, submap, reset
bind = SUPER, 5, execr, waybar_mode unset
bind = SUPER, 5, workspace, 35
bind = SUPER, 5, submap, reset
bind = SUPER SHIFT, 5, execr, waybar_mode unset
bind = SUPER SHIFT, 5, movetoworkspace, 35
bind = SUPER SHIFT, 5, submap, reset
bind = , 6, execr, waybar_mode unset
bind = , 6, workspace, 36
bind = , 6, submap, reset
bind = SUPER, 6, execr, waybar_mode unset
bind = SUPER, 6, workspace, 36
bind = SUPER, 6, submap, reset
bind = SUPER SHIFT, 6, execr, waybar_mode unset
bind = SUPER SHIFT, 6, movetoworkspace, 36
bind = SUPER SHIFT, 6, submap, reset
bind = , 7, execr, waybar_mode unset
bind = , 7, workspace, 37
bind = , 7, submap, reset
bind = SUPER, 7, execr, waybar_mode unset
bind = SUPER, 7, workspace, 37
bind = SUPER, 7, submap, reset
bind = SUPER SHIFT, 7, execr, waybar_mode unset
bind = SUPER SHIFT, 7, movetoworkspace, 37
bind = SUPER SHIFT, 7, submap, reset
bind = , 8, execr, waybar_mode unset
bind = , 8, workspace, 38
bind = , 8, submap, reset
bind = SUPER, 8, execr, waybar_mode unset
bind = SUPER, 8, workspace, 38
bind = SUPER, 8, submap, reset
bind = SUPER SHIFT, 8, execr, waybar_mode unset
bind = SUPER SHIFT, 8, movetoworkspace, 38
bind = SUPER SHIFT, 8, submap, reset
bind = , 9, execr, waybar_mode unset
bind = , 9, workspace, 39
bind = , 9, submap, reset
bind = SUPER, 9, execr, waybar_mode unset
bind = SUPER, 9, workspace, 39
bind = SUPER, 9, submap, reset
bind = SUPER SHIFT, 9, execr, waybar_mode unset
bind = SUPER SHIFT, 9, movetoworkspace, 39
bind = SUPER SHIFT, 9, submap, reset
bind = , 0, execr, waybar_mode unset
bind = , 0, workspace, 30
bind = , 0, submap, reset
bind = SUPER, 0, execr, waybar_mode unset
bind = SUPER, 0, workspace, 30
bind = SUPER, 0, submap, reset
bind = SUPER SHIFT, 0, execr, waybar_mode unset
bind = SUPER SHIFT, 0, movetoworkspace, 30
bind = SUPER SHIFT, 0, submap, reset
bind = , Y, execr, waybar_mode unset bind = , Y, execr, waybar_mode unset
bind = , Y, submap, reset bind = , Y, submap, reset
bind = , Escape, execr, waybar_mode unset bind = , Escape, execr, waybar_mode unset
bind = , Escape, submap, reset bind = , Escape, submap, reset
submap = reset submap = reset
submap = color
${action_simple { key = "W"; cmd = ''exec,swww query | sed -n 1p | sed -E 's-.*image: (.*)-"\1"-g' | xargs change_colors_json img && notify-send 'change_colors_json img successfull' ''; }}
${action_simple { key = "M"; cmd = ''exec,change_colors_json manual && notify-send 'change_colors_json manual successfull' ''; }}
plugin { ${action_simple { key = "D"; cmd = ''exec,firefox /home/${user}/.config/color-pallete.html''; }}
hyprexpo { bind = , Escape, execr, waybar_mode unset
columns = 5 bind = , Escape, submap, reset
gap_size = ${builtins.toString rice.gap-size}
bg_col = rgb(${builtins.substring 1 6 rice.color.background})
workspace_method = first 10 # [center/first] [workspace] e.g. first 1 or center m+1
enable_gesture = false # laptop touchpad, 4 fingers
gesture_distance = 300 # how far is the "max"
gesture_positive = true # positive = swipe down. Negative = swipe up.
}
}
plugin {
overview {
panelColor = rgba(00000088)
workspaceActiveBackground = rgba(00ff00ff)
workspaceInactiveBackground = rgba(0000ffff)
# workspaceActiveBorder =
# workspaceInactiveBorder =
dragAlpha = 0.5
panelHeight = 200
workspaceMargin = 30
workspaceBorderSize = 3
centerAligned = true
overrideGaps = false
gapsIn = 0
gapsOut = 0
hideBackgroundLayers = false
drawActiveWorkspace = true
autoDrag = true
autoScroll = true
exitOnClick = false
switchOnDrop = false
exitOnSwitch = trueß
showNewWorkspace = true
showEmptyWorkspace = false
}
}
# allows repeated switching with same keypress that starts the submap
binde = SUPER, TAB, exec, hyprswitch --daemon --do-initial-execute
bind = SUPER, TAB, submap, switch
bind = SUPER, TAB, exec, waybar_mode set "sw"
# allows repeated switching with same keypress that starts the submap
binde = SUPER SHIFT, TAB, exec, hyprswitch --daemon --do-initial-execute -r
bind = SUPER SHIFT, TAB, submap, switch
bind = SUPER, TAB, exec, waybar_mode set "swr"
submap = switch
# allow repeated window switching in submap (same keys as repeating while starting)
binde = SUPER, TAB, exec, hyprswitch --daemon
binde = SUPER SHIFT, TAB, exec, hyprswitch --daemon -r
# switch to specific window offset
bind = , 1, exec, hyprswitch --daemon --offset=1
bind = , 2, exec, hyprswitch --daemon --offset=2
bind = , 3, exec, hyprswitch --daemon --offset=3
bind = , 4, exec, hyprswitch --daemon --offset=4
bind = , 5, exec, hyprswitch --daemon --offset=5
bind = , 6, exec, hyprswitch --daemon --offset=6
bind = , 7, exec, hyprswitch --daemon --offset=7
bind = , 8, exec, hyprswitch --daemon --offset=8
bind = , 8, exec, hyprswitch --daemon --offset=8
bind = , 9, exec, hyprswitch --daemon --offset=9
bind = SUPER $reverse, 1, exec, hyprswitch --daemon --offset=1 -r
bind = SUPER $reverse, 2, exec, hyprswitch --daemon --offset=2 -r
bind = SUPER $reverse, 3, exec, hyprswitch --daemon --offset=3 -r
bind = SUPER $reverse, 4, exec, hyprswitch --daemon --offset=4 -r
bind = SUPER $reverse, 5, exec, hyprswitch --daemon --offset=5 -r
bind = SUPER $reverse, 6, exec, hyprswitch --daemon --offset=6 -r
bind = SUPER $reverse, 7, exec, hyprswitch --daemon --offset=7 -r
bind = SUPER $reverse, 8, exec, hyprswitch --daemon --offset=8 -r
bind = SUPER $reverse, 9, exec, hyprswitch --daemon --offset=9 -r
bind = SUPER $reverse, 5, exec, hyprswitch --daemon --offset=5 -r
# exit submap and stop hyprswitch
bindrt = SUPER, SUPER_L, exec, hyprswitch --stop-daemon
bindrt = SUPER, SUPER_L, submap, reset
bindrt = SUPER, SUPER_L, exec, waybar_mode unset
# if it somehow doesn't close on releasing $switch_release, escape can kill
bindr = ,escape, exec, pkill hyprswitch
bindr = ,escape, submap, reset
submap = reset submap = reset
submap = tuda
${action_simple { key = "T"; cmd = ''exec,firefox https://www.tucan.tu-darmstadt.de/''; }}
${action_simple { key = "M"; cmd = ''exec,firefox https://moodle.tu-darmstadt.de/''; }}
${action_simple { key = "I"; cmd = ''exec,firefox https://moodle.informatik.tu-darmstadt.de/''; }}
bind = , Escape, execr, waybar_mode unset
bind = , Escape, submap, reset
submap = reset
''; '';
}; };
home.file = home.file = let
let
m = if host == "NxXPS" then monitors.xps.main.name else monitors.north.main.name; m = if host == "NxXPS" then monitors.xps.main.name else monitors.north.main.name;
in in {
{
".config/hypr/hyprlock.conf".text = '' ".config/hypr/hyprlock.conf".text = ''
background { background {
monitor = ${m} monitor = ${m}
# all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations # all these options are taken from hyprland, see https://wiki.hyprland.org/Configuring/Variables/#blur for explanations
path = /home/nx2/Pictures/nix-wall.png path = /home/nx2/Pictures/wallpapers/nix-wall.png
blur_size = 4 blur_size = 4
blur_passes = 3 # 0 disables blurring blur_passes = 3 # 0 disables blurring
noise = 0.0117 noise = 0.0117

View File

@@ -3,7 +3,7 @@
programs.kitty = { programs.kitty = {
enable = true; enable = true;
font = { font = {
name = rice.font.code.name2; name = rice.font.code.name;
package = rice.font.code.package; package = rice.font.code.package;
}; };
settings = with rice.color; { settings = with rice.color; {

View File

@@ -3,12 +3,12 @@
home.packages = with pkgs; [ libnotify ]; home.packages = with pkgs; [ libnotify ];
services.mako = with rice; { services.mako = with rice; {
enable = true; enable = true;
defaultTimeout = 5000; # in ms defaultTimeout = 10000; # in ms
backgroundColor = color.background; backgroundColor = color.background;
textColor = color.foreground; textColor = color.foreground;
borderColor = color.border; borderColor = color.border;
borderSize = border-width; borderSize = border-width;
font = font.code.name2; font = font.code.name;
borderRadius = rounding; borderRadius = rounding;
anchor = "top-right"; anchor = "top-right";
margin = builtins.toString (gap-size * 2) ; margin = builtins.toString (gap-size * 2) ;

View File

@@ -0,0 +1,8 @@
{ pkgs, ... }:
{
home = {
packages = with pkgs; [
go
];
};
}

View File

@@ -0,0 +1,8 @@
{ pkgs, ... }:
{
home = {
packages = with pkgs; [
jdk
];
};
}

View File

@@ -1,6 +1,8 @@
{ pkgs, lib, user, ... }: { ... }:
{ {
qt = { qt = {
platformTheme = "gtk"; enable = true;
platformTheme.name = "qtct";
style.name = "adwaita-dark";
}; };
} }

View File

@@ -14,7 +14,7 @@
} }
* { * {
font: "${rice.font.code.name2} 12"; font: "${rice.font.code.name} 12";
foreground: ${foreground}; foreground: ${foreground};
background-color: ${background}${trdr}; background-color: ${background}${trdr};
padding: 0px; padding: 0px;

View File

@@ -21,7 +21,7 @@
HOST nxgit HOST nxgit
HostName ssh.${domain} HostName ssh.${domain}
User git User git
Port 20022 Port 50022
''; '';
}; };
} }

View File

@@ -65,7 +65,7 @@
]; ];
userSettings = { userSettings = {
workbench.colorTheme = "Just Black"; workbench.colorTheme = "Just Black";
editor.fontFamily = "'${rice.font.code.name2}', 'monospace', monospace"; editor.fontFamily = "'${rice.font.code.name}', 'monospace', monospace";
remote.SSH.useLocalServer = false; remote.SSH.useLocalServer = false;
}; };
enableUpdateCheck = false; enableUpdateCheck = false;

View File

@@ -5,16 +5,18 @@
libraries = with python3Packages; [ numpy pillow scikit-learn ]; libraries = with python3Packages; [ numpy pillow scikit-learn ];
flakeIgnore = [ "E302" "E305" "E226" "E501" ]; flakeIgnore = [ "E302" "E305" "E226" "E501" ];
} /*python */ '' } /*python */ ''
from colorsys import hls_to_rgb, rgb_to_hls from colorsys import hls_to_rgb, rgb_to_hls
import json import json
import sys import sys
from typing import Literal, cast import subprocess
from numpy.typing import NDArray from time import sleep
from sklearn.cluster import KMeans from typing import Literal, cast
import numpy as np from numpy.typing import NDArray
from PIL import Image from sklearn.cluster import KMeans
import numpy as np
from PIL import Image
def fc(c: int) -> str: def fc(c: int) -> str:
assert c < 256 assert c < 256
s = str(hex(c))[2:] s = str(hex(c))[2:]
if c < 16: if c < 16:
@@ -24,8 +26,8 @@ def fc(c: int) -> str:
else: else:
return s return s
class Color(object): class Color(object):
def __init__(self, rgb: tuple[int, ...], frequency: float): def __init__(self, rgb: tuple[int, ...], frequency: float = 1):
assert len(rgb) == 3, "RGB values must be a tuple of length 3" assert len(rgb) == 3, "RGB values must be a tuple of length 3"
self.rgb = cast(tuple[int, int, int], rgb) self.rgb = cast(tuple[int, int, int], rgb)
self.freq: float = frequency self.freq: float = frequency
@@ -41,7 +43,7 @@ class Color(object):
def luminance(self) -> float: def luminance(self) -> float:
return np.dot(np.array([0.2126, 0.7152, 0.0722]), self.rgb) return np.dot(np.array([0.2126, 0.7152, 0.0722]), self.rgb)
def k_means_extraction(arr: NDArray[float], height: int, width: int, palette_size: int) -> list[Color]: def k_means_extraction(arr: NDArray[float], height: int, width: int, palette_size: int) -> list[Color]:
arr = np.reshape(arr, (width * height, -1)) arr = np.reshape(arr, (width * height, -1))
model = KMeans(n_clusters=palette_size, n_init="auto", init="k-means++", random_state=2024) model = KMeans(n_clusters=palette_size, n_init="auto", init="k-means++", random_state=2024)
labels = model.fit_predict(arr) labels = model.fit_predict(arr)
@@ -54,7 +56,7 @@ def k_means_extraction(arr: NDArray[float], height: int, width: int, palette_siz
return colors return colors
class Palette: class Palette:
def __init__(self, colors: list[Color]): def __init__(self, colors: list[Color]):
self.colors = colors self.colors = colors
self.frequencies = [c.freq for c in colors] self.frequencies = [c.freq for c in colors]
@@ -65,7 +67,7 @@ class Palette:
def __len__(self) -> int: def __len__(self) -> int:
return self.number_of_colors return self.number_of_colors
def ensure_color(c: Color, alter_sat: bool) -> list[int]: def ensure_color(c: Color, alter_sat: bool) -> list[int]:
hue, lum, sat = c.hls hue, lum, sat = c.hls
if alter_sat: if alter_sat:
new_sat = min((sat**0.5) + 0.4, 1) new_sat = min((sat**0.5) + 0.4, 1)
@@ -75,10 +77,10 @@ def ensure_color(c: Color, alter_sat: bool) -> list[int]:
r, g, b = hls_to_rgb(h=hue, l=new_lum, s=new_sat) r, g, b = hls_to_rgb(h=hue, l=new_lum, s=new_sat)
return [int(r*255), int(g*255), int(b*255)] return [int(r*255), int(g*255), int(b*255)]
def list_to_hex(ilist: list[int]) -> str: def list_to_hex(ilist: list[int]) -> str:
return f"#{fc(ilist[0])}{fc(ilist[1])}{fc(ilist[2])}" return f"#{fc(ilist[0])}{fc(ilist[1])}{fc(ilist[2])}"
def alter_hue(ilist: list[int], hue: int) -> list[int]: def alter_hue(ilist: list[int], hue: int) -> list[int]:
assert hue >= 0 and hue <= 360 assert hue >= 0 and hue <= 360
r, g, b = ilist r, g, b = ilist
h, l, s = rgb_to_hls((r/255), (g/255), (b/255)) h, l, s = rgb_to_hls((r/255), (g/255), (b/255))
@@ -86,19 +88,19 @@ def alter_hue(ilist: list[int], hue: int) -> list[int]:
r, g, b = hls_to_rgb(h=new_hue, l=l, s=s) r, g, b = hls_to_rgb(h=new_hue, l=l, s=s)
return [int(r*255), int(g*255), int(b*255)] return [int(r*255), int(g*255), int(b*255)]
def alter_l(ilist: list[int], l_in_1_0: float) -> list[int]: def alter_l(ilist: list[int], l_in_1_0: float) -> list[int]:
assert l_in_1_0 >= 0 and l_in_1_0 <= 1 assert l_in_1_0 >= 0 and l_in_1_0 <= 1
r, g, b = ilist r, g, b = ilist
h, _, s = rgb_to_hls((r/255), (g/255), (b/255)) h, _, s = rgb_to_hls((r/255), (g/255), (b/255))
r, g, b = hls_to_rgb(h=h, l=l_in_1_0, s=s) r, g, b = hls_to_rgb(h=h, l=l_in_1_0, s=s)
return [int(r*255), int(g*255), int(b*255)] return [int(r*255), int(g*255), int(b*255)]
def extract_colors( def extract_colors(
image: str, image: str,
palette_size: int = 5, palette_size: int = 5,
resize: bool = True, resize: bool = True,
sort_mode: Literal["luminance", "frequency"] | None = None, sort_mode: Literal["luminance", "frequency"] | None = None,
) -> Palette: ) -> Palette:
img = Image.open(image).convert("RGB") img = Image.open(image).convert("RGB")
@@ -115,14 +117,25 @@ def extract_colors(
colors.sort(reverse=True) colors.sort(reverse=True)
return Palette(colors) return Palette(colors)
if __name__ == "__main__":
img = sys.argv[1]
def hyprpicker() -> Color:
ret = str(subprocess.run(["${pkgs.hyprpicker}/bin/hyprpicker", "-n", "-f", "rgb"], capture_output=True).stdout)[2:-3]
return Color([int(c) for c in ret.split(" ")])
if __name__ == "__main__":
if sys.argv[1] == "img":
img = sys.argv[2]
palette = extract_colors(image=img, palette_size=3) palette = extract_colors(image=img, palette_size=3)
accent = ensure_color(c=palette[0], alter_sat=False) accent = ensure_color(c=palette[0], alter_sat=False)
secondary = ensure_color(c=palette[1], alter_sat=True) secondary = ensure_color(c=palette[1], alter_sat=True)
tertiary = ensure_color(c=palette[2], alter_sat=False) tertiary = ensure_color(c=palette[2], alter_sat=False)
elif sys.argv[1] == "manual":
accent = ensure_color(c=hyprpicker(), alter_sat=False)
sleep(0.1)
secondary = ensure_color(c=hyprpicker(), alter_sat=True)
sleep(0.1)
tertiary = ensure_color(c=hyprpicker(), alter_sat=False)
weird = alter_hue(ilist=accent, hue=80) weird = alter_hue(ilist=accent, hue=80)
special = alter_hue(ilist=accent, hue=180) special = alter_hue(ilist=accent, hue=180)
foreground = alter_l(accent, 0.9) foreground = alter_l(accent, 0.9)
@@ -144,6 +157,6 @@ if __name__ == "__main__":
with open("/home/nx2/nix-dots/flake-modules/colors.json", "w") as f: with open("/home/nx2/nix-dots/flake-modules/colors.json", "w") as f:
f.write(json.dumps(d, indent=4)) f.write(json.dumps(d, indent=4))
'') '')
]; ];
} }

View File

@@ -163,7 +163,7 @@ in {
}; };
style = with rice.color; let f = rice.lib.hex-to-rgb-comma-string; in '' style = with rice.color; let f = rice.lib.hex-to-rgb-comma-string; in ''
* { * {
font-family: ${rice.font.code.name2}; font-family: ${rice.font.code.name};
font-size: 1em; font-size: 1em;
min-height: 0px; min-height: 0px;
margin: 0px; margin: 0px;
@@ -223,7 +223,7 @@ in {
} }
#window, #custom-ctimeremaining { #window, #custom-ctimeremaining {
font-family: ${rice.font.base.name}, ${rice.font.code.name2}; font-family: ${rice.font.base.name}, ${rice.font.code.name};
color: rgb(${f tertiary.bright}); color: rgb(${f tertiary.bright});
} }
@@ -238,11 +238,14 @@ in {
color: rgb(${f green.base});; color: rgb(${f green.base});;
} }
#battery.critical { #battery.charging {
color: rgb(${f red.dark});; color: rgb(${f green.base});
background: rgb(${f red.bright}); }
#battery.critical {
background: rgb(${f negative.base});
color: rgb(${f foreground});
} }
#battery.charging { color: rgb(${f green.base}); }
''; '';
#battery.critical:not(.charging) { #battery.critical:not(.charging) {

View File

@@ -3,14 +3,149 @@
{ {
home.packages = with pkgs; [ home.packages = with pkgs; [
# yazi # yazi
dragon # dragon
unar unar
]; ];
programs.yazi = { programs.yazi = {
enable = true; enable = true;
# package = pkgs.yazi;
package = inputs.yazi.packages.${system}.default; package = inputs.yazi.packages.${system}.default;
enableFishIntegration = true; enableFishIntegration = true;
shellWrapperName = "ya";
plugins = with inputs.yazi-plugins.packages.${system}; {
inherit chmod starship;
};
# initLua = /* lua */ '' '';
keymap = {
keymap = [
{ on = "<Esc>"; run = "escape"; desc = "Exit visual mode, clear selected, or cancel search"; }
{ on = "q"; run = "quit"; desc = "Exit the process"; }
{ on = "Q"; run = "quit --no-cwd-file"; desc = "Exit the process without writing cwd-file"; }
{ on = "<C-w>"; run = "close"; desc = "Close the current tab, or quit if it is last tab"; }
{ on = "<C-z>"; run = "suspend"; desc = "Suspend the process"; }
# Hopping
{ on = "k"; run = "arrow -1"; desc = "Move cursor up"; }
{ on = "j"; run = "arrow 1"; desc = "Move cursor down"; }
{ on = "<Up>"; run = "arrow -1"; desc = "Move cursor up"; }
{ on = "<Down>"; run = "arrow 1"; desc = "Move cursor down"; }
{ on = "<C-u>"; run = "arrow -50%"; desc = "Move cursor up half page"; }
{ on = "<C-d>"; run = "arrow 50%"; desc = "Move cursor down half page"; }
{ on = "<C-b>"; run = "arrow -100%"; desc = "Move cursor up one page"; }
{ on = "<C-f>"; run = "arrow 100%"; desc = "Move cursor down one page"; }
{ on = "<PageUp>"; run = "arrow -100%"; desc = "Move cursor up one page"; }
{ on = "<PageDown>"; run = "arrow 100%"; desc = "Move cursor down one page"; }
{ on = [ "g" "g" ]; run = "arrow -99999999"; desc = "Move cursor to the top"; }
{ on = [ "g" "e" ]; run = "arrow 99999999"; desc = "Move cursor to the end"; }
{ on = [ "g" "h" ]; run = "cd ~"; desc = "Go to the home directory"; }
{ on = [ "g" "n" ]; run = "cd ~/nix-dots"; desc = "Go to the Nix-Dotfiles directory"; }
{ on = [ "g" "n" ]; run = "cd /nix/store"; desc = "Go to the Nix-Store"; }
{ on = [ "g" "c" ]; run = "cd ~/.config"; desc = "Go to the config directory"; }
{ on = [ "g" "l" ]; run = "cd ~/.locale"; desc = "Go to the .locale directory"; }
{ on = [ "g" "C" ]; run = "cd ~/.cache"; desc = "Go to the .cache directory"; }
{ on = [ "g" "m" ]; run = "cd ~/media"; desc = "Go to the media (udiskie mount) directory"; }
{ on = [ "g" "v" ]; run = "cd ~/Videos"; desc = "Go to the Videos directory"; }
{ on = [ "g" "d" ]; run = "cd ~/Downloads"; desc = "Go to the downloads directory"; }
{ on = [ "g" "D" ]; run = "cd ~/Documents"; desc = "Go to the Documents directory"; }
{ on = [ "g" "r" ]; run = "cd /"; desc = "Go to the root (/) directory"; }
{ on = [ "g" "/" ]; run = "cd /"; desc = "Go to the root (/) directory"; }
{ on = [ "g" "<Space>" ]; run = "cd --interactive"; desc = "Go to a directory interactively"; }
# Navigation
{ on = "h"; run = "leave"; desc = "Go back to the parent directory"; }
{ on = "l"; run = "enter"; desc = "Enter the child directory"; }
{ on = "<Left>"; run = "leave"; desc = "Go back to the parent directory"; }
{ on = "<Right>"; run = "enter"; desc = "Enter the child directory"; }
{ on = "H"; run = "back"; desc = "Go back to the previous directory"; }
{ on = "L"; run = "forward"; desc = "Go forward to the next directory"; }
# Seeking
{ on = "K"; run = "seek -5"; desc = "Seek up 5 units in the preview"; }
{ on = "J"; run = "seek 5"; desc = "Seek down 5 units in the preview"; }
# Selection
{ on = "<Space>"; run = [ "select --state=none" "arrow 1" ]; desc = "Toggle the current selection state"; }
{ on = "v"; run = "visual_mode"; desc = "Enter visual mode (selection mode)"; }
{ on = "V"; run = "visual_mode --unset"; desc = "Enter visual mode (unset mode)"; }
{ on = "<C-a>"; run = "select_all --state=true"; desc = "Select all files"; }
{ on = "<C-r>"; run = "select_all --state=none"; desc = "Inverse selection of all files"; }
# Operation
{ on = "o"; run = "open"; desc = "Open selected files"; }
{ on = "O"; run = "open --interactive"; desc = "Open selected files interactively"; }
{ on = "<Enter>"; run = "open"; desc = "Open selected files"; }
{ on = "<S-Enter>"; run = "open --interactive"; desc = "Open selected files interactively"; }
{ on = "y"; run = "yank"; desc = "Yank selected files (copy)"; }
{ on = "x"; run = "yank --cut"; desc = "Yank selected files (cut)"; }
{ on = "p"; run = "paste"; desc = "Paste yanked "; }
{ on = "P"; run = "paste --force"; desc = "Paste yanked (overwrite if exists)"; }
{ on = "-"; run = "link"; desc = "Symlink the absolute path of yanked files"; }
{ on = "_"; run = "link --relative"; desc = "Symlink the relative path of yanked files"; }
{ on = "<C-->"; run = "hardlink"; desc = "Hardlink yanked files"; }
{ on = "Y"; run = "unyank"; desc = "Cancel the yank status"; }
{ on = "X"; run = "unyank"; desc = "Cancel the yank status"; }
{ on = "d"; run = "remove"; desc = "Trash selected files"; }
{ on = "D"; run = "remove --permanently"; desc = "Permanently delete selected files"; }
{ on = "a"; run = "create"; desc = "Create a file (ends with / for directories)"; }
{ on = "r"; run = "rename --cursor=before_ext"; desc = "Rename selected file(s)"; }
{ on = ";"; run = "shell --interactive"; desc = "Run a shell command"; }
{ on = ":"; run = "shell --block --interactive"; desc = "Run a shell command (block until finishes)"; }
{ on = "."; run = "hidden toggle"; desc = "Toggle the visibility of hidden files"; }
{ on = "s"; run = "search fd"; desc = "Search files by name using fd"; }
{ on = "S"; run = "search rg"; desc = "Search files by content using ripgrep"; }
{ on = "<C-s>"; run = "escape --search"; desc = "Cancel the ongoing search"; }
{ on = "z"; run = "plugin zoxide"; desc = "Jump to a directory using zoxide"; }
{ on = "Z"; run = "plugin fzf"; desc = "Jump to a directory or reveal a file using fzf"; }
# Linemode
{ on = [ "m" "s" ]; run = "linemode size"; desc = "Set linemode to size"; }
{ on = [ "m" "p" ]; run = "linemode permissions"; desc = "Set linemode to permissions"; }
{ on = [ "m" "c" ]; run = "linemode ctime"; desc = "Set linemode to ctime"; }
{ on = [ "m" "m" ]; run = "linemode mtime"; desc = "Set linemode to mtime"; }
{ on = [ "m" "o" ]; run = "linemode owner"; desc = "Set linemode to owner"; }
{ on = [ "m" "n" ]; run = "linemode none"; desc = "Set linemode to none"; }
# Copy
{ on = [ "c" "c" ]; run = "copy path"; desc = "Copy the file path"; }
{ on = [ "c" "d" ]; run = "copy dirname"; desc = "Copy the directory path"; }
{ on = [ "c" "f" ]; run = "copy filename"; desc = "Copy the filename"; }
{ on = [ "c" "n" ]; run = "copy name_without_ext"; desc = "Copy the filename without extension"; }
# Filter
{ on = "f"; run = "filter --smart"; desc = "Filter files"; }
# Find
{ on = "/"; run = "find --smart"; desc = "Find next file"; }
{ on = "?"; run = "find --previous --smart"; desc = "Find previous file"; }
{ on = "n"; run = "find_arrow"; desc = "Go to the next found"; }
{ on = "N"; run = "find_arrow --previous"; desc = "Go to the previous found"; }
# Sortin
{ on = [ "," "m" ]; run = [ "sort modified --reverse=no" "linemode mtime" ]; desc = "Sort by modified time"; }
{ on = [ "," "M" ]; run = [ "sort modified --reverse" "linemode mtime" ]; desc = "Sort by modified time (reverse)"; }
{ on = [ "," "c" ]; run = [ "sort created --reverse=no" "linemode ctime" ]; desc = "Sort by created time"; }
{ on = [ "," "C" ]; run = [ "sort created --reverse" "linemode ctime" ]; desc = "Sort by created time (reverse)"; }
{ on = [ "," "e" ]; run = "sort extension --reverse=no"; desc = "Sort by extension"; }
{ on = [ "," "E" ]; run = "sort extension --reverse"; desc = "Sort by extension (reverse)"; }
{ on = [ "," "a" ]; run = "sort alphabetical --reverse=no"; desc = "Sort alphabetically"; }
{ on = [ "," "A" ]; run = "sort alphabetical --reverse"; desc = "Sort alphabetically (reverse)"; }
{ on = [ "," "n" ]; run = "sort natural --reverse=no"; desc = "Sort naturally"; }
{ on = [ "," "N" ]; run = "sort natural --reverse"; desc = "Sort naturally (reverse)"; }
{ on = [ "," "s" ]; run = [ "sort size --reverse=no" "linemode size" ]; desc = "Sort by size"; }
{ on = [ "," "S" ]; run = [ "sort size --reverse" "linemode size" ]; desc = "Sort by size (reverse)"; }
# Tab
{ on = "t"; run = "tab_create --current"; desc = "Create a new tab with CWD"; }
{ on = "1"; run = "tab_switch 0"; desc = "Switch to the first tab"; }
{ on = "2"; run = "tab_switch 1"; desc = "Switch to the second tab"; }
{ on = "3"; run = "tab_switch 2"; desc = "Switch to the third tab"; }
{ on = "4"; run = "tab_switch 3"; desc = "Switch to the fourth tab"; }
{ on = "5"; run = "tab_switch 4"; desc = "Switch to the fifth tab"; }
{ on = "6"; run = "tab_switch 5"; desc = "Switch to the sixth tab"; }
{ on = "7"; run = "tab_switch 6"; desc = "Switch to the seventh tab"; }
{ on = "8"; run = "tab_switch 7"; desc = "Switch to the eighth tab"; }
{ on = "9"; run = "tab_switch 8"; desc = "Switch to the ninth tab"; }
{ on = "["; run = "tab_switch -1 --relative"; desc = "Switch to the previous tab"; }
{ on = "]"; run = "tab_switch 1 --relative"; desc = "Switch to the next tab"; }
{ on = "{"; run = "tab_swap -1"; desc = "Swap current tab with previous tab"; }
{ on = "}"; run = "tab_swap 1"; desc = "Swap current tab with next tab"; }
# Task
{ on = "w"; run = "tasks_show"; desc = "Show task manager"; }
# Hel
{ on = "~"; run = "help"; desc = "Open help"; }
{ on = "<F1>"; run = "help"; desc = "Open help"; }
];
};
settings = { settings = {
manager = { manager = {
layout = [2 3 4]; layout = [2 3 4];
@@ -21,20 +156,15 @@
linemode = "size"; linemode = "size";
show_hidden = false; show_hidden = false;
show_symlink = true; show_symlink = true;
append_keymap = [
{ on = [ "<C-g>" ]; run = "lazygit"; desc = "Run Lazygit in current directory"; }
{ on = [ "<C-D>" ]; run = ''shell 'dragon -x -i -T "$1"' --confirm''; }
];
}; };
opener = { opener = {
"edit" = [ "edit" = [
{ run = ''hx "$@"''; desc = "helix"; block = true;} { run = ''hx "$@"''; desc = "helix"; block = true; }
{ run = ''codium "$@"''; orphan = true;} { run = ''codium "$@"''; desc = "helix"; orphan = true; }
{ run = ''nano "$@"''; desc = "nano"; block = true;}
]; ];
"play" = [ "play" = [
{ run = ''mpv "$@"''; } { run = ''mpv "$@"''; }
{ run = ''mediainfo "$1"; echo "Press enter to exit"; read''; block = true; desc = "Show mediainfo";} { run = ''mediainfo "$1"; echo "Press enter to exit"; read''; block = true; desc = "Show mediainfo"; }
]; ];
"archive" = [ "archive" = [
{ run = ''unar "$1"''; desc = "Extract here"; } { run = ''unar "$1"''; desc = "Extract here"; }
@@ -42,9 +172,9 @@
{ run = ''unzip "$1"''; desc = "unzip"; } { run = ''unzip "$1"''; desc = "unzip"; }
]; ];
"image" = [ "image" = [
{ run = ''imv "$@"''; desc = "imv";} { run = ''imv "$@"''; desc = "imv"; }
{ run = ''gimp "$@"''; desc = "gimp";} { run = ''gimp "$@"''; desc = "gimp"; }
{ run = ''swww img --transition-type wipe --transition-angle 60 --transition-step 120 --transition-fps 120 "$@"''; desc = "swww wallpaper";} { run = ''swww img --transition-type wipe --transition-angle 60 --transition-step 120 --transition-fps 120 "$@"''; desc = "swww wallpaper"; }
]; ];
"svg" = [ "svg" = [
{ run = ''inkscape "$@"''; desc = "inkscape";} { run = ''inkscape "$@"''; desc = "inkscape";}
@@ -55,8 +185,8 @@
{ run = ''fontforge "$@"''; desc = "fortforge"; } { run = ''fontforge "$@"''; desc = "fortforge"; }
]; ];
"document" = [ "document" = [
{ run = ''zathura "$@"''; desc = "zathura"; } { run = ''zathura "$@"''; desc = "zathura"; orphan = true; }
{ run = ''xournal "$@"''; desc = "xournal"; } { run = ''xournal "$@"''; desc = "xournal"; orphan = true; }
{ run = ''firefox "$@"''; desc = "firefox"; } { run = ''firefox "$@"''; desc = "firefox"; }
]; ];
"browser" = [ "browser" = [
@@ -83,8 +213,8 @@
]; ];
}; };
open.rules = [ open.rules = [
{ mime = "text/html"; use = ["edit" "browser"]; } { mime = "text/html"; use = [ "edit" "browser" ]; }
{ mime = "text/htm"; use = ["edit" "browser"]; } { mime = "text/htm"; use = [ "edit" "browser" ]; }
{ mime = "text/x-python"; use = "python"; } { mime = "text/x-python"; use = "python"; }
{ mime = "text/*"; use = "edit"; } { mime = "text/*"; use = "edit"; }
@@ -92,11 +222,12 @@
{ mine = "inode/directory"; use = "edit"; } { mine = "inode/directory"; use = "edit"; }
{ mime = "image/*"; use = "image"; } { mime = "image/*"; use = "image"; }
{ mime = "image/svg"; use = ["image" "edit"]; } { mime = "image/svg"; use = [ "image" "edit" ]; }
{ mime = "video/*"; use = "video"; } { mime = "video/*"; use = "play"; }
{ mime = "audio/*"; use = "play"; }
{ mime = "application/x-httpd-php"; use = ["edit" "browser"]; } { mime = "application/x-httpd-php"; use = [ "edit" "browser" ]; }
{ mime = "application/json"; use = "edit"; } { mime = "application/json"; use = "edit"; }
{ mime = "application/ld+json"; use = "edit"; } { mime = "application/ld+json"; use = "edit"; }
{ mime = "application/pdf"; use = "document"; } { mime = "application/pdf"; use = "document"; }
@@ -104,9 +235,9 @@
{ mime = "application/vnd.oasis.opendocument.*"; use = "office"; } { mime = "application/vnd.oasis.opendocument.*"; use = "office"; }
{ mime = "application/vnd.ms-powerpoint"; use = "office"; } { mime = "application/vnd.ms-powerpoint"; use = "office"; }
{ mime = "application/vnd.ms-excel"; use = "office"; } { mime = "application/vnd.ms-excel"; use = "office"; }
{ mime = "application/vnd.openxmlformats-officedocument.*"; use = ["office" "edit"]; } { mime = "application/vnd.openxmlformats-officedocument.*"; use = [ "office" "edit" ]; }
{ mime = "application/rtf"; use = "office"; } { mime = "application/rtf"; use = "office"; }
{ mime = "application/x-sh"; use = ["edit" "shell"]; } { mime = "application/x-sh"; use = [ "edit" "shell" ]; }
{ mime = "application/x-python-code"; use = "python"; } { mime = "application/x-python-code"; use = "python"; }
{ mime = "application/xml"; use = "edit"; } { mime = "application/xml"; use = "edit"; }
{ mime = "application/xul"; use = "edit"; } { mime = "application/xul"; use = "edit"; }

View File

@@ -12,7 +12,10 @@
highlight-active-color = "rgba(${rice.lib.hex-to-rgb-comma-string accent.base},0.5)"; highlight-active-color = "rgba(${rice.lib.hex-to-rgb-comma-string accent.base},0.5)";
highlight-color = "rgba(${rice.lib.hex-to-rgb-comma-string secondary.base},0.5)"; highlight-color = "rgba(${rice.lib.hex-to-rgb-comma-string secondary.base},0.5)";
highlight-fg = "rgba(${rice.lib.hex-to-rgb-comma-string secondary.base},0.5)"; highlight-fg = "rgba(${rice.lib.hex-to-rgb-comma-string secondary.base},0.5)";
index-active-bg = background; index-fg = accent.bright;
index-bg = black.dark;
index-active-fg = background;
index-active-bg = foreground;
inputbar-bg = background; inputbar-bg = background;
inputbar-fg = foreground; inputbar-fg = foreground;
notification-bg = background; notification-bg = background;
@@ -31,6 +34,19 @@
n-completion-items = 9999999999999; n-completion-items = 9999999999999;
exec-command = "open"; exec-command = "open";
page-padding = rice.border-width;
#stop at page boundries
scroll-page-aware = true;
smooth-scroll = true;
scroll-full-overlap = 0.01;
scroll-step = 300;
};
mappings = {
h = ''feedkeys "<C-Left>"'';
j = ''feedkeys "<C-Down>"'';
k = ''feedkeys "<C-Up>"'';
l = ''feedkeys "<C-Right>"'';
}; };
}; };
} }

9
home.nix Executable file → Normal file
View File

@@ -14,6 +14,7 @@
# ./home-modules/foot.nix # ./home-modules/foot.nix
./home-modules/games.nix ./home-modules/games.nix
./home-modules/gestures.nix ./home-modules/gestures.nix
./home-modules/gimp.nix
./home-modules/git.nix ./home-modules/git.nix
./home-modules/gpg.nix ./home-modules/gpg.nix
./home-modules/gtk.nix ./home-modules/gtk.nix
@@ -37,7 +38,9 @@
./home-modules/pnx.nix ./home-modules/pnx.nix
./home-modules/programming/c.nix ./home-modules/programming/c.nix
./home-modules/programming/gleam.nix ./home-modules/programming/gleam.nix
./home-modules/programming/node.nix ./home-modules/programming/go.nix
./home-modules/programming/java.nix
./home-modules/programming/js.nix
./home-modules/programming/python.nix ./home-modules/programming/python.nix
./home-modules/qt.nix ./home-modules/qt.nix
./home-modules/rofi.nix ./home-modules/rofi.nix
@@ -72,7 +75,7 @@
imv mpv mediainfo exiftool ffmpeg imv mpv mediainfo exiftool ffmpeg
pavucontrol pavucontrol
fontpreview gtk2fontsel fontpreview
lynx w3m browsh lynx w3m browsh
bat du-dust eza neofetch tldr fzf figlet ripgrep lolcat jq glow bat du-dust eza neofetch tldr fzf figlet ripgrep lolcat jq glow
brightnessctl wev brightnessctl wev
@@ -95,6 +98,7 @@
ghostscript ghostscript
inputs.zen-browser.packages."${system}".default inputs.zen-browser.packages."${system}".default
gnome-calendar
] ++ (with pkgs-unstable; [ ] ++ (with pkgs-unstable; [
obsidian obsidian
@@ -103,7 +107,6 @@
]) ++ (if host != "NxACE" then (with pkgs; [ ]) ++ (if host != "NxACE" then (with pkgs; [
signal-desktop signal-desktop
zoom-us zoom-us
gimp
inkscape inkscape
]) else (with pkgs-unstable; [ ]) else (with pkgs-unstable; [

File diff suppressed because one or more lines are too long

View File

@@ -17,11 +17,9 @@ in
environment.systemPackages = with pkgs; [ sbctl ]; environment.systemPackages = with pkgs; [ sbctl ];
boot = { boot = {
lanzaboote = lanzaboote = let
let
windows-efi-shell-fs-alias = "HD0a65535a2"; windows-efi-shell-fs-alias = "HD0a65535a2";
in in {
{
enable = true; enable = true;
pkiBundle = "/etc/secureboot"; pkiBundle = "/etc/secureboot";
package = lib.mkForce (pkgs.writeShellApplication { package = lib.mkForce (pkgs.writeShellApplication {
@@ -105,7 +103,7 @@ in
''; '';
}; };
}; };
kernelPackages = pkgs-unstable.linuxPackages_6_10; kernelPackages = pkgs-unstable.linuxPackages_6_11;
extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ]; extraModulePackages = with config.boot.kernelPackages; [ v4l2loopback ];
kernelModules = [ "v4l2loopback" ]; kernelModules = [ "v4l2loopback" ];
extraModprobeConfig = ''options v4l2loopback devices=1 video_nr=1 card_label="OBS VCam" exclusive_caps=1''; extraModprobeConfig = ''options v4l2loopback devices=1 video_nr=1 card_label="OBS VCam" exclusive_caps=1'';

View File

@@ -7,7 +7,8 @@
{ {
fonts.packages = with pkgs; [ fonts.packages = with pkgs; [
noto-fonts noto-fonts
noto-fonts-cjk noto-fonts-cjk-sans
noto-fonts-cjk-serif
noto-fonts-emoji noto-fonts-emoji
newcomputermodern newcomputermodern
atkinson-hyperlegible atkinson-hyperlegible

15
system-modules/games.nix Normal file
View File

@@ -0,0 +1,15 @@
{ lib, host, ... }:
lib.mkIf (host == "NxNORTH" || host == "NxACE")
{
programs = {
steam = {
enable = true;
};
gamemode = {
enable = true;
};
gamescope = {
enable = true;
};
};
}

View File

@@ -46,7 +46,7 @@
} else {}; } else {};
hardware.opengl.extraPackages = if host == "NxXPS" then with pkgs; [ hardware.opengl.extraPackages = if host == "NxXPS" then with pkgs; [
(if (lib.versionOlder (lib.versions.majorMinor lib.version) "24.05") then vaapiIntel else intel-vaapi-driver) (if (lib.versionOlder (lib.versions.majorMinor lib.version) "24.11") then vaapiIntel else intel-vaapi-driver)
libvdpau-va-gl libvdpau-va-gl
intel-media-driver intel-media-driver
] else []; ] else [];

View File

@@ -1,4 +1,4 @@
{ config, pkgs, lib, host, ... }: { pkgs, lib, host, ... }:
lib.mkIf (host != "NxACE") lib.mkIf (host != "NxACE")
{ {
systemd.timers."health_reminder" = { systemd.timers."health_reminder" = {
@@ -11,11 +11,10 @@ lib.mkIf (host != "NxACE")
}; };
}; };
systemd.services."health_reminder" = systemd.services."health_reminder" = let
let hm = pkgs.writers.writePython3Bin "health_reminder" {
hm = flakeIgnore = [ "E302" "E305" "E226" "E501" ];
let p = /*python*/ '' } /*python*/ ''
#!${pkgs.python3}/bin/python3
import random import random
import re import re
@@ -35,25 +34,21 @@ lib.mkIf (host != "NxACE")
return action return action
actions = [ actions = [
Action("look away for %o Seconds!",300, ["10", "15"] ), Action(action="look away for %o Seconds!", likelihood=300, options=["10", "15"]),
Action("Posture Check!", 90 ), Action(action="Posture Check!", likelihood=300),
Action("Do %o Biceps curls!", 5, ["50", "100", "150"] ), Action(action="Strech your upper body!", likelihood=20),
Action("Do %o Shourlder thingees", 5, ["40 + 40", "50", "60"]), Action(action="Strech your core!", likelihood=10),
Action("Plank for %o senonds!", 5, ["60", "60", "70"] ), Action(action="Strech your legs!", likelihood=10),
Action("Strech your upper body!", 20 ), Action(action="Strech your arms/hands!", likelihood=10),
Action("Strech your core!", 10 ), Action(action="Make Tea!", likelihood=5),
Action("Strech your legs!", 10 ), Action(action="", likelihood=2),
Action("Make Tea!", 5 ),
Action("Touch Grass!", 5 )
] ]
total_likelihood = sum(a.likelihood for a in actions) total_likelihood = sum(a.likelihood for a in actions)
random_action = random.choices(actions, [a.likelihood for a in actions], k=1)[0] random_action = random.choices(actions, [a.likelihood for a in actions], k=1)[0]
print(random_action) print(random_action)
''; '';
in pkgs.writeScriptBin "health_reminder" p; in {
in
{
script = '' script = ''
set -eu set -eu
export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$UID/bus" export DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/$UID/bus"

View File

@@ -57,11 +57,10 @@ lib.mkIf nvidia.enable
nvidiaSettings = true; nvidiaSettings = true;
# Optionally, you may need to select the appropriate driver version for your specific GPU. # Optionally, you may need to select the appropriate driver version for your specific GPU.
package = config.boot.kernelPackages.nvidiaPackages.beta; }; package = config.boot.kernelPackages.nvidiaPackages.beta;
opengl = { };
graphics = {
enable = true; enable = true;
driSupport = true;
driSupport32Bit = true;
}; };
}; };
} }

View File

@@ -1,9 +1,23 @@
{ config, pkgs, domain, secrets, ... }: { config, pkgs, user, domain, secrets, ... }:
let dns-user = "cloudflare"; in
{ {
sops.secrets = { sops.secrets = {
"nx2site/namecheap.pw" = { }; # "nx2site/namecheap.pw" = { };
# "nx2site/cloudflare/api-token-dns-edit" = { }; # "nx2site/cloudflare/api-token-dns-edit" = { };
"nx2site/cloudflare/global-api-key" = { }; "nx2site/cloudflare/global-api-key" = {
owner = dns-user;
};
};
users = {
users = {
"${dns-user}" = {
isSystemUser = true;
group = dns-user;
};
"${user}".extraGroups = [ dns-user ];
};
groups."${dns-user}" = {};
}; };
systemd = { systemd = {
@@ -19,22 +33,24 @@
u = let u = let
account_id = secrets.email.gmail-online.mail; account_id = secrets.email.gmail-online.mail;
zone_id = "33fecab36e060f49d492127345ea95a0"; zone_id = "33fecab36e060f49d492127345ea95a0";
record_id = { record_id = { # curl --request GET --url https://api.cloudflare.com/client/v4/zones/33fecab36e060f49d492127345ea95a0/dns_records --header 'Content-Type: application/json' --header 'X-Auth-Email: <hidden>@gmail.com' --header "X-Auth-Key: <hiddenreadinsops>" -s | jq
base = "58d3412e8d88889d1a611b3669f0700f"; base = "58d3412e8d88889d1a611b3669f0700f";
sub = "fc861353142bc05d5dbad1799178e6a1";
base6 = "d1b90e21d2d747dcb30448bd65312927"; base6 = "d1b90e21d2d747dcb30448bd65312927";
sub = "fc861353142bc05d5dbad1799178e6a1";
sub6 = "b8082b7afe9e80971fc9f9dda16ec284"; sub6 = "b8082b7afe9e80971fc9f9dda16ec284";
ssh = "c0f14f17f32d6595c202f041dd836eb3";
ssh6 = "f1ecb2d9d0522d4eec06437688ca76da";
}; };
passord-file-path = config.sops.secrets."nx2site/cloudflare/global-api-key".path; passord-file-path = config.sops.secrets."nx2site/cloudflare/global-api-key".path;
log-file-path = "/var/log/couldflare.log"; log-file-path = "/var/log/couldflare.log";
count-file-path = "/var/log/cloudflare-count.txt"; count-file-path = "/var/log/cloudflare-count.txt";
in pkgs.writers.writePython3Bin "dyn_dns" { in pkgs.writers.writePython3Bin "dyn_dns" {
libraries = with pkgs.python311Packages; [ requests ]; libraries = with pkgs.python311Packages; [ requests ];
flakeIgnore = [ "E501" "E305" "E701" "E704" "E302" "E114" "F841" "E121" "E261" "E303"]; flakeIgnore = [ "E501" "E305" "E701" "E704" "E302" "E114" "F841" "E121" "E261" "E303" ];
} /* python */ '' } /* python */ ''
import requests import requests
import subprocess import subprocess
from datetime import datetime # from datetime import datetime
def get_public_ip(ipv6=False): def get_public_ip(ipv6=False):
return subprocess.run(['${pkgs.curl}/bin/curl', '-s', '-6' if ipv6 else '-4', 'https://ifconfig.me'], capture_output=True, text=True).stdout.strip() return subprocess.run(['${pkgs.curl}/bin/curl', '-s', '-6' if ipv6 else '-4', 'https://ifconfig.me'], capture_output=True, text=True).stdout.strip()
@@ -43,13 +59,13 @@
my_ip = get_public_ip() my_ip = get_public_ip()
my_ip6 = get_public_ip(ipv6=True) my_ip6 = get_public_ip(ipv6=True)
with open("${count-file-path}", "r") as f: # with open("${count-file-path}", "r") as f:
content = f.read() # content = f.read()
if content == "": count = 0 # if content == "": count = 0
else: count = int(content) # else: count = int(content)
count += 1 # count += 1
with open("${count-file-path}", "w") as f: # with open("${count-file-path}", "w") as f:
f.write(str(count)) # f.write(str(count))
# 4 # 4
with open("${passord-file-path}", 'r') as pw_file: with open("${passord-file-path}", 'r') as pw_file:
@@ -85,7 +101,7 @@
}, },
json={ json={
"comment": "Domain verification record", "comment": "Domain verification record",
"name": "${domain}", "name": "*.${domain}",
"proxied": True, "proxied": True,
"settings": {}, "settings": {},
"tags": [], "tags": [],
@@ -95,15 +111,34 @@
} }
) )
resp_sshd = requests.patch(
'https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records/${record_id.ssh}',
headers={
'Content-Type': 'application/json',
'X-Auth-Email': '${account_id}',
'X-Auth-Key': pw
},
json={
"comment": "Domain verification record",
"name": "ssh.${domain}",
"proxied": False,
"settings": {},
"tags": [],
"ttl": 1, # automatic
"content": my_ip,
"type": "A"
}
)
if resp_base.status_code != 200: if resp_base.status_code != 200:
print(resp_base.text) print(resp_base.text)
now_str = datetime.now().strftime('%Y/%m/%d-%R') # now_str = datetime.now().strftime('%Y/%m/%d-%R')
log_entry = f"At {now_str} - to {my_ip} - Response {resp_base.status_code}\n" # log_entry = f"At {now_str} - to {my_ip} - Response {resp_base.status_code}\n"
print(log_entry, end="") # print(log_entry, end="")
with open("${log-file-path}", 'a') as log_file: # with open("${log-file-path}", 'a') as log_file:
log_file.write(log_entry) # log_file.write(log_entry)
# Perform DNS updates # Perform DNS updates
# https://developers.cloudflare.com/api/operations/dns-records-for-a-zone-update-dns-record # https://developers.cloudflare.com/api/operations/dns-records-for-a-zone-update-dns-record
@@ -135,7 +170,7 @@
}, },
json={ json={
"comment": "Domain verification record", "comment": "Domain verification record",
"name": "${domain}", "name": "*.${domain}",
"proxied": True, "proxied": True,
"settings": {}, "settings": {},
"tags": [], "tags": [],
@@ -145,14 +180,32 @@
} }
) )
resp_sshd = requests.patch(
'https://api.cloudflare.com/client/v4/zones/${zone_id}/dns_records/${record_id.ssh6}',
headers={
'Content-Type': 'application/json',
'X-Auth-Email': '${account_id}',
'X-Auth-Key': pw
},
json={
"comment": "Domain verification record",
"name": "ssh.${domain}",
"proxied": False,
"settings": {},
"tags": [],
"ttl": 1, # automatic
"content": my_ip6,
"type": "AAAA"
}
)
if resp_base.status_code != 200: if resp_base.status_code != 200:
print(resp_base.text) print(resp_base.text)
# now_str = datetime.now().strftime('%Y/%m/%d-%R')
now_str = datetime.now().strftime('%Y/%m/%d-%R') # log_entry = f"At {now_str} - to {my_ip6} - Response {resp_base.status_code}\n"
log_entry = f"At {now_str} - to {my_ip6} - Response {resp_base.status_code}\n" # print(log_entry, end="")
print(log_entry, end="") # with open("${log-file-path}", 'a') as log_file: log_file.write(log_entry)
with open("${log-file-path}", 'a') as log_file: log_file.write(log_entry)
if __name__ == "__main__": if __name__ == "__main__":
main() main()
@@ -164,7 +217,7 @@
''; '';
serviceConfig = { serviceConfig = {
Type = "oneshot"; Type = "oneshot";
User = "root"; User = dns-user;
}; };
}; };
}; };
@@ -174,7 +227,7 @@
# "172.1.0.9" = [ "matrixdb.docker" ]; # "172.1.0.9" = [ "matrixdb.docker" ];
# "172.1.4.1" = [ "matrix-ss.docker" ]; # "172.1.4.1" = [ "matrix-ss.docker" ];
# "172.1.0.7" = [ "matrix-ssdb.docker" ]; # "172.1.0.7" = [ "matrix-ssdb.docker" ];
"172.1.5.1" = [ "pw.docker" ]; # "172.1.5.1" = [ "pw.docker" ];
"172.1.6.1" = [ "git.docker" ]; "172.1.6.1" = [ "git.docker" ];
# "172.1.0.10" = [ "gitdb.docker" ]; # "172.1.0.10" = [ "gitdb.docker" ];
# "172.1.7.1" = [ "nn.docker" ]; # "172.1.7.1" = [ "nn.docker" ];

View File

@@ -1,26 +1,38 @@
{ config, pkgs-unstable, domain, ... }: { config, pkgs, secrets, user, domain, ... }:
let git-user = "git"; in
{ {
sops.secrets = { sops.secrets = {
"postgres-pw" = { owner = "gitea"; }; "postgres-pw" = { owner = config.services.gitea.user; };
};
users = {
users = {
"${user}".extraGroups = [ git-user ];
"${git-user}" = {
isSystemUser = true;
group = git-user;
useDefaultShell = true;
home = config.services.gitea.stateDir;
openssh.authorizedKeys.keys = config.users.users."${user}".openssh.authorizedKeys.keys;
};
};
groups."${git-user}" = {};
}; };
services.gitea = { services.gitea = {
enable = true; enable = true;
package = pkgs-unstable.gitea; package = pkgs.gitea;
group = "gitea"; # default group = git-user;
user = "gitea"; # default user = git-user;
appName = "NxGit"; appName = "NxGit";
stateDir = "/var/lib/gitea"; # default stateDir = "/var/lib/gitea"; # default
useWizard = false; # default useWizard = false; # default
# camoHmacKeyFile = ; # camoHmacKeyFile = ;
customDir = "${config.services.gitea.stateDir}/custom"; # default
database = { database = {
createDatabase = false; # default createDatabase = false; # default
host = "127.0.0.1"; # default host = config.services.postgresql.settings.listen_addresses;
port = 5432; port = config.services.postgresql.settings.port;
passwordFile = config.sops.secrets."postgres-pw".path; passwordFile = config.sops.secrets."postgres-pw".path;
# path = "${config.services.gitea.stateDir}/data/gitea.db"; # default
# socket = "/run/postgresql";
socket = null; socket = null;
type = "postgres"; type = "postgres";
name = "gitea"; # default name = "gitea"; # default
@@ -28,37 +40,35 @@
}; };
dump = { dump = {
enable = true; enable = true;
backupDir = "${config.services.gitea.stateDir}/dump"; # default backupDir = "/var/backup/gitea";
file = null; # default file = null; # default = chosen by gitea
interval = "daily"; interval = "daily";
type = "zip"; # default type = "zip"; # default
}; };
extraConfig = null; # default # extraConfig = null; # default
lfs = { # lfs = {
enable = false; # default # enable = false; # default
contentDir = "${config.services.gitea.stateDir}/data/lfs"; # default # contentDir = "${config.services.gitea.stateDir}/data/lfs"; # default
}; # };
mailerPasswordFile = null; # default # mailerPasswordFile = null; # default
metricsTokenFile = null; # default # metricsTokenFile = null; # default
repositoryRoot = "${config.services.gitea.stateDir}/repositories"; # default # repositoryRoot = "${config.services.gitea.stateDir}/repositories"; # default
settings = { settings = {
log = { log = {
LEVEL = "Info"; LEVEL = "Info";
# LEVEL = "Error"; # LEVEL = "Error";
ROOT_PATH = "${config.services.gitea.stateDir}/log"; # default
};
i18n = {
LANGS = "en-US";
}; };
server = { server = {
DISABLE_SSH = false; # default DISABLE_SSH = false; # default
SSH_PORT = 20022; START_SSH_SERVER = false; # default
DOMAIN = "pw2.${domain}"; SSH_LISTEN_HOST = "0.0.0.0";
HTTP_ADDR = "http://${config.services.gitea.settings.server.DOMAIN}:${toString config.services.gitea.settings.server.HTTP_PORT}/"; SSH_PORT = secrets.ssh.port;
HTTP_PORT = 3000; # default DOMAIN = "git.${domain}";
PROTOCOL = "http"; # default SSH_DOMAIN = "ssh.${domain}";
ROOT_URL = "https:pw2.${domain}/"; # default # HTTP_ADDR = "${config.services.gitea.settings.server.DOMAIN}";
STATIC_ROOT_PATH = "${config.services.gitea.stateDir}/static"; # HTTP_PORT = 3000; # default
# PROTOCOL = "http"; # default
ROOT_URL = "https://git.${domain}/"; # default
}; };
session = { session = {
COOKIE_SECURE = true; COOKIE_SECURE = true;
@@ -66,6 +76,31 @@
service = { service = {
DISABLE_REGISTRATION = true; DISABLE_REGISTRATION = true;
}; };
ui = {
DEFAULT_THEME = "pitchblack";
THEMES = "gitea,arc-green,pitchblack";
}; };
}; };
};
system.activationScripts = let
# theme = pkgs.fetchFromGitHub {
# owner = "unixtensor";
# repo = "Gitea-Pitch-Black";
# rev = "v1.15.X.2";
# hash = "sha256-Eibgoc3BJUXWdq8irgXea09fAvfKx2eQrJotp3P5DTg=";
# };
theme = pkgs.fetchFromGitea {
domain = "git.${domain}";
owner = "nx2";
repo = "Gitea-Pitch-Black";
rev = "0.1.0";
hash = "sha256-pU4YhgcPOT3PTcmBTjNE3FcyJgl39JGP41ckhRUKN7Y=";
};
in {
"gitea-theme" = /* bash */ ''
mkdir -p ${config.services.gitea.stateDir}/custom/public/assets/css/
ln -s ${theme}/theme-pitchblack.css ${config.services.gitea.stateDir}/custom/public/assets/css/theme-pitchblack.css
chown -R ${git-user}:${git-user} ${config.services.gitea.stateDir}/custom/
'';
};
} }

View File

@@ -0,0 +1,197 @@
{ config, pkgs, secrets, user, domain, ... }:
let paperless-user = "paperless"; in
{
sops.secrets = {
"nx2site/paperless.pw" = {
owner = paperless-user;
};
};
users.users."${user}".extraGroups = [ paperless-user ];
services = {
postgresql = {
ensureDatabases = [ paperless-user ];
ensureUsers = [{
name = paperless-user;
ensureDBOwnership = true;
}];
};
paperless = {
enable = true;
address = "127.0.0.1";
port = 8441;
user = paperless-user;
consumptionDirIsPublic = true;
# package = pkgs.paperless-ngx;
# dataDir = "/var/lib/paperless"; # default
# address = "127.0.0.1";
# mediaDir = "${dataDir}/media";
passwordFile = config.sops.secrets."nx2site/paperless.pw".path;
# consumptionDir = "${dataDir}/consume";
# consumptionDirIsPublic = false;
# openMPThreadingWorkaround = true;
settings = {
# PAPERLESS_REDIS = "redis://localhost:6379";
# PAPERLESS_REDIS_PREFIX=""
PAPERLESS_DBENGINE = "postgresql";
# PAPERLESS_DBHOST = "/run/postgresql"; # config.services.postgresql.settings.listen_addresses;
# PAPERLESS_DBPORT = config.services.postgresql.settings.port;
PAPERLESS_DBNAME = paperless-user;
PAPERLESS_DBUSER = paperless-user;
PAPERLESS_DBPASS = secrets.nx2site.paperless.PAPERLESS_DBPASS;
# PAPERLESS_DBSSLMODE=
# PAPERLESS_DBSSLROOTCERT=null; # unset, using the documented path in the home directory.
# PAPERLESS_DBSSLCERT=null; # unset, using the documented path in the home directory.
# PAPERLESS_DBSSLKEY=null; # unset, using the documented path in the home directory.
# PAPERLESS_DB_TIMEOUT=null; # unset, keeping the Django defaults.
# PAPERLESS_TIKA_ENABLED=false
# PAPERLESS_TIKA_ENDPOINT="http://localhost:9998".
# PAPERLESS_TIKA_GOTENBERG_ENDPOINT="http://localhost:3000".
PAPERLESS_CONSUMPTION_DIR = "${config.services.paperless.dataDir}/consume/";
# PAPERLESS_DATA_DIR = "${config.services.paperless.dataDir}/data/";
PAPERLESS_EMPTY_TRASH_DIR ="${config.services.paperless.dataDir}/trash/"; # null = really delete files
# PAPERLESS_MEDIA_ROOT = "${config.services.paperless.dataDir}/media/";
# PAPERLESS_STATICDIR = "${config.services.paperless.dataDir}/static/";
# PAPERLESS_FILENAME_FORMAT=
# PAPERLESS_FILENAME_FORMAT_REMOVE_NONE=
# PAPERLESS_LOGGING_DIR = "${config.services.paperless.dataDir}/log/";
# PAPERLESS_NLTK_DIR =
# PAPERLESS_MODEL_FILE= PAPERLESS_DATA_DIR/classification_model.pickle.
# PAPERLESS_LOGROTATE_MAX_SIZE= 1 MiB.
# PAPERLESS_LOGROTATE_MAX_BACKUPS= 20.
# PAPERLESS_SECRET_KEY=
# PAPERLESS_URL="" # empty string, leaving the other settings unaffected.
# PAPERLESS_CSRF_TRUSTED_ORIGINS=
# PAPERLESS_ALLOWED_HOSTS=
# PAPERLESS_CORS_ALLOWED_HOSTS=
# PAPERLESS_TRUSTED_PROXIES=
# PAPERLESS_FORCE_SCRIPT_NAME=
# PAPERLESS_STATIC_URL= "/static/".
# PAPERLESS_AUTO_LOGIN_USERNAME=null;
PAPERLESS_ADMIN_USER="${user}";
PAPERLESS_ADMIN_MAIL=secrets.email.gmail-online.mail;
# PAPERLESS_ADMIN_PASSWORD=;
# PAPERLESS_COOKIE_PREFIX=
# PAPERLESS_ENABLE_HTTP_REMOTE_USER=
# PAPERLESS_ENABLE_HTTP_REMOTE_USER_API=
# PAPERLESS_HTTP_REMOTE_USER_HEADER_NAME=
# PAPERLESS_LOGOUT_REDIRECT_URL="https://youtu.be/dMN-pjcchrE?si=EcFYvAnbXFkounYR";
# PAPERLESS_USE_X_FORWARD_HOST= false
# PAPERLESS_USE_X_FORWARD_PORT= false
# PAPERLESS_PROXY_SSL_HEADER= null
# PAPERLESS_EMAIL_CERTIFICATE_LOCATION = null;
# PAPERLESS_SOCIALACCOUNT_PROVIDERS=;
# PAPERLESS_SOCIAL_AUTO_SIGNUP = false;
# PAPERLESS_SOCIALACCOUNT_ALLOW_SIGNUPS= True
# PAPERLESS_ACCOUNT_ALLOW_SIGNUPS= False
# PAPERLESS_ACCOUNT_DEFAULT_HTTP_PROTOCOL= 'https'
# PAPERLESS_ACCOUNT_EMAIL_VERIFICATION= 'optional'
# PAPERLESS_DISABLE_REGULAR_LOGIN= False
# PAPERLESS_REDIRECT_LOGIN_TO_SSO= False
# PAPERLESS_ACCOUNT_SESSION_REMEMBER= True
# PAPERLESS_SESSION_COOKIE_AGE= 1209600; # (2 weeks)
PAPERLESS_OCR_LANGUAGE = "eng+deu";
# PAPERLESS_OCR_MODE= "skip";
# PAPERLESS_OCR_SKIP_ARCHIVE_FILE=
# PAPERLESS_OCR_CLEAN= clean.
# PAPERLESS_OCR_DESKEW = true; # which enables this feature.
# PAPERLESS_OCR_ROTATE_PAGES = true; # which enables this feature.
# PAPERLESS_OCR_ROTATE_PAGES_THRESHOLD = "12";
# PAPERLESS_OCR_OUTPUT_TYPE = "pdfa";
# PAPERLESS_OCR_PAGES = null;
# PAPERLESS_OCR_IMAGE_DPI = null;
# PAPERLESS_OCR_MAX_IMAGE_PIXELS=
# PAPERLESS_OCR_COLOR_CONVERSION_STRATEGY=
PAPERLESS_OCR_USER_ARGS = {
optimize = 1;
pdfa_image_compression = "lossless";
};
# PAPERLESS_TASK_WORKERS= 1
# PAPERLESS_THREADS_PER_WORKER=
# PAPERLESS_WORKER_TIMEOUT=
PAPERLESS_TIME_ZONE = "CET";
# PAPERLESS_ENABLE_NLTK=1;
# PAPERLESS_EMAIL_TASK_CRON= */10 * * * * or every ten minutes.
# PAPERLESS_TRAIN_TASK_CRON= 5 */1 * * * or every hour at 5 minutes past the hour.
# PAPERLESS_INDEX_TASK_CRON= 0 0 * * * or daily at midnight.
# PAPERLESS_SANITY_TASK_CRON= 30 0 * * sun or Sunday at 30 minutes past midnight.
# PAPERLESS_ENABLE_COMPRESSION = 1; # enabling compression.
# PAPERLESS_CONVERT_MEMORY_LIMIT = 0; # which disables the limit.
# PAPERLESS_CONVERT_TMPDIR =
# PAPERLESS_APPS = null;
# PAPERLESS_MAX_IMAGE_PIXELS = null;
# PAPERLESS_CONSUMER_DELETE_DUPLICATES= false.
# PAPERLESS_CONSUMER_RECURSIVE= false.
# PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS= false.
PAPERLESS_CONSUMER_IGNORE_PATTERNS = [
".DS_Store"
".DS_STORE"
"._*"
".stfolder/*"
".stversions/*"
".localized/*"
"desktop.ini"
"@eaDir/*"
"Thumbs.db"
];
# PAPERLESS_CONSUMER_BARCODE_SCANNER=
# PAPERLESS_PRE_CONSUME_SCRIPT=
# PAPERLESS_POST_CONSUME_SCRIPT=
# PAPERLESS_FILENAME_DATE_ORDER= none, which disables this feature.
# PAPERLESS_NUMBER_OF_SUGGESTED_DATES= 3. Set to 0 to disable this feature.
# PAPERLESS_THUMBNAIL_FONT_NAME= /usr/share/fonts/liberation/LiberationSerif-Regular.ttf.
# PAPERLESS_IGNORE_DATES="";
# PAPERLESS_DATE_ORDER = "DMY";
# PAPERLESS_ENABLE_GPG_DECRYPTOR = false;
# PAPERLESS_CONSUMER_POLLING = 0; # which disables polling and uses filesystem notifications.
# PAPERLESS_CONSUMER_POLLING_RETRY_COUNT = 5;
# PAPERLESS_CONSUMER_POLLING_DELAY = 5;
# PAPERLESS_CONSUMER_INOTIFY_DELAY= 0.5; # seconds.
# PAPERLESS_OAUTH_CALLBACK_BASE_URL = null;
# PAPERLESS_GMAIL_OAUTH_CLIENT_ID = null;
# PAPERLESS_GMAIL_OAUTH_CLIENT_SECRET = null;
# PAPERLESS_OUTLOOK_OAUTH_CLIENT_ID = null;
# PAPERLESS_OUTLOOK_OAUTH_CLIENT_SECRET = null;
# PAPERLESS_EMAIL_GNUPG_HOME=
# PAPERLESS_CONSUMER_ENABLE_BARCODES=
# PAPERLESS_CONSUMER_BARCODE_TIFF_SUPPORT= false.
# PAPERLESS_CONSUMER_BARCODE_STRING= "PATCHT"
# PAPERLESS_CONSUMER_BARCODE_RETAIN_SPLIT_PAGES= false.
# PAPERLESS_CONSUMER_ENABLE_ASN_BARCODE= false.
# PAPERLESS_CONSUMER_ASN_BARCODE_PREFIX= "ASN"
# PAPERLESS_CONSUMER_BARCODE_UPSCALE= 0.0
# PAPERLESS_CONSUMER_BARCODE_DPI= "300"
# PAPERLESS_CONSUMER_BARCODE_MAX_PAGES= "0"
# PAPERLESS_CONSUMER_ENABLE_TAG_BARCODE= false.
# PAPERLESS_CONSUMER_TAG_BARCODE_MAPPING=
# PAPERLESS_AUDIT_LOG_ENABLED= true.
# PAPERLESS_CONSUMER_ENABLE_COLLATE_DOUBLE_SIDED= false.
# PAPERLESS_CONSUMER_COLLATE_DOUBLE_SIDED_SUBDIR_NAME= "double-sided".
# PAPERLESS_CONSUMER_COLLATE_DOUBLE_SIDED_TIFF_SUPPORT= false.
# PAPERLESS_EMPTY_TRASH_DELAY = 30; # days, minimum of 1 day.
# PAPERLESS_EMPTY_TRASH_TASK_CRON= 0 1 * * *, once per day.
# PAPERLESS_CONVERT_BINARY = "convert".
# PAPERLESS_GS_BINARY = "${pkgs.ghostscript}/bin/gs";
# PAPERLESS_WEBSERVER_WORKERS= 1;
# PAPERLESS_BIND_ADDR= [::], meaning all interfaces, including IPv6.
# PAPERLESS_PORT = config.services.paperless.port;
# PAPERLESS_OCR_LANGUAGES=
# PAPERLESS_ENABLE_FLOWER=
# PAPERLESS_SUPERVISORD_WORKING_DIR=
# PAPERLESS_APP_TITLE = "NxPPL";
# PAPERLESS_APP_LOGO =
# PAPERLESS_ENABLE_UPDATE_CHECK=false;
# PAPERLESS_EMAIL_HOST = "localhost";
# PAPERLESS_EMAIL_PORT= 25.
# PAPERLESS_EMAIL_HOST_USER= "";
# PAPERLESS_EMAIL_FROM=
# PAPERLESS_EMAIL_HOST_PASSWORD = "".
# PAPERLESS_EMAIL_USE_TLS = false.
# PAPERLESS_EMAIL_USE_SSL = false.
};
};
};
}

View File

@@ -14,7 +14,7 @@
}; };
certs = { certs = {
"${domain}" = { "${domain}" = {
extraDomainNames = builtins.map (subd: "${subd}.${domain}") [ "git" "git2" "pw" "pw2" "sync" ]; extraDomainNames = builtins.map (subd: "${subd}.${domain}") [ "git" "pw" "sync" ];
}; };
}; };
}; };
@@ -72,7 +72,7 @@
http3 = true; http3 = true;
http3_hq = true; http3_hq = true;
quic = true; quic = true;
addSSL = true; forceSSL = true;
enableACME = true; enableACME = true;
}; };
in { in {
@@ -99,18 +99,20 @@
listen = dl; listen = dl;
locations = { "~.*" = { return = "502"; }; }; locations = { "~.*" = { return = "502"; }; };
}; };
# "pw.${domain}" = vh // {
# listen = dl;
# locations = let d = "pw.docker:80"; in {
# "/" = { proxyPass = "http://${d}"; };
# "/admin" = { proxyPass = "http://${d}"; };
# "/notifications/hub" = { proxyPass = "http://${d}"; };
# "/notifications/hub/negotiate" = { proxyPass = "http://${d}"; };
# };
# };
"pw.${domain}" = vh // { "pw.${domain}" = vh // {
listen = dl; listen = dl;
locations = let d = "pw.docker:80"; in { locations = let
"/" = { proxyPass = "http://${d}"; }; d = with config.services.vaultwarden.config; "${ROCKET_ADDRESS}:${builtins.toString ROCKET_PORT}";
"/admin" = { proxyPass = "http://${d}"; }; in {
"/notifications/hub" = { proxyPass = "http://${d}"; };
"/notifications/hub/negotiate" = { proxyPass = "http://${d}"; };
};
};
"pw2.${domain}" = vh // {
listen = dl;
locations = let d = "127.0.0.1:3000"; in {
"/" = { proxyPass = "http://${d}"; }; "/" = { proxyPass = "http://${d}"; };
"/admin" = { proxyPass = "http://${d}"; }; "/admin" = { proxyPass = "http://${d}"; };
"/notifications/hub" = { proxyPass = "http://${d}"; }; "/notifications/hub" = { proxyPass = "http://${d}"; };
@@ -121,13 +123,18 @@
listen = dl; listen = dl;
locations = { "/" = { proxyPass = "http://127.0.0.1:11434"; }; }; locations = { "/" = { proxyPass = "http://127.0.0.1:11434"; }; };
}; };
# "git.${domain}" = vh // {
# listen = dl;
# locations = { "/" = { proxyPass = "http://git.docker:3000"; }; };
# };
"git.${domain}" = vh // { "git.${domain}" = vh // {
http2 = false;
listen = dl; listen = dl;
locations = { "/" = { proxyPass = "http://git.docker:3000"; }; }; locations = { "/" = { proxyPass = "http://127.0.0.1:3000"; }; };
}; };
"git2.${domain}" = vh // { "doc.${domain}" = vh // {
listen = dl; listen = dl;
locations = { "/" = { proxyPass = "http://127.0.0.1:8222"; }; }; locations = { "/" = { proxyPass = "http://127.0.0.1:8441"; }; };
}; };
"~^(.*).${domain}$" = { "~^(.*).${domain}$" = {
listen = dl; listen = dl;

View File

@@ -0,0 +1,43 @@
{ config, pkgs, secrets, domain, ... }:
{
sops.secrets = {
"nx2site/vaultwarden.env" = {
owner = "vaultwarden";
};
};
services.vaultwarden = {
enable = true;
package = pkgs.vaultwarden;
webVaultPackage = pkgs.vaultwarden.webvault;
dbBackend = "postgresql";
# backupDir = "/var/backup/vaultwarden";
environmentFile = config.sops.secrets."nx2site/vaultwarden.env".path;
config = {
ROCKET_ADDRESS = "127.0.0.1";
ROCKET_PORT = 8222;
DATABASE_URL = "@DATABASE_URL@";
# DATABASE_URL = "postgresql://vaultwarden:fakepw123@127.0.0.1:5432/vaultwarden";
SMTP_HOST = "smtp.gmail.com";
SMTP_FROM = secrets.email.gmail-online.mail;
SMTP_PORT = 587;
SMTP_SECURITY = "starttls";
SMTP_USERNAME = secrets.email.gmail-online.mail;
SMTP_PASSWORD = "@SMTP_PASSWORD@";
LOGIN_RATELIMIT_MAX_BURST = 10;
LOGIN_RATELIMIT_SECONDS = 60;
DOMAIN = "https://pw.${domain}";
INVITATION_ORG_NAME = "NxPW";
INVITATIONS_ALLOWED = true;
ADMIN_TOKEN = "@ADMIN_TOKEN@";
SIGNUPS_ALLOWED = false;
SIGNUPS_VERIFY = true;
SIGNUPS_VERIFY_RESEND_TIME = 3600;
SIGNUPS_VERIFY_RESEND_LIMIT = 6;
EMERGENCY_ACCESS_ALLOWED = true;
SENDS_ALLOWED = true;
WEB_VAULT_ENABLED = true;
};
};
}

View File

@@ -19,7 +19,8 @@ in {
package = p; package = p;
enable = true; enable = true;
acceleration = lib.mkIf nvidia.enable "cuda"; acceleration = lib.mkIf nvidia.enable "cuda";
listenAddress = if host == "NxACE" then "0.0.0.0:11434" else "127.0.0.1:11434"; host = if host == "NxACE" then "0.0.0.0" else "127.0.0.1";
port = 11434;
environmentVariables = { environmentVariables = {
OLLAMA_ORIGINS = "*"; OLLAMA_ORIGINS = "*";
}; };

View File

@@ -23,58 +23,49 @@
# recoveryConfig = null; # recoveryConfig = null;
ensureDatabases = [ ensureDatabases = [
"gitea" "gitea"
# "vaultwarden" "vaultwarden"
]; ];
settings = { settings = {
port = 5432; # default port = 5432; # default
listen_addresses = "localhost"; listen_addresses = lib.mkForce "127.0.0.1";
log_line_prefix = "[%p] "; # default log_line_prefix = "[%p] "; # default
shared_preload_libraries = [ ]; # default shared_preload_libraries = [ ]; # default
}; };
ensureUsers = [ ensureUsers = [
# {
# name = "${user}";
# ensureDBOwnership = false;
# ensureClauses = {
# login = true;
# # inherit
# createdb = true;
# bypassrls = true;
# superuser = true;
# createrole = true;
# replication = true;
# };
# }
{
# as liong as there is no declarative user management you gotta set a pw by hand # as liong as there is no declarative user management you gotta set a pw by hand
# sudo -u postgres psql -c "ALTER USER gitea PASSWORD 'new-passwd';" # sudo -u postgres psql -c "ALTER USER gitea PASSWORD 'new-passwd';"
{
name = "gitea"; name = "gitea";
ensureDBOwnership = true; ensureDBOwnership = true;
} }
{
name = "vaultwarden";
ensureDBOwnership = true;
}
]; ];
}; };
# postgresqlBackup = { postgresqlBackup = {
# enable enable = true;
# startAt # startAt = "*-*-* 01:15:00";
# location # location = "/var/backup/postgresql";
# databases databases = config.services.postgresql.ensureDatabases;
# backupAll backupAll = false;
# compression # compression = "gzip";
# } # pgdumpOptions = "-C";
# compressionLevel = 6;
};
# postgresqlWalReceiver.receivers."main" = { # postgresqlWalReceiver.receivers."main" = {
# postgresqlPackage = pkgs.postgresql_15; # postgresqlPackage = pkgs.postgresql_15;
# directory = /mnt/pg_wal/main/; # directory = /mnt/pg_wal/main/;
# slot = "main_wal_receiver"; # slot = "main_wal_receiver";
# connection = "postgresql://user@somehost"; # connection = "postgresql://user@somehost";
# compress # compress
# extraArgs # extraArgs
# synchronous # synchronous
# environment # environment
# statusInterval # statusInterval
# }; # };
# } # };
}; };
} }

View File

@@ -3,7 +3,7 @@
{ {
environment.etc."ssh/ssh_host_ed25519_key.pub".text = if (host == "NxNORTH") then environment.etc."ssh/ssh_host_ed25519_key.pub".text = if (host == "NxNORTH") then
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIF1r5gUQPPS/dGB0SsvWtP6WdNWoxMwhhHRrqlO19cJt root@NxNORTH" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIF1r5gUQPPS/dGB0SsvWtP6WdNWoxMwhhHRrqlO19cJt root@NxNORTH"
else if ( host == "NxXPS") then else if ( host == "NxXPS" ) then
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPf+08+t8a0lY2+nR1mhIU3vuksStiJOlojJjzCwFk7r root@NxXPS" "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIPf+08+t8a0lY2+nR1mhIU3vuksStiJOlojJjzCwFk7r root@NxXPS"
else else
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBFfZpWVPlujsz3FklSVAM+tuYn4pzDSijhp5CeYNOZk root@NxACE"; "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBFfZpWVPlujsz3FklSVAM+tuYn4pzDSijhp5CeYNOZk root@NxACE";
@@ -13,7 +13,7 @@
}; };
services.openssh = { services.openssh = {
enable = true; enable = true;
ports = secrets.ssh.ports; ports = [ secrets.ssh.port ];
settings = { settings = {
PasswordAuthentication = false; PasswordAuthentication = false;
}; };

View File

@@ -6,6 +6,7 @@
users.users."${user}" = { users.users."${user}" = {
isNormalUser = true; isNormalUser = true;
extraGroups = [ extraGroups = [
# TODO: actually put the groups into the relevant files
"networkmanager" "networkmanager"
"wheel" "wheel"
"audio" "audio"
@@ -18,7 +19,6 @@
"acme" "acme"
"nginx" "nginx"
"adbusers" "adbusers"
"gitea"
"postgres" "postgres"
]; ];
useDefaultShell = true; useDefaultShell = true;