From 6ab835555c8a10190e044c0f15faf07db3cdc23a Mon Sep 17 00:00:00 2001 From: Anthony Rodriguez Date: Mon, 27 Jan 2025 23:30:24 +0100 Subject: [PATCH] treewide: remove home-manager (switch to hjem) As my NixOS configuration kept growing, I noticed that I don't need home-manager as much as I did before. A lot of what I need is just a way to map nix attrsets to the program's respective configuration format, which is something that I can now do myself, as my nix knowledge got more extensive. After all of this, I decided to completely get rid of home-manager, and switch to a simpler solution called hjem, which just lets me write files to my home directory that are automatically symlinked using `systemd-tmpfiles`. This allows me to simplify my configuration, remove the separation between NixOS and home-manager modules, and cut my eval times by quite a lot (which allows for faster `nixos-rebuild switch`!). --- flake.lock | 141 ++---------- flake.nix | 15 +- hosts/default.nix | 6 +- hosts/vamos/default.nix | 1 + modules/{nix => }/core/boot.nix | 0 modules/{nix => }/core/default.nix | 1 - modules/{nix => }/core/fonts.nix | 0 modules/{nix => }/core/hardware/default.nix | 0 modules/{nix => }/core/hardware/fprintd.nix | 0 modules/{nix => }/core/hardware/fwupd.nix | 0 modules/{nix => }/core/hardware/printing.nix | 0 modules/{nix => }/core/hardware/uni-sync.nix | 0 modules/{nix => }/core/hardware/via.nix | 0 modules/{nix => }/core/locales.nix | 0 modules/{nix => }/core/networking.nix | 0 modules/{nix => }/core/nix.nix | 0 modules/{nix => }/core/security.nix | 0 modules/{nix => }/core/users.nix | 13 +- modules/default.nix | 4 +- modules/hm/default.nix | 18 -- modules/hm/programs/anyrun.nix | 110 --------- modules/hm/programs/browsers/default.nix | 3 - modules/hm/programs/browsers/firefox.nix | 176 --------------- modules/hm/programs/discord.nix | 116 ---------- modules/hm/programs/editors/default.nix | 6 - modules/hm/programs/editors/helix.nix | 64 ------ modules/hm/programs/games.nix | 17 -- modules/hm/programs/gnome.nix | 16 -- modules/hm/programs/hypr/idle.nix | 58 ----- modules/hm/programs/hypr/land/binds.nix | 85 ------- modules/hm/programs/hypr/land/default.nix | 140 ------------ modules/hm/programs/hypr/lock.nix | 114 ---------- modules/hm/programs/hypr/paper.nix | 22 -- modules/hm/programs/media/tidal-hifi.nix | 196 ---------------- modules/hm/programs/media/zathura.nix | 23 -- modules/hm/programs/misc.nix | 39 ---- modules/hm/programs/terminal/default.nix | 17 -- .../hm/programs/terminal/emulators/foot.nix | 54 ----- .../programs/terminal/emulators/ghostty.nix | 109 --------- modules/hm/programs/terminal/programs/bat.nix | 26 --- .../hm/programs/terminal/programs/direnv.nix | 14 -- modules/hm/programs/terminal/programs/git.nix | 60 ----- .../hm/programs/terminal/programs/gnupg.nix | 14 -- .../hm/programs/terminal/programs/misc.nix | 20 -- .../programs/terminal/programs/nix-index.nix | 19 -- .../hm/programs/terminal/programs/yazi.nix | 33 --- modules/hm/programs/terminal/shell/fish.nix | 88 -------- .../hm/programs/terminal/shell/starship.nix | 29 --- modules/hm/programs/terminal/shell/zoxide.nix | 12 - modules/hm/programs/walker.nix | 184 --------------- modules/hm/programs/wlogout.nix | 69 ------ modules/hm/programs/xdg.nix | 42 ---- modules/hm/services/default.nix | 9 - modules/hm/services/gammastep.nix | 23 -- modules/hm/services/gtk.nix | 26 --- modules/hm/services/swaync/default.nix | 41 ---- modules/hm/services/syncthing.nix | 11 - modules/hm/services/udiskie.nix | 9 - modules/nix/core/home-manager.nix | 38 ---- modules/nix/programs/default.nix | 7 - modules/nix/programs/games.nix | 21 -- modules/nix/programs/hyprland.nix | 36 --- modules/nix/programs/xdg.nix | 21 -- modules/nix/services/syncthing.nix | 14 -- modules/options/homeVars.nix | 17 ++ modules/programs/anyrun/config.ron | 38 ++++ modules/programs/anyrun/default.nix | 36 +++ modules/programs/anyrun/style.css | 25 +++ modules/{hm => }/programs/default.nix | 5 +- modules/programs/discord.nix | 118 ++++++++++ modules/programs/editors/default.nix | 23 ++ modules/{hm => }/programs/editors/neovim.nix | 41 +--- modules/programs/firefox.nix | 170 ++++++++++++++ modules/programs/games.nix | 36 +++ modules/{hm => }/programs/hypr/default.nix | 3 +- modules/programs/hypr/idle.nix | 62 +++++ modules/programs/hypr/land/binds.nix | 77 +++++++ modules/programs/hypr/land/default.nix | 167 ++++++++++++++ modules/programs/hypr/lock.nix | 119 ++++++++++ modules/programs/hypr/paper.nix | 42 ++++ modules/{hm => }/programs/media/default.nix | 11 +- modules/programs/media/tidal-hifi.nix | 201 +++++++++++++++++ modules/programs/media/zathura.nix | 31 +++ modules/programs/misc.nix | 42 ++++ .../{nix => programs/terminal}/default.nix | 6 +- .../programs/terminal/emulators/default.nix | 0 modules/programs/terminal/emulators/foot.nix | 56 +++++ .../programs/terminal/emulators/ghostty.nix | 114 ++++++++++ modules/programs/terminal/programs/bat.nix | 31 +++ .../programs/terminal/programs/default.nix | 5 +- modules/programs/terminal/programs/direnv.nix | 9 + modules/programs/terminal/programs/git.nix | 29 +++ modules/programs/terminal/programs/misc.nix | 25 +++ .../programs/terminal/programs/tmux.nix | 0 .../programs/terminal/shell/default.nix | 2 +- modules/programs/terminal/shell/nushell.nix | 95 ++++++++ modules/programs/terminal/shell/starship.nix | 32 +++ modules/programs/terminal/shell/zoxide.nix | 14 ++ modules/{hm => }/programs/waybar.nix | 211 ++++++++++-------- modules/programs/wlogout.nix | 75 +++++++ modules/programs/xdg.nix | 46 ++++ modules/{nix => }/services/brightness.nix | 0 modules/{nix => }/services/default.nix | 7 +- modules/{nix => }/services/docker.nix | 0 modules/{nix => }/services/documentation.nix | 0 modules/{nix => }/services/flatpak.nix | 0 modules/{nix => }/services/forgejo.nix | 0 modules/services/gammastep.nix | 37 +++ modules/{nix => }/services/gnome.nix | 0 modules/{nix => }/services/greetd.nix | 0 modules/services/gtk.nix | 40 ++++ modules/{nix => }/services/keyd.nix | 0 modules/{nix => }/services/kmscon.nix | 0 modules/{nix => }/services/location.nix | 0 modules/{nix => }/services/logind.nix | 0 modules/{nix => }/services/pipewire.nix | 0 modules/{nix => }/services/power.nix | 0 modules/{nix => }/services/searx.nix | 0 .../services/gnupg.nix => services/ssh.nix} | 5 +- modules/services/swaync/default.nix | 52 +++++ modules/{hm => }/services/swaync/style.css | 0 modules/{nix => }/services/website.nix | 0 shared/lib/default.nix | 5 +- shared/lib/generators/default.nix | 4 + shared/lib/generators/gtk.nix | 31 +++ shared/lib/generators/tohyprconf.nix | 63 ++++++ 126 files changed, 2154 insertions(+), 2534 deletions(-) rename modules/{nix => }/core/boot.nix (100%) rename modules/{nix => }/core/default.nix (91%) rename modules/{nix => }/core/fonts.nix (100%) rename modules/{nix => }/core/hardware/default.nix (100%) rename modules/{nix => }/core/hardware/fprintd.nix (100%) rename modules/{nix => }/core/hardware/fwupd.nix (100%) rename modules/{nix => }/core/hardware/printing.nix (100%) rename modules/{nix => }/core/hardware/uni-sync.nix (100%) rename modules/{nix => }/core/hardware/via.nix (100%) rename modules/{nix => }/core/locales.nix (100%) rename modules/{nix => }/core/networking.nix (100%) rename modules/{nix => }/core/nix.nix (100%) rename modules/{nix => }/core/security.nix (100%) rename modules/{nix => }/core/users.nix (60%) delete mode 100644 modules/hm/default.nix delete mode 100644 modules/hm/programs/anyrun.nix delete mode 100644 modules/hm/programs/browsers/default.nix delete mode 100644 modules/hm/programs/browsers/firefox.nix delete mode 100644 modules/hm/programs/discord.nix delete mode 100644 modules/hm/programs/editors/default.nix delete mode 100644 modules/hm/programs/editors/helix.nix delete mode 100644 modules/hm/programs/games.nix delete mode 100644 modules/hm/programs/gnome.nix delete mode 100644 modules/hm/programs/hypr/idle.nix delete mode 100644 modules/hm/programs/hypr/land/binds.nix delete mode 100644 modules/hm/programs/hypr/land/default.nix delete mode 100644 modules/hm/programs/hypr/lock.nix delete mode 100644 modules/hm/programs/hypr/paper.nix delete mode 100644 modules/hm/programs/media/tidal-hifi.nix delete mode 100644 modules/hm/programs/media/zathura.nix delete mode 100644 modules/hm/programs/misc.nix delete mode 100644 modules/hm/programs/terminal/default.nix delete mode 100644 modules/hm/programs/terminal/emulators/foot.nix delete mode 100644 modules/hm/programs/terminal/emulators/ghostty.nix delete mode 100644 modules/hm/programs/terminal/programs/bat.nix delete mode 100644 modules/hm/programs/terminal/programs/direnv.nix delete mode 100644 modules/hm/programs/terminal/programs/git.nix delete mode 100644 modules/hm/programs/terminal/programs/gnupg.nix delete mode 100644 modules/hm/programs/terminal/programs/misc.nix delete mode 100644 modules/hm/programs/terminal/programs/nix-index.nix delete mode 100644 modules/hm/programs/terminal/programs/yazi.nix delete mode 100644 modules/hm/programs/terminal/shell/fish.nix delete mode 100644 modules/hm/programs/terminal/shell/starship.nix delete mode 100644 modules/hm/programs/terminal/shell/zoxide.nix delete mode 100644 modules/hm/programs/walker.nix delete mode 100644 modules/hm/programs/wlogout.nix delete mode 100644 modules/hm/programs/xdg.nix delete mode 100644 modules/hm/services/default.nix delete mode 100644 modules/hm/services/gammastep.nix delete mode 100644 modules/hm/services/gtk.nix delete mode 100644 modules/hm/services/swaync/default.nix delete mode 100644 modules/hm/services/syncthing.nix delete mode 100644 modules/hm/services/udiskie.nix delete mode 100644 modules/nix/core/home-manager.nix delete mode 100644 modules/nix/programs/default.nix delete mode 100644 modules/nix/programs/games.nix delete mode 100644 modules/nix/programs/hyprland.nix delete mode 100644 modules/nix/programs/xdg.nix delete mode 100644 modules/nix/services/syncthing.nix create mode 100644 modules/programs/anyrun/config.ron create mode 100644 modules/programs/anyrun/default.nix create mode 100644 modules/programs/anyrun/style.css rename modules/{hm => }/programs/default.nix (78%) create mode 100644 modules/programs/discord.nix create mode 100644 modules/programs/editors/default.nix rename modules/{hm => }/programs/editors/neovim.nix (90%) create mode 100644 modules/programs/firefox.nix create mode 100644 modules/programs/games.nix rename modules/{hm => }/programs/hypr/default.nix (93%) create mode 100644 modules/programs/hypr/idle.nix create mode 100644 modules/programs/hypr/land/binds.nix create mode 100644 modules/programs/hypr/land/default.nix create mode 100644 modules/programs/hypr/lock.nix create mode 100644 modules/programs/hypr/paper.nix rename modules/{hm => }/programs/media/default.nix (54%) create mode 100644 modules/programs/media/tidal-hifi.nix create mode 100644 modules/programs/media/zathura.nix create mode 100644 modules/programs/misc.nix rename modules/{nix => programs/terminal}/default.nix (52%) rename modules/{hm => }/programs/terminal/emulators/default.nix (100%) create mode 100644 modules/programs/terminal/emulators/foot.nix create mode 100644 modules/programs/terminal/emulators/ghostty.nix create mode 100644 modules/programs/terminal/programs/bat.nix rename modules/{hm => }/programs/terminal/programs/default.nix (55%) create mode 100644 modules/programs/terminal/programs/direnv.nix create mode 100644 modules/programs/terminal/programs/git.nix create mode 100644 modules/programs/terminal/programs/misc.nix rename modules/{hm => }/programs/terminal/programs/tmux.nix (100%) rename modules/{hm => }/programs/terminal/shell/default.nix (76%) create mode 100644 modules/programs/terminal/shell/nushell.nix create mode 100644 modules/programs/terminal/shell/starship.nix create mode 100644 modules/programs/terminal/shell/zoxide.nix rename modules/{hm => }/programs/waybar.nix (56%) create mode 100644 modules/programs/wlogout.nix create mode 100644 modules/programs/xdg.nix rename modules/{nix => }/services/brightness.nix (100%) rename modules/{nix => }/services/default.nix (82%) rename modules/{nix => }/services/docker.nix (100%) rename modules/{nix => }/services/documentation.nix (100%) rename modules/{nix => }/services/flatpak.nix (100%) rename modules/{nix => }/services/forgejo.nix (100%) create mode 100644 modules/services/gammastep.nix rename modules/{nix => }/services/gnome.nix (100%) rename modules/{nix => }/services/greetd.nix (100%) create mode 100644 modules/services/gtk.nix rename modules/{nix => }/services/keyd.nix (100%) rename modules/{nix => }/services/kmscon.nix (100%) rename modules/{nix => }/services/location.nix (100%) rename modules/{nix => }/services/logind.nix (100%) rename modules/{nix => }/services/pipewire.nix (100%) rename modules/{nix => }/services/power.nix (100%) rename modules/{nix => }/services/searx.nix (100%) rename modules/{nix/services/gnupg.nix => services/ssh.nix} (55%) create mode 100644 modules/services/swaync/default.nix rename modules/{hm => }/services/swaync/style.css (100%) rename modules/{nix => }/services/website.nix (100%) create mode 100644 shared/lib/generators/default.nix create mode 100644 shared/lib/generators/gtk.nix create mode 100644 shared/lib/generators/tohyprconf.nix diff --git a/flake.lock b/flake.lock index e0dba51..3a49ff2 100644 --- a/flake.lock +++ b/flake.lock @@ -344,27 +344,6 @@ "type": "github" } }, - "flake-parts_6": { - "inputs": { - "nixpkgs-lib": [ - "walker", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1719994518, - "narHash": "sha256-pQMhCCHyQGRzdfAkdJ4cIWiw+JNuWsTX7f0ZYSyz0VY=", - "owner": "hercules-ci", - "repo": "flake-parts", - "rev": "9227223f6d922fee3c7b190b2cc238a99527bbb7", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "flake-parts", - "type": "github" - } - }, "flake-utils": { "locked": { "lastModified": 1629284811, @@ -460,6 +439,26 @@ "type": "github" } }, + "hjem": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1735415443, + "narHash": "sha256-t/OSIIGVflXP70kQieq72x+zhLVYfMejRopPgOZnV0s=", + "owner": "feel-co", + "repo": "hjem", + "rev": "2979f66c4a1e6f662e4cb7fa9e20b9a6609919f9", + "type": "github" + }, + "original": { + "owner": "feel-co", + "repo": "hjem", + "type": "github" + } + }, "home-manager": { "inputs": { "nixpkgs": [ @@ -481,26 +480,6 @@ "type": "github" } }, - "home-manager_2": { - "inputs": { - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1736785676, - "narHash": "sha256-TY0jUwR3EW0fnS0X5wXMAVy6h4Z7Y6a3m+Yq++C9AyE=", - "owner": "nix-community", - "repo": "home-manager", - "rev": "fc52a210b60f2f52c74eac41a8647c1573d2071d", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "home-manager", - "type": "github" - } - }, "hyprcursor": { "inputs": { "hyprlang": [ @@ -1324,22 +1303,6 @@ "type": "github" } }, - "nixpkgs_10": { - "locked": { - "lastModified": 1720957393, - "narHash": "sha256-oedh2RwpjEa+TNxhg5Je9Ch6d3W1NKi7DbRO1ziHemA=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "693bc46d169f5af9c992095736e82c3488bf7dbb", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs_2": { "locked": { "lastModified": 1702272962, @@ -1629,29 +1592,6 @@ "type": "github" } }, - "plasma-manager": { - "inputs": { - "home-manager": [ - "home-manager" - ], - "nixpkgs": [ - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1736549395, - "narHash": "sha256-XzwkB62Tt5UYoL1jXiHzgk/qz2fUpGHExcSIbyGTtI0=", - "owner": "nix-community", - "repo": "plasma-manager", - "rev": "a53af7f1514ef4cce8620a9d6a50f238cdedec8b", - "type": "github" - }, - "original": { - "owner": "nix-community", - "repo": "plasma-manager", - "type": "github" - } - }, "plugin-aerial-nvim": { "flake": false, "locked": { @@ -3684,7 +3624,7 @@ "basix": "basix", "deploy-rs": "deploy-rs", "firefox-addons": "firefox-addons", - "home-manager": "home-manager_2", + "hjem": "hjem", "hypridle": "hypridle", "hyprland": "hyprland", "hyprland-qtutils": "hyprland-qtutils_2", @@ -3700,9 +3640,7 @@ "nixos-hardware": "nixos-hardware", "nixpkgs": "nixpkgs_7", "nvf": "nvf", - "plasma-manager": "plasma-manager", - "treefmt-nix": "treefmt-nix", - "walker": "walker" + "treefmt-nix": "treefmt-nix" } }, "rust-overlay": { @@ -3872,21 +3810,6 @@ "type": "github" } }, - "systems_9": { - "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" - } - }, "tabi": { "flake": false, "locked": { @@ -3964,26 +3887,6 @@ "type": "github" } }, - "walker": { - "inputs": { - "flake-parts": "flake-parts_6", - "nixpkgs": "nixpkgs_10", - "systems": "systems_9" - }, - "locked": { - "lastModified": 1736883896, - "narHash": "sha256-Lx6MHiRD69xSpneaFTr6wjp9jX28ZkVt+glxTLonJc4=", - "owner": "abenz1267", - "repo": "walker", - "rev": "f8690c097551de73f098ff1ab56ac2f62f821f88", - "type": "github" - }, - "original": { - "owner": "abenz1267", - "repo": "walker", - "type": "github" - } - }, "xdph": { "inputs": { "hyprland-protocols": [ diff --git a/flake.nix b/flake.nix index 636fc30..fcfc7e8 100644 --- a/flake.nix +++ b/flake.nix @@ -36,10 +36,6 @@ url = "github:nix-community/lanzaboote/v0.4.1"; inputs.nixpkgs.follows = "nixpkgs"; }; - home-manager = { - url = "github:nix-community/home-manager"; - inputs.nixpkgs.follows = "nixpkgs"; - }; nix-index-db = { url = "github:nix-community/nix-index-database"; inputs.nixpkgs.follows = "nixpkgs"; @@ -97,18 +93,15 @@ url = "github:hyprwm/contrib"; inputs.nixpkgs.follows = "nixpkgs"; }; - + hjem = { + url = "github:feel-co/hjem"; + inputs.nixpkgs.follows = "nixpkgs"; + }; niri.url = "github:sodiboo/niri-flake"; nix-flatpak.url = "github:gmodena/nix-flatpak/?ref=v0.5.0"; nix-gaming.url = "github:fufexan/nix-gaming"; nvf.url = "github:notashelf/nvf"; - plasma-manager = { - url = "github:nix-community/plasma-manager"; - inputs.nixpkgs.follows = "nixpkgs"; - inputs.home-manager.follows = "home-manager"; - }; treefmt-nix.url = "github:numtide/treefmt-nix"; - walker.url = "github:abenz1267/walker"; nezia_dev.url = "github:nezia1/nezia.dev"; }; nixConfig = { diff --git a/hosts/default.nix b/hosts/default.nix index 3ac48e0..d1465d7 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -10,11 +10,15 @@ in { modules = [ ./vamos inputs.nixos-hardware.nixosModules.framework-13-7040-amd + inputs.hjem.nixosModules.default ]; }; solaire = mkSystem { - modules = [./solaire]; + modules = [ + ./solaire + inputs.hjem.nixosModules.default + ]; }; anastacia = mkSystem { diff --git a/hosts/vamos/default.nix b/hosts/vamos/default.nix index 026c044..27d7465 100644 --- a/hosts/vamos/default.nix +++ b/hosts/vamos/default.nix @@ -13,6 +13,7 @@ _: { homeVars = { fullName = "Anthony Rodriguez"; email = "anthony@nezia.dev"; + signingKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHKEPlN/GU9nJZPleA77HH5NA+6vyhhM84fTSjEwnEgq nezia@vamos"; }; profiles = { diff --git a/modules/nix/core/boot.nix b/modules/core/boot.nix similarity index 100% rename from modules/nix/core/boot.nix rename to modules/core/boot.nix diff --git a/modules/nix/core/default.nix b/modules/core/default.nix similarity index 91% rename from modules/nix/core/default.nix rename to modules/core/default.nix index 1930a98..6972119 100644 --- a/modules/nix/core/default.nix +++ b/modules/core/default.nix @@ -4,7 +4,6 @@ ./boot.nix ./fonts.nix - ./home-manager.nix ./locales.nix ./networking.nix ./nix.nix diff --git a/modules/nix/core/fonts.nix b/modules/core/fonts.nix similarity index 100% rename from modules/nix/core/fonts.nix rename to modules/core/fonts.nix diff --git a/modules/nix/core/hardware/default.nix b/modules/core/hardware/default.nix similarity index 100% rename from modules/nix/core/hardware/default.nix rename to modules/core/hardware/default.nix diff --git a/modules/nix/core/hardware/fprintd.nix b/modules/core/hardware/fprintd.nix similarity index 100% rename from modules/nix/core/hardware/fprintd.nix rename to modules/core/hardware/fprintd.nix diff --git a/modules/nix/core/hardware/fwupd.nix b/modules/core/hardware/fwupd.nix similarity index 100% rename from modules/nix/core/hardware/fwupd.nix rename to modules/core/hardware/fwupd.nix diff --git a/modules/nix/core/hardware/printing.nix b/modules/core/hardware/printing.nix similarity index 100% rename from modules/nix/core/hardware/printing.nix rename to modules/core/hardware/printing.nix diff --git a/modules/nix/core/hardware/uni-sync.nix b/modules/core/hardware/uni-sync.nix similarity index 100% rename from modules/nix/core/hardware/uni-sync.nix rename to modules/core/hardware/uni-sync.nix diff --git a/modules/nix/core/hardware/via.nix b/modules/core/hardware/via.nix similarity index 100% rename from modules/nix/core/hardware/via.nix rename to modules/core/hardware/via.nix diff --git a/modules/nix/core/locales.nix b/modules/core/locales.nix similarity index 100% rename from modules/nix/core/locales.nix rename to modules/core/locales.nix diff --git a/modules/nix/core/networking.nix b/modules/core/networking.nix similarity index 100% rename from modules/nix/core/networking.nix rename to modules/core/networking.nix diff --git a/modules/nix/core/nix.nix b/modules/core/nix.nix similarity index 100% rename from modules/nix/core/nix.nix rename to modules/core/nix.nix diff --git a/modules/nix/core/security.nix b/modules/core/security.nix similarity index 100% rename from modules/nix/core/security.nix rename to modules/core/security.nix diff --git a/modules/nix/core/users.nix b/modules/core/users.nix similarity index 60% rename from modules/nix/core/users.nix rename to modules/core/users.nix index 8ec21af..e0ccf0e 100644 --- a/modules/nix/core/users.nix +++ b/modules/core/users.nix @@ -2,7 +2,9 @@ lib, config, ... -}: { +}: let + inherit (config.local.systemVars) username; +in { config = lib.mkIf (!config.local.profiles.server.enable) { users.users.${config.local.systemVars.username} = { isNormalUser = true; @@ -15,5 +17,14 @@ "plugdev" ]; }; + + hjem = { + clobberByDefault = true; + users.${username} = { + enable = true; + directory = "/home/${username}"; + user = "${username}"; + }; + }; }; } diff --git a/modules/default.nix b/modules/default.nix index 78f847c..7c16531 100644 --- a/modules/default.nix +++ b/modules/default.nix @@ -1,6 +1,8 @@ { imports = [ + ./core ./options - ./nix + ./programs + ./services ]; } diff --git a/modules/hm/default.nix b/modules/hm/default.nix deleted file mode 100644 index b9f8201..0000000 --- a/modules/hm/default.nix +++ /dev/null @@ -1,18 +0,0 @@ -{ - lib, - osConfig, - ... -}: let - styleCfg = osConfig.local.style; -in { - imports = [ - ./programs - ./services - ]; - - home.pointerCursor = lib.mkIf styleCfg.enable { - inherit (styleCfg.cursorTheme) name package size; - x11.enable = true; - gtk.enable = true; - }; -} diff --git a/modules/hm/programs/anyrun.nix b/modules/hm/programs/anyrun.nix deleted file mode 100644 index aa982fc..0000000 --- a/modules/hm/programs/anyrun.nix +++ /dev/null @@ -1,110 +0,0 @@ -{ - lib, - pkgs, - inputs, - osConfig, - ... -}: let - inherit (lib) mkIf; - anyrunPkgs = inputs.anyrun.packages.${pkgs.system}; -in { - imports = [inputs.anyrun.homeManagerModules.default]; - config = mkIf osConfig.local.modules.hyprland.enable { - programs.anyrun = { - enable = true; - config = { - x.fraction = 0.5; - y.fraction = 0.3; - width.fraction = 0.5; - hideIcons = false; - ignoreExclusiveZones = false; - layer = "overlay"; - hidePluginInfo = false; - closeOnClick = true; - showResultsImmediately = true; - maxEntries = null; - - plugins = with anyrunPkgs; [ - applications - symbols - randr - ]; - }; - - extraCss = - /* - css - */ - '' - #window { - background-color: rgba(0, 0, 0, 0); - } - - box#main { - border-radius: 10px; - background-color: @theme_bg_color; - } - - list#main { - background-color: rgba(0, 0, 0, 0); - border-radius: 10px; - } - - list#plugin { - background-color: rgba(0, 0, 0, 0); - } - - label#match-desc { - font-size: 10px; - } - - label#plugin { - font-size: 14px; - } - ''; - - extraConfigFiles = { - "applications.ron".text = '' - Config( - // Also show the Desktop Actions defined in the desktop files, e.g. "New Window" from LibreWolf - desktop_actions: false, - max_entries: 5, - // The terminal used for running terminal based desktop entries, if left as `None` a static list of terminals is used - // to determine what terminal to use. - terminal: Some(Terminal( - // The main terminal command - command: "foot", - // What arguments should be passed to the terminal process to run the command correctly - // {} is replaced with the command in the desktop entry - args: "uwsm app -- {}", - )), - ) - ''; - - "symbols.ron".text = '' - Config( - // The prefix that the search needs to begin with to yield symbol results - prefix: ":s", - - // Custom user defined symbols to be included along the unicode symbols - symbols: { - // "name": "text to be copied" - "shrug": "¯\\_(ツ)_/¯", - "tableflip": "(╯°□°)╯︵ ┻━┻", - "unflip": "┬─┬ノ( º _ ºノ)", - }, - - // The number of entries to be displayed - max_entries: 5, - ) - ''; - "randr.ron".text = '' - Config( - prefix: ":d", - max_entries: 5, - ) - ''; - }; - }; - }; -} diff --git a/modules/hm/programs/browsers/default.nix b/modules/hm/programs/browsers/default.nix deleted file mode 100644 index dad3d2f..0000000 --- a/modules/hm/programs/browsers/default.nix +++ /dev/null @@ -1,3 +0,0 @@ -{ - imports = [./firefox.nix]; -} diff --git a/modules/hm/programs/browsers/firefox.nix b/modules/hm/programs/browsers/firefox.nix deleted file mode 100644 index 0e5c3ac..0000000 --- a/modules/hm/programs/browsers/firefox.nix +++ /dev/null @@ -1,176 +0,0 @@ -{ - lib, - inputs, - pkgs, - osConfig, - ... -}: let - betterfox = pkgs.fetchFromGitHub { - owner = "yokoffing"; - repo = "betterfox"; - rev = "e026ed7d3a763c5d3f96c2680d7bc3340831af4f"; - hash = "sha256-hpkEO5BhMVtINQG8HN4xqfas/R6q5pYPZiFK8bilIDs="; - }; -in { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - programs.firefox = { - enable = true; - package = pkgs.wrapFirefox pkgs.firefox-unwrapped { - extraPolicies = { - DisableTelemetry = true; - DisablePocket = true; - DisableFeedbackCommands = true; - DisableFirefoxStudies = true; - OfferToSaveLogins = false; - OffertosaveloginsDefault = false; - PasswordManagerEnabled = false; - SearchSuggestEnabled = true; - - # https://github.com/Sly-Harvey/NixOS/blob/f9da2691ea46565256ad757959cfc26ec6cee10d/modules/programs/browser/firefox/default.nix#L58-L163 - "3rdparty".Extensions = { - "addon@darkreader.org" = { - permissions = ["internal:privateBrowsingAllowed"]; - enabled = true; - automation = { - enabled = true; - behavior = "OnOff"; - mode = "system"; - }; - detectDarkTheme = true; - enabledByDefault = true; - changeBrowserTheme = false; - enableForProtectedPages = true; - fetchNews = false; - previewNewDesign = true; - }; - "uBlock0@raymondhill.net" = { - permissions = ["internal:privateBrowsingAllowed"]; - advancedSettings = [ - [ - "userResourcesLocation" - "https://raw.githubusercontent.com/pixeltris/TwitchAdSolutions/master/video-swap-new/video-swap-new-ublock-origin.js" - ] - ]; - adminSettings = { - userSettings = { - uiTheme = "dark"; - advancedUserEnabled = true; - userFiltersTrusted = true; - importedLists = [ - "https://raw.githubusercontent.com/laylavish/uBlockOrigin-HUGE-AI-Blocklist/main/list.txt" - ]; - selectedFilterLists = [ - "FRA-0" - "adguard-cookies" - "adguard-mobile-app-banners" - "adguard-other-annoyances" - "adguard-popup-overlays" - "adguard-social" - "adguard-spyware-url" - "adguard-widgets" - "easylist" - "easylist-annoyances" - "easylist-chat" - "easylist-newsletters" - "easylist-notifications" - "easyprivacy" - "fanboy-cookiemonster" - "https://filters.adtidy.org/extension/ublock/filters/3.txt" - "https://github.com/DandelionSprout/adfilt/raw/master/LegitimateURLShortener.txt" - "plowe-0" - "ublock-annoyances" - "ublock-badware" - "ublock-cookies-adguard" - "ublock-cookies-easylist" - "ublock-filters" - "ublock-privacy" - "ublock-quick-fixes" - "ublock-unbreak" - "urlhaus-1" - "https://raw.githubusercontent.com/laylavish/uBlockOrigin-HUGE-AI-Blocklist/main/list.txt" - ]; - }; - }; - }; - }; - }; - }; - profiles = { - nezia = { - settings = { - "browser.search.suggest.enabled" = true; - "ui.key.menuAccessKeyFocuses" = false; - }; - - extensions = with inputs.firefox-addons.packages.${pkgs.system}; [ - darkreader - proton-pass - shinigami-eyes - stylus - ublock-origin - violentmonkey - ]; - # https://git.jacekpoz.pl/poz/niksos/src/commit/a48647a1c5bc6877a1100a65f4dc169b2fc11ed7/hosts/hape/firefox.nix - search = { - force = true; - default = "SearxNG"; - engines = { - "SearxNG" = { - urls = [ - { - rels = ["results"]; - template = "https://search.nezia.dev/search"; - params = [ - { - name = "q"; - value = "{searchTerms}"; - } - ]; - } - { - rels = ["suggestions"]; - template = "https://search.nezia.dev/autocompleter"; - params = [ - { - name = "q"; - value = "{searchTerms}"; - } - ]; - "type" = "application/x-suggestions+json"; - } - ]; - }; - "MyNixOS" = { - urls = [{template = "https://mynixos.com/search?q={searchTerms}";}]; - iconUpdateURL = "https://mynixos.com/favicon.ico"; - updateInterval = 24 * 60 * 60 * 1000; - definedAliases = ["@nx"]; - }; - "Noogle" = { - urls = [{template = "https://noogle.dev/q?term={searchTerms}";}]; - icon = "${pkgs.nixos-icons}/share/icons/hicolor/scalable/apps/nix-snowflake.svg"; - definedAliases = ["@ng"]; - }; - "GitHub Nix" = { - # https://github.com/search?q=language%3Anix+NOT+is%3Afork+programs.neovim&type=code - urls = [{template = "https://github.com/search?q=language:nix NOT is:fork {searchTerms}&type=code";}]; - iconUpdateURL = "https://github.com/favicon.ico"; - updateInterval = 24 * 60 * 60 * 1000; - definedAliases = ["@ghn"]; - }; - "Google".metaData.alias = "@g"; # builtin engines only support specifying one additional alias - }; - }; - # https://github.com/oddlama/nix-config/blob/main/users/myuser/graphical/firefox.nix#L53-L57 - extraConfig = builtins.concatStringsSep "\n" [ - (builtins.readFile "${betterfox}/user.js") - (builtins.readFile "${betterfox}/Securefox.js") - (builtins.readFile "${betterfox}/Fastfox.js") - (builtins.readFile "${betterfox}/Peskyfox.js") - (builtins.readFile "${betterfox}/Smoothfox.js") - ]; - }; - }; - }; - }; -} diff --git a/modules/hm/programs/discord.nix b/modules/hm/programs/discord.nix deleted file mode 100644 index 118b243..0000000 --- a/modules/hm/programs/discord.nix +++ /dev/null @@ -1,116 +0,0 @@ -{ - lib, - lib', - pkgs, - osConfig, - ... -}: let - inherit (lib') rgba; - styleCfg = osConfig.local.style; -in { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - home.packages = [pkgs.vesktop]; - xdg.configFile."vesktop/themes/midnight-base16.css".text = with styleCfg.scheme.palette; - lib.mkIf styleCfg.enable '' - /** - * @name Midnight-base16 - * @description A dark, rounded discord theme. Updated to use base16 colors. - * @author refact0r - * @version 1.6.2 - * @invite nz87hXyvcy - * @website https://github.com/refact0r/midnight-discord - * @source https://github.com/refact0r/midnight-discord/blob/master/midnight.theme.css - * @authorId 508863359777505290 - * @authorLink https://www.refact0r.dev - */ - - /* IMPORTANT: make sure to enable dark mode in discord settings for the theme to apply properly!!! */ - - @import url('https://refact0r.github.io/midnight-discord/midnight.css'); - - /* customize things here */ - :root { - /* font, change to 'gg sans' for default discord font*/ - --font: 'gg sans'; - - /* top left corner text */ - --corner-text: '${styleCfg.scheme.name}'; - - /* color of status indicators and window controls */ - --online-indicator: ${base0B}; /* change to #23a55a for default green */ - --dnd-indicator: ${base08}; /* change to #f13f43 for default red */ - --idle-indicator: ${base0A}; /* change to #f0b232 for default yellow */ - --streaming-indicator: ${base0E}; /* change to #593695 for default purple */ - - /* accent colors */ - --accent-1: ${base0D}; /* links */ - --accent-2: ${base0E}; /* general unread/mention elements, some icons when active */ - --accent-3: ${base0E}; /* accent buttons */ - --accent-4: ${base03}; /* accent buttons when hovered */ - --accent-5: ${base07}; /* accent buttons when clicked */ - --mention: ${rgba base0E 0.1}; /* mentions & mention messages */ - --mention-hover: ${rgba base0E 0.05}; /* mentions & mention messages when hovered */ - - /* text colors */ - --text-0: var(--bg-4); /* text on colored elements */ - --text-1: ${base06}; /* other normally white text */ - --text-2: ${base06}; /* headings and important text */ - --text-3: ${base05}; /* normal text */ - --text-4: ${base05}; /* icon buttons and channels */ - --text-5: ${base04}; /* muted channels/chats and timestamps */ - - /* background and dark colors */ - --bg-1: ${base03}; /* dark buttons when clicked */ - --bg-2: ${base02}; /* dark buttons */ - --bg-3: ${base01}; /* spacing, secondary elements */ - --bg-4: ${base00}; /* main background color */ - --hover: ${rgba base03 0.1}; /* channels and buttons when hovered */ - --active: ${rgba base03 0.2}; /* channels and buttons when clicked or selected */ - --message-hover: ${rgba base00 0.1}; /* messages when hovered */ - - /* amount of spacing and padding */ - --spacing: 12px; - - /* animations */ - /* ALL ANIMATIONS CAN BE DISABLED WITH REDUCED MOTION IN DISCORD SETTINGS */ - --list-item-transition: 0.2s ease; /* channels/members/settings hover transition */ - --unread-bar-transition: 0.2s ease; /* unread bar moving into view transition */ - --moon-spin-transition: 0.4s ease; /* moon icon spin */ - --icon-spin-transition: 1s ease; /* round icon button spin (settings, emoji, etc.) */ - - /* corner roundness (border-radius) */ - --roundness-xl: 22px; /* roundness of big panel outer corners */ - --roundness-l: 20px; /* popout panels */ - --roundness-m: 16px; /* smaller panels, images, embeds */ - --roundness-s: 12px; /* members, settings inputs */ - --roundness-xs: 10px; /* channels, buttons */ - --roundness-xxs: 8px; /* searchbar, small elements */ - - /* direct messages moon icon */ - /* change to block to show, none to hide */ - --discord-icon: none; /* discord icon */ - --moon-icon: block; /* moon icon */ - --moon-icon-url: url('https://upload.wikimedia.org/wikipedia/commons/c/c4/Font_Awesome_5_solid_moon.svg'); /* custom icon url */ - --moon-icon-size: auto; - - /* filter uncolorable elements to fit theme */ - /* (just set to none, they're too much work to configure) */ - --login-bg-filter: saturate(0.3) hue-rotate(-15deg) brightness(0.4); /* login background artwork */ - --green-to-accent-3-filter: hue-rotate(56deg) saturate(1.43); /* add friend page explore icon */ - --blurple-to-accent-3-filter: hue-rotate(304deg) saturate(0.84) brightness(1.2); /* add friend page school icon */ - } - - /* Selected chat/friend text */ - .selected_f5eb4b, - .selected_f6f816 .link_d8bfb3 { - color: var(--text-0) !important; - background: var(--accent-3) !important; - } - - .selected_f6f816 .link_d8bfb3 * { - color: var(--text-0) !important; - fill: var(--text-0) !important; - } - ''; - }; -} diff --git a/modules/hm/programs/editors/default.nix b/modules/hm/programs/editors/default.nix deleted file mode 100644 index 6ab9a63..0000000 --- a/modules/hm/programs/editors/default.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - imports = [ - ./helix.nix - ./neovim.nix - ]; -} diff --git a/modules/hm/programs/editors/helix.nix b/modules/hm/programs/editors/helix.nix deleted file mode 100644 index 907aba1..0000000 --- a/modules/hm/programs/editors/helix.nix +++ /dev/null @@ -1,64 +0,0 @@ -{ - lib, - pkgs, - osConfig, - ... -}: { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - programs.helix = { - enable = true; - settings = { - theme = "catppuccin_macchiato"; - editor = { - line-number = "relative"; - lsp.display-messages = true; - auto-format = true; - auto-completion = true; - completion-timeout = 5; - color-modes = true; - completion-trigger-len = 1; - completion-replace = true; - cursorline = true; - cursor-shape = { - insert = "bar"; - normal = "block"; - select = "underline"; - }; - indent-guides.render = true; - lsp.display-inlay-hints = true; - statusline.center = ["position-percentage"]; - true-color = true; - whitespace.characters = { - newline = "↴"; - tab = "⇥"; - }; - }; - - keys.normal = { - space = { - space = "file_picker"; - w = ":w"; - q = ":q"; - }; - esc = ["collapse_selection" "keep_primary_selection"]; - }; - }; - - languages = { - language = [ - { - name = "nix"; - auto-format = true; - } - ]; - - language-server = { - nil = { - command = lib.getExe pkgs.nil; - config.nil.formatting.command = ["${lib.getExe pkgs.alejandra}" "-q"]; - }; - }; - }; - }; - }; -} diff --git a/modules/hm/programs/games.nix b/modules/hm/programs/games.nix deleted file mode 100644 index 6b23cdb..0000000 --- a/modules/hm/programs/games.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - lib, - pkgs, - osConfig, - ... -}: { - config = lib.mkIf osConfig.local.profiles.gaming.enable { - home.packages = [ - pkgs.mangohud - pkgs.bolt-launcher - pkgs.ankama-launcher - pkgs.lutris - pkgs.qbittorrent - pkgs.protonplus - ]; - }; -} diff --git a/modules/hm/programs/gnome.nix b/modules/hm/programs/gnome.nix deleted file mode 100644 index 9ddd704..0000000 --- a/modules/hm/programs/gnome.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ - lib, - osConfig, - ... -}: { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - dconf = { - enable = true; - settings = { - "org/gnome/desktop/wm/preferences" = { - button-layout = ""; - }; - }; - }; - }; -} diff --git a/modules/hm/programs/hypr/idle.nix b/modules/hm/programs/hypr/idle.nix deleted file mode 100644 index 5f44ae2..0000000 --- a/modules/hm/programs/hypr/idle.nix +++ /dev/null @@ -1,58 +0,0 @@ -{ - lib, - inputs, - pkgs, - config, - osConfig, - ... -}: { - config = lib.mkIf osConfig.local.modules.hyprland.enable { - services.hypridle = { - enable = true; - - package = inputs.hypridle.packages.${pkgs.system}.hypridle; - - settings = { - general = { - lock_cmd = "pidof hyprlock || hyprlock"; - unlock_cmd = "pkill --signal SIGUSR1 hyprlock"; - before_sleep_cmd = "loginctl lock-session"; - after_sleep_cmd = "hyprctl dispatch dpms on"; - }; - - listener = [ - { - timeout = 300; # 5m - on-timeout = "loginctl lock-session"; - } - { - timeout = 330; # 5.5m - on-timeout = "hyprctl dipsatch dpms off"; - on-resume = "hyprctl dispatch dpms on"; - } - { - timeout = 600; # 10m - on-timeout = "systemctl suspend"; - } - ]; - }; - }; - # needed when using uwsm as the session manager - systemd.user.services."hypridle" = lib.mkForce { - Unit = { - Description = "Hyprland's Idle Daemon"; - After = "graphical-session.target"; - X-Restart-Triggers = ["${config.xdg.configFile."hypr/hypridle.conf".source}"]; - }; - Service = { - Type = "exec"; - ExecStart = lib.getExe pkgs.hypridle; - Restart = "on-failure"; - Slice = "background-graphical.slice"; - }; - Install = { - WantedBy = ["graphical-session.target"]; - }; - }; - }; -} diff --git a/modules/hm/programs/hypr/land/binds.nix b/modules/hm/programs/hypr/land/binds.nix deleted file mode 100644 index ef286eb..0000000 --- a/modules/hm/programs/hypr/land/binds.nix +++ /dev/null @@ -1,85 +0,0 @@ -{ - lib, - osConfig, - ... -}: let - # thanks https://github.com/fufexan/dotfiles/blob/c0b3c77d95ce1f574a87e7f7ead672ca0d951245/home/programs/wayland/hyprland/binds.nix#L16-L20 - toggle = program: uwsm: let - prog = builtins.substring 0 14 program; - in "pkill ${prog} || ${lib.optionalString uwsm "uwsm app -- "} ${program}"; - runOnce = program: "pgrep ${program} || uwsm app -- ${program}"; - run = program: "uwsm app -- ${program}"; -in { - config = lib.mkIf osConfig.local.modules.hyprland.enable { - wayland.windowManager.hyprland.settings = { - "$mod" = "SUPER"; - bindr = [ - "$mod, SUPER_L, exec, ${toggle "anyrun" true}" - ]; - bind = [ - "$mod, Return, exec, ${run "ghostty"}" - "$mod, n, exec, ${run "neovide"}" - "$mod, w, exec, ${run "firefox"}" - ", Print, exec, ${runOnce "grimblast"} --notify --cursor copysave output" - "$mod, q, killactive" - "$mod SHIFT, q, exec, loginctl terminate-user ''" - "$mod, period, exec, ${toggle "anyrun-symbols" true}" - "CTRL, Print, exec, ${runOnce "grimblast"} --notify --cursor --freeze copysave area" - - "$mod, h, movefocus, l" - "$mod, j, movefocus, d" - "$mod, k, movefocus, u" - "$mod, l, movefocus, r" - - "$mod SHIFT, h, movewindow, l" - "$mod SHIFT, j, movewindow, d" - "$mod SHIFT, k, movewindow, u" - "$mod SHIFT, l, movewindow, r" - - "$mod, 1, workspace, 1" - "$mod, 2, workspace, 2" - "$mod, 3, workspace, 3" - "$mod, 4, workspace, 4" - "$mod, 5, workspace, 5" - "$mod, 6, workspace, 6" - "$mod, 7, workspace, 7" - "$mod, 8, workspace, 8" - "$mod, 9, workspace, 9" - "$mod, 0, workspace, 10" - - "$mod SHIFT, 1, movetoworkspacesilent, 1" - "$mod SHIFT, 2, movetoworkspacesilent, 2" - "$mod SHIFT, 3, movetoworkspacesilent, 3" - "$mod SHIFT, 4, movetoworkspacesilent, 4" - "$mod SHIFT, 5, movetoworkspacesilent, 5" - "$mod SHIFT, 6, movetoworkspacesilent, 6" - "$mod SHIFT, 7, movetoworkspacesilent, 7" - "$mod SHIFT, 8, movetoworkspacesilent, 8" - "$mod SHIFT, 9, movetoworkspacesilent, 9" - "$mod SHIFT, 0, movetoworkspacesilent, 10" - - "$mod, t, togglefloating" - ", F11, fullscreen, 0" - "$mod, f, fullscreen, 1" - - "$mod, e, togglespecialworkspace, file_manager_tui" - "$mod SHIFT, e, togglespecialworkspace, file_manager_gui" - - ", XF86PowerOff, exec, ${toggle "wlogout" true}" - ]; - - bindel = [ - ", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+" - ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" - ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" - - ", XF86MonBrightnessUp, exec, brillo -q -u 300000 -A 5" - ", XF86MonBrightnessDown, exec, brillo -q -u 300000 -U 5" - ", XF86AudioMedia, exec, XDG_CURRENT_DESKTOP=gnome gnome-control-center" - ]; - binde = [ - "$mod Alt, l, exec, loginctl lock-session" - ]; - }; - }; -} diff --git a/modules/hm/programs/hypr/land/default.nix b/modules/hm/programs/hypr/land/default.nix deleted file mode 100644 index c18262a..0000000 --- a/modules/hm/programs/hypr/land/default.nix +++ /dev/null @@ -1,140 +0,0 @@ -{ - lib, - inputs, - pkgs, - osConfig, - ... -}: let - inherit (builtins) toString; - styleCfg = osConfig.local.style; -in { - imports = [./binds.nix]; - - config = lib.mkIf osConfig.local.modules.hyprland.enable { - home.packages = [ - inputs.hyprwm-contrib.packages.${pkgs.system}.grimblast - # disable unused panels - https://github.com/maydayv7/dotfiles/blob/4de45008a6915753834aa7e1cbafbacfff8b7adc/modules/gui/desktop/hyprland/apps/utilities.nix#L42-L57 - (pkgs.gnome-control-center.overrideAttrs (old: { - postInstall = - old.postInstall - + '' - dir=$out/share/applications - for panel in $dir/* - do - [ "$panel" = "$dir/gnome-network-panel.desktop" ] && continue - [ "$panel" = "$dir/gnome-bluetooth-panel.desktop" ] && continue - [ "$panel" = "$dir/gnome-wifi-panel.desktop" ] && continue - [ "$panel" = "$dir/gnome-wwan-panel.desktop" ] && continue - [ "$panel" = "$dir/gnome-sharing-panel.desktop" ] && continue - [ "$panel" = "$dir/gnome-wacom-panel.desktop" ] && continue - rm "$panel" - done - ''; - })) - ]; - wayland.windowManager.hyprland = { - enable = true; - xwayland.enable = true; - - systemd.enable = false; - - settings = lib.mkMerge [ - { - xwayland = { - force_zero_scaling = true; - }; - - env = [ - "GDK_SCALE,1" - ]; - - cursor = { - no_hardware_cursors = 1; - }; - - monitor = [ - "eDP-1, preferred, auto, 1.33" - ]; - workspace = [ - "special:terminal, on-created-empty:foot" - "special:mixer_gui, on-created-empty:pavucontrol" - "special:file_manager_gui, on-created-empty:nautilus" - "special:file_manager_tui, on-created-empty:foot -- yazi" - ]; - - windowrulev2 = [ - # fixes fullscreen windows (mostly games) - "stayfocused, initialtitle:^()$, initialclass:^(steam)$" - "minsize 1 1, initialtitle:^()$, initialclass:^(steam)$" - "maximize, initialtitle:^(\S+)$, initialclass:^(steamwebhelper)$" - - "immediate, initialclass:^(steam_app_)(.*)$" - "fullscreen, initialclass:^(steam_app_)(.*)$" - - # inhibit idle on every fullscreen app except games - "idleinhibit fullscreen,class:.*" - ]; - - render = { - explicit_sync = 1; - explicit_sync_kms = 1; - expand_undersized_textures = false; - }; - - animations = { - enabled = true; - bezier = "myBezier, 0.05, 0.9, 0.1, 1.1"; - animation = [ - "windows, 1, 5, myBezier" - "windowsOut, 1, 5, default, popin 80%" - "windowsMove, 1, 5, default, popin 80%" - "fade, 1, 5, default" - "border, 1, 5, default" - "borderangle, 0, 8, default" - "workspaces, 0" - "specialWorkspace, 0" - ]; - }; - - input = { - kb_options = "compose:ralt"; - touchpad = { - natural_scroll = true; - scroll_factor = 0.8; - tap-to-click = true; - clickfinger_behavior = true; - }; - }; - - gestures = { - workspace_swipe = true; - workspace_swipe_direction_lock = false; - workspace_swipe_cancel_ratio = 0.15; - }; - - misc = { - force_default_wallpaper = 0; - disable_hyprland_logo = true; - middle_click_paste = false; - }; - } - - (lib.mkIf styleCfg.enable { - env = [ - "HYPRCURSOR_THEME,${styleCfg.cursorTheme.name}" - "HYPRCURSOR_SIZE,${toString styleCfg.cursorTheme.size}" - "XCURSOR_SIZE,${toString styleCfg.cursorTheme.size}" - ]; - general = { - border_size = 4; - "col.active_border" = "rgb(${lib.removePrefix "#" styleCfg.scheme.palette.base0E})"; - }; - decoration = { - rounding = 10; - blur.enabled = true; - }; - }) - ]; - }; - }; -} diff --git a/modules/hm/programs/hypr/lock.nix b/modules/hm/programs/hypr/lock.nix deleted file mode 100644 index b7f09e7..0000000 --- a/modules/hm/programs/hypr/lock.nix +++ /dev/null @@ -1,114 +0,0 @@ -{ - lib, - lib', - inputs, - pkgs, - osConfig, - ... -}: let - styleCfg = osConfig.local.style; - rgbaPalette = builtins.mapAttrs (_: c: (lib'.rgba c 1)) styleCfg.scheme.palette; -in { - config = lib.mkIf osConfig.local.modules.hyprland.enable { - programs.hyprlock = { - enable = true; - package = inputs.hyprlock.packages.${pkgs.system}.hyprlock; - - settings = lib.mkMerge [ - { - general = { - disable_loading_bar = true; - hide_cursor = true; - }; - } - - (with rgbaPalette; - lib.mkIf styleCfg.enable { - background = [ - { - path = "screenshot"; - blur_passes = 3; - blur_size = 8; - } - ]; - - label = [ - { - monitor = ""; - text = "Layout: $LAYOUT"; - font_size = 25; - color = base05; - - position = "30, -30"; - halign = "left"; - valign = "top"; - } - { - monitor = ""; - text = "$TIME"; - font_size = 90; - color = base05; - - position = "-30, 0"; - halign = "right"; - valign = "top"; - } - { - monitor = ""; - text = "cmd[update:43200000] date +\"%A, %d %B %Y\""; - font_size = 25; - color = base05; - - position = "-30, -150"; - halign = "right"; - valign = "top"; - } - ]; - - image = { - monitor = ""; - path = "${styleCfg.avatar}"; # Replace with your avatar path - size = 100; - border_color = base0D; - - position = "0, 75"; - halign = "center"; - valign = "center"; - }; - - input-field = [ - { - monitor = ""; - - size = "300, 60"; - outline_thickness = 4; - dots_size = 0.2; - dots_spacing = 0.2; - dots_center = true; - - outer_color = base0D; - inner_color = base02; - font_color = base05; - - fade_on_empty = false; - - # the span elements still use #RRGGBB, so we use scheme directly - placeholder_text = "󰌾 Logged in as $USER"; - - hide_input = false; - check_color = base0D; - fail_color = base08; - - fail_text = "$FAIL ($ATTEMPTS)"; - capslock_color = base0E; - - position = "0, -47"; - halign = "center"; - valign = "center"; - } - ]; - }) - ]; - }; - }; -} diff --git a/modules/hm/programs/hypr/paper.nix b/modules/hm/programs/hypr/paper.nix deleted file mode 100644 index 4fea20b..0000000 --- a/modules/hm/programs/hypr/paper.nix +++ /dev/null @@ -1,22 +0,0 @@ -{ - lib, - osConfig, - inputs, - pkgs, - ... -}: { - config = lib.mkIf osConfig.local.modules.hyprland.enable { - services.hyprpaper = { - enable = true; - package = inputs.hyprpaper.packages.${pkgs.system}.default; - - settings = { - preload = ["${osConfig.local.style.wallpaper}"]; - wallpaper = [", ${osConfig.local.style.wallpaper}"]; - }; - }; - - systemd.user.services.hyprpaper.Unit.After = lib.mkForce "graphical-session.target"; - systemd.user.services.hyprpaper.Service.Slice = "background-graphical.slice"; - }; -} diff --git a/modules/hm/programs/media/tidal-hifi.nix b/modules/hm/programs/media/tidal-hifi.nix deleted file mode 100644 index d4d4685..0000000 --- a/modules/hm/programs/media/tidal-hifi.nix +++ /dev/null @@ -1,196 +0,0 @@ -{ - lib, - osConfig, - pkgs, - ... -}: let - styleCfg = osConfig.local.style; -in { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - home.packages = [pkgs.tidal-hifi]; - # based on https://github.com/rose-pine/tidal. adapted to work with base16 colors. - xdg.configFile."tidal-hifi/themes/base16.css".text = with styleCfg.scheme.palette; - lib.mkIf styleCfg.enable '' - :root { - --glass-white-1: ${base05}; - --glass-white-1-hover: ${base06}; - --glass-white-2: ${base07}; - --glass-white-2-hover: ${base08}; - --glass-white-3: ${base07}; - --glass-white-4: ${base04}; - --glass-white-5: ${base04}; - --glass-white-6: ${base05}; - --snow-white: ${base07}; - --snow-white-hover: ${base08}; - --gray-4: ${base00}; - --gray-5: ${base02}; - --gray-6: ${base03}; - --gray-7: ${base04}; - --cyan-blue: ${base0D}; - --cyan-blue-hover: ${base0C}; - --glass-cyan-1: ${base04}; - --glass-cyan-2: ${base05}; - --glass-cyan-3: ${base06}; - --master-gold: ${base0E}; - --master-gold-hover: ${base08}; - --glass-master-gold: ${base05}; - --glass-master-gold-2: ${base06}; - --raspberry-pink: ${base08}; - --raspberry-pink-lighter: ${base09}; - --black: ${base00}; - --midnight-black: ${base00}; - --controls-overlay: ${base03}; - --duration-overlay: ${base02}; - --background-dark: ${base00}; - --hoverLighten: brightness(130%); - --hoverDarken: brightness(70%); - --hoverTransition: filter 0.15s ease; - --scrollbar-track: ${base03}; - --scrollbar-thumb: ${base00}; - --lighten-25: ${base01}; - --red-alert: ${base08}; - --user-profile-linear-gradient: linear-gradient(160deg,${base0D} 1.22%,${base0C} 40.51%,${base00} 79.07%); - --wave-border-radius--none: 0px; - --wave-border-radius--extra-small: 4px; - --wave-border-radius--small: 8px; - --wave-border-radius--regular: 12px; - --wave-border-radius--full: 1000px; - --wave-color-material-dark: ${base00}80; - --wave-color-material-light: ${base04}33; - --wave-color-opacity-accent-dark-ultra-thick: ${base0C}cc; - --wave-color-opacity-accent-darkest-ultra-thick: ${base01}; - --wave-color-opacity-accent-fill-regular: ${base0C}66; - --wave-color-opacity-accent-fill-thin: ${base0C}33; - --wave-color-opacity-accent-fill-ultra-thick: ${base0C}cc; - --wave-color-opacity-accent-fill-ultra-thin: ${base0C}1a; - --wave-color-opacity-base-bright-thick: ${base00}99; - --wave-color-opacity-base-bright-thin: ${base00}33; - --wave-color-opacity-base-bright-transparent: ${base00}; - --wave-color-opacity-base-bright-ultra-thick: ${base00}cc; - --wave-color-opacity-base-brighter-ultra-thick: ${base01}cc; - --wave-color-opacity-base-brightest-regular: ${base02}66; - --wave-color-opacity-base-brightest-thin: ${base02}33; - --wave-color-opacity-base-brightest-ultra-thin: ${base02}1a; - --wave-color-opacity-base-fill-regular: ${base00}66; - --wave-color-opacity-base-fill-thick: ${base00}99; - --wave-color-opacity-base-fill-thin: ${base00}33; - --wave-color-opacity-base-fill-transparent: #000; - --wave-color-opacity-base-fill-ultra-thick: ${base00}cc; - --wave-color-opacity-base-fill-ultra-thin: ${base00}1a; - --wave-color-opacity-contrast-fill-regular: ${base07}66; - --wave-color-opacity-contrast-fill-thick: ${base07}99; - --wave-color-opacity-contrast-fill-thin: ${base07}33; - --wave-color-opacity-contrast-fill-transparent: #fff; - --wave-color-opacity-contrast-fill-ultra-thick: ${base07}cc; - --wave-color-opacity-contrast-fill-ultra-thin: ${base07}1a; - --wave-color-opacity-rainbow-blue-thin: ${base0D}33; - --wave-color-opacity-rainbow-yellow-fill-regular: ${base0E}66; - --wave-color-opacity-rainbow-yellow-fill-thin: ${base0E}33; - --wave-color-opacity-rainbow-yellow-fill-ultra-thick: ${base0E}cc; - --wave-color-opacity-rainbow-yellow-fill-ultra-thin: ${base0E}1a; - --wave-color-opacity-special-fill-regular: ${base0E}66; - --wave-color-opacity-special-fill-thin: ${base0E}33; - --wave-color-opacity-special-fill-ultra-thick: ${base0E}cc; - --wave-color-opacity-special-fill-ultra-thin: ${base0E}1a; - --wave-color-services-facebook: ${base0D}; - --wave-color-services-instagram-red: ${base08}; - --wave-color-services-mtn: ${base0E}; - --wave-color-services-musix-orange: ${base09}; - --wave-color-services-musix-pink: ${base0E}; - --wave-color-services-play: ${base0C}; - --wave-color-services-plus: ${base0B}; - --wave-color-services-snapchat: ${base0A}; - --wave-color-services-sprint: ${base0A}; - --wave-color-services-t-mobile: ${base08}; - --wave-color-services-tik-tok-blue: ${base0D}; - --wave-color-services-tik-tok-red: ${base08}; - --wave-color-services-twitter: ${base0D}; - --wave-color-services-viacom-1: ${base0D}; - --wave-color-services-viacom-2: ${base0E}; - --wave-color-services-viacom-3: ${base08}; - --wave-color-services-viacom-4: ${base09}; - --wave-color-services-viacom-5: ${base0E}; - --wave-color-services-vivo: ${base0E}; - --wave-color-services-vodafone: ${base08}; - --wave-color-services-waze: ${base0D}; - --wave-color-solid-accent-bright: ${base0D}; - --wave-color-solid-accent-brighter: ${base0D}; - --wave-color-solid-accent-dark: ${base0C}; - --wave-color-solid-accent-darker: ${base01}; - --wave-color-solid-accent-darkest: ${base00}; - --wave-color-solid-accent-fill: ${base0D}; - --wave-color-solid-base-bright: ${base00}; - --wave-color-solid-base-brighter: ${base01}; - --wave-color-solid-base-brightest: ${base02}; - --wave-color-solid-base-fill: ${base00}; - --wave-color-solid-contrast-dark: ${base07}; - --wave-color-solid-contrast-darker: ${base06}; - --wave-color-solid-contrast-darkest: ${base05}; - --wave-color-solid-contrast-fill: ${base07}; - --wave-color-solid-rainbow-blue-fill: ${base0D}; - --wave-color-solid-rainbow-green-brighter: ${base0D}; - --wave-color-solid-rainbow-green-dark: ${base0C}; - --wave-color-solid-rainbow-green-darker: ${base0C}; - --wave-color-solid-rainbow-green-darkest: ${base01}; - --wave-color-solid-rainbow-green-fill: ${base0D}; - --wave-color-solid-rainbow-orange-fill: ${base09}; - --wave-color-solid-rainbow-purple-fill: ${base0E}; - --wave-color-solid-rainbow-red-bright: ${base08}; - --wave-color-solid-rainbow-red-brighter: ${base08}; - --wave-color-solid-rainbow-red-dark: ${base09}; - --wave-color-solid-rainbow-red-darker: ${base01}; - --wave-color-solid-rainbow-red-darkest: ${base00}; - --wave-color-solid-rainbow-red-fill: ${base08}; - --wave-color-solid-rainbow-yellow-bright: ${base0A}; - --wave-color-solid-rainbow-yellow-brighter: ${base06}; - --wave-color-solid-rainbow-yellow-dark: ${base09}; - --wave-color-solid-rainbow-yellow-darker: ${base01}; - --wave-color-solid-rainbow-yellow-darkest: ${base00}; - --wave-color-solid-rainbow-yellow-fill: ${base0A}; - --wave-color-solid-special-bright: ${base09}; - --wave-color-solid-special-brighter: ${base06}; - --wave-color-solid-special-dark: ${base09}; - --wave-color-solid-special-darker: ${base09}; - --wave-color-solid-special-darkest: ${base00}; - --wave-color-solid-special-fill: ${base0E}; - --wave-color-solid-warning-bright: ${base08}; - --wave-color-solid-warning-brighter: ${base09}; - --wave-color-solid-warning-dark: ${base09}; - --wave-color-solid-warning-darker: ${base01}; - --wave-color-solid-warning-darkest: ${base00}; - --wave-color-solid-warning-fill: ${base08}; - --wave-color-text-disabled: ${base02}; - --wave-color-text-link: ${base0D}; - --wave-color-text-main: ${base07}; - --wave-color-text-placeholder: ${base02}; - --wave-color-text-secondary: ${base06}; - --wave-color-text-tertiary: ${base05}; - --wave-font-weight--bold: 700; - --wave-font-weight--demi: 600; - --wave-font-weight--medium: 500; - --wave-opacity--ultra-thin: .05; - --wave-opacity--thin: .1; - --wave-opacity--regular: .4; - --wave-opacity--thick: .6; - --wave-opacity--ultra-thick: .8; - --wave-spacing--extra-extra-large: 64px; - --wave-spacing--extra-large: 40px; - --wave-spacing--large: 24px; - --wave-spacing--medium: 20px; - --wave-spacing--regular: 16px; - --wave-spacing--small: 12px; - --wave-spacing--extra-small: 8px; - --wave-spacing--extra-extra-small: 4px; - } - - .wave-text-caption-demi, .tidal-ui__v-stack { - color: var(--wave-color-solid-accent-bright) !important; - } - - .tidal-ui__icon { - fill: var(--wave-color-solid-rainbow-purple-fill) !important; - stroke: var(--wave-color-solid-rainbow-purple-fill) !important; - } - ''; - }; -} diff --git a/modules/hm/programs/media/zathura.nix b/modules/hm/programs/media/zathura.nix deleted file mode 100644 index aef015e..0000000 --- a/modules/hm/programs/media/zathura.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - lib, - osConfig, - ... -}: { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - programs.zathura = { - enable = true; - options = { - font = "Inter 12"; - selection-notification = true; - - selection-clipboard = "clipboard"; - adjust-open = "best-fit"; - pages-per-row = "1"; - scroll-page-aware = "true"; - scroll-full-overlap = "0.01"; - scroll-step = "100"; - zoom-min = "10"; - }; - }; - }; -} diff --git a/modules/hm/programs/misc.nix b/modules/hm/programs/misc.nix deleted file mode 100644 index bc7773c..0000000 --- a/modules/hm/programs/misc.nix +++ /dev/null @@ -1,39 +0,0 @@ -{ - lib, - pkgs, - osConfig, - ... -}: { - # miscellaneous programs that do not need to be configured - config = lib.mkIf osConfig.local.profiles.desktop.enable { - home.packages = with pkgs; [ - cinny-desktop - entr - fractal - geary - imhex - logisim-evolution - mission-center - nautilus - obsidian - playerctl - proton-pass - simple-scan - wl-clipboard - ]; - - programs = { - fzf.enable = true; - fastfetch.enable = true; - hyfetch = { - enable = true; - settings = { - preset = "nonbinary"; - mode = "rgb"; - backend = "fastfetch"; - color_align.mode = "horizontal"; - }; - }; - }; - }; -} diff --git a/modules/hm/programs/terminal/default.nix b/modules/hm/programs/terminal/default.nix deleted file mode 100644 index 59cc704..0000000 --- a/modules/hm/programs/terminal/default.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ - lib, - osConfig, - ... -}: { - imports = [ - ./emulators - ./programs - ./shell - ]; - - config = lib.mkIf osConfig.local.profiles.desktop.enable { - home.sessionVariables = { - EDITOR = "nvim"; - }; - }; -} diff --git a/modules/hm/programs/terminal/emulators/foot.nix b/modules/hm/programs/terminal/emulators/foot.nix deleted file mode 100644 index d596e88..0000000 --- a/modules/hm/programs/terminal/emulators/foot.nix +++ /dev/null @@ -1,54 +0,0 @@ -{ - lib, - config, - osConfig, - ... -}: let - styleCfg = osConfig.local.style; - # because someone thought this was a great idea: https://github.com/tinted-theming/schemes/commit/61058a8d2e2bd4482b53d57a68feb56cdb991f0b - palette = builtins.mapAttrs (_: color: lib.removePrefix "#" color) styleCfg.scheme.palette; -in { - config = lib.mkIf osConfig.local.modules.hyprland.enable { - programs.foot = { - enable = true; - settings = { - main = { - term = "xterm-256color"; - font = "monospace:size=14"; - shell = "${lib.getExe config.programs.fish.package}"; - }; - - colors = with palette; - lib.mkIf styleCfg.enable { - background = base00; - foreground = base05; - - regular0 = base00; - regular1 = base08; - regular2 = base0B; - regular3 = base0A; - regular4 = base0D; - regular5 = base0E; - regular6 = base0C; - regular7 = base05; - - bright0 = base02; - bright1 = base08; - bright2 = base0B; - bright3 = base0A; - bright4 = base0D; - bright5 = base0E; - bright6 = base0C; - bright7 = base07; - - "16" = base09; - "17" = base0F; - "18" = base01; - "19" = base02; - "20" = base04; - "21" = base06; - }; - }; - }; - }; -} diff --git a/modules/hm/programs/terminal/emulators/ghostty.nix b/modules/hm/programs/terminal/emulators/ghostty.nix deleted file mode 100644 index 0cf281a..0000000 --- a/modules/hm/programs/terminal/emulators/ghostty.nix +++ /dev/null @@ -1,109 +0,0 @@ -{ - lib, - pkgs, - osConfig, - ... -}: let - inherit (lib) mapAttrs mkIf optionalAttrs removePrefix; - styleCfg = osConfig.local.style; - - prefix = "ctrl+a"; - - mkGhosttyTheme = palette: let - colors = mapAttrs (_: value: removePrefix "#" value) palette; - in { - palette = [ - "0=#${colors.base00}" - "1=#${colors.base08}" - "2=#${colors.base0B}" - "3=#${colors.base0A}" - "4=#${colors.base0D}" - "5=#${colors.base0E}" - "6=#${colors.base0C}" - "7=#${colors.base05}" - "8=#${colors.base02}" - "9=#${colors.base08}" - "10=#${colors.base0B}" - "11=#${colors.base0A}" - "12=#${colors.base0D}" - "13=#${colors.base0E}" - "14=#${colors.base0C}" - "15=#${colors.base07}" - "16=#${colors.base09}" - "17=#${colors.base0F}" - "18=#${colors.base01}" - "19=#${colors.base02}" - "20=#${colors.base04}" - "21=#${colors.base06}" - ]; - background = colors.base00; - foreground = colors.base05; - cursor-color = colors.base06; - selection-background = colors.base02; - selection-foreground = colors.base05; - }; -in { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - programs.ghostty = lib.mkMerge [ - { - enable = true; - - settings = { - font-family = ["monospace" "Symbols Nerd Font"]; - font-size = 14; - gtk-single-instance = true; - gtk-adwaita = false; - confirm-close-surface = false; - - keybind = [ - "${prefix}>c=new_tab" - "${prefix}>p=move_tab:-1" - "${prefix}>n=move_tab:1" - - "${prefix}>\\=new_split:right" - "${prefix}>-=new_split:down" - "${prefix}>h=goto_split:left" - "${prefix}>j=goto_split:bottom" - "${prefix}>k=goto_split:top" - "${prefix}>l=goto_split:right" - "${prefix}>shift+h=resize_split:left,10" - "${prefix}>shift+j=resize_split:down,10" - "${prefix}>shift+k=resize_split:up,10" - "${prefix}>shift+l=resize_split:right,10" - "${prefix}>z=toggle_split_zoom" - ]; - - adw-toolbar-style = "flat"; - gtk-tabs-location = "bottom"; - gtk-wide-tabs = false; - window-decoration = false; - - linux-cgroup = "always"; - }; - } - - (optionalAttrs styleCfg.enable { - settings.theme = "base16"; - themes.base16 = mkIf styleCfg.enable (mkGhosttyTheme styleCfg.scheme.palette); - }) - ]; - - systemd.user.services.ghosttyd = { - Unit = { - Description = "ghosttyd™"; - PartOf = "graphical-session.target"; - After = "graphical-session.target"; - }; - Service = { - Type = "simple"; - ExecStart = "${pkgs.ghostty}/bin/ghostty --initial-window=false --quit-after-last-window-closed=false"; - Slice = "background-graphical.slice"; - Restart = "on-failure"; - }; - - Install = { - WantedBy = ["graphical-session.target"]; - }; - }; - }; -} diff --git a/modules/hm/programs/terminal/programs/bat.nix b/modules/hm/programs/terminal/programs/bat.nix deleted file mode 100644 index 9ac81a0..0000000 --- a/modules/hm/programs/terminal/programs/bat.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ - lib, - pkgs, - osConfig, - ... -}: { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - programs.bat = { - enable = true; - config.theme = "base16"; - }; - - home = { - sessionVariables = { - MANPAGER = "sh -c 'col -bx | bat --language man' "; - MANROFFOPT = "-c"; - }; - - packages = with pkgs.bat-extras; [ - batman - ]; - - shellAliases.man = "batman"; - }; - }; -} diff --git a/modules/hm/programs/terminal/programs/direnv.nix b/modules/hm/programs/terminal/programs/direnv.nix deleted file mode 100644 index 89e35ba..0000000 --- a/modules/hm/programs/terminal/programs/direnv.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ - lib, - osConfig, - ... -}: { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - programs = { - direnv = { - enable = true; - nix-direnv.enable = true; - }; - }; - }; -} diff --git a/modules/hm/programs/terminal/programs/git.nix b/modules/hm/programs/terminal/programs/git.nix deleted file mode 100644 index 455d541..0000000 --- a/modules/hm/programs/terminal/programs/git.nix +++ /dev/null @@ -1,60 +0,0 @@ -{ - lib, - osConfig, - ... -}: { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - programs.git = { - enable = true; - userName = "Anthony Rodriguez"; - userEmail = "anthony@nezia.dev"; - signing = { - signByDefault = true; - key = "EE3BE97C040A86CE"; - }; - extraConfig = { - push.autoSetupRemote = true; - init = { - defaultBranch = "main"; - }; - }; - }; - - programs.lazygit = { - enable = true; - }; - - home.shellAliases = { - lg = "lazygit"; - g = "git"; - gs = "git status"; - gsh = "git show HEAD"; - gshs = "DELTA_FEATURES=+side-by-side git show HEAD"; - ga = "git add"; - gaa = "git add :/"; - gap = "git add -p"; - gc = "git commit"; - gca = "git commit --amend"; - gcm = "git commit --message"; - gcf = "git commit --fixup"; - gk = "git checkout"; - gkp = "git checkout -p"; - gd = "git diff"; - gds = "DELTA_FEATURES=+side-by-side git diff"; - gdc = "git diff --cached"; - gdcs = "DELTA_FEATURES=+side-by-side git diff --cached"; - gf = "git fetch"; - gl = "git log"; - glp = "git log -p"; - glps = "DELTA_FEATURES=+side-by-side git log -p"; - gp = "git push"; - gpf = "git push --force-with-lease"; - gr = "git reset"; - gra = "git reset :/"; - grp = "git reset -p"; - gt = "git stash"; - gtp = "git stash pop"; - gu = "git pull"; - }; - }; -} diff --git a/modules/hm/programs/terminal/programs/gnupg.nix b/modules/hm/programs/terminal/programs/gnupg.nix deleted file mode 100644 index a800ef8..0000000 --- a/modules/hm/programs/terminal/programs/gnupg.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ - lib, - osConfig, - ... -}: { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - programs.gpg.enable = true; - services.gpg-agent = { - enable = true; - enableBashIntegration = true; - enableFishIntegration = true; - }; - }; -} diff --git a/modules/hm/programs/terminal/programs/misc.nix b/modules/hm/programs/terminal/programs/misc.nix deleted file mode 100644 index b74aa4f..0000000 --- a/modules/hm/programs/terminal/programs/misc.nix +++ /dev/null @@ -1,20 +0,0 @@ -{ - lib, - pkgs, - osConfig, - ... -}: { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - home.packages = with pkgs; [ - # archives - zip - unzip - unrar - - # utils - fd - file - ripgrep - ]; - }; -} diff --git a/modules/hm/programs/terminal/programs/nix-index.nix b/modules/hm/programs/terminal/programs/nix-index.nix deleted file mode 100644 index 372060d..0000000 --- a/modules/hm/programs/terminal/programs/nix-index.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ - lib, - inputs, - osConfig, - ... -}: { - imports = [inputs.nix-index-db.hmModules.nix-index]; - - config = lib.mkIf osConfig.local.profiles.desktop.enable { - programs = { - nix-index = { - enable = true; - symlinkToCacheHome = true; # needed for comma - }; - command-not-found.enable = false; - nix-index-database.comma.enable = true; - }; - }; -} diff --git a/modules/hm/programs/terminal/programs/yazi.nix b/modules/hm/programs/terminal/programs/yazi.nix deleted file mode 100644 index 3b60a2b..0000000 --- a/modules/hm/programs/terminal/programs/yazi.nix +++ /dev/null @@ -1,33 +0,0 @@ -{ - lib, - pkgs, - osConfig, - ... -}: { - config = lib.mkIf osConfig.local.modules.hyprland.enable { - programs.yazi = let - # https://github.com/iynaix/dotfiles/blob/8bb1568019ea26f034ac1af9c499b3ff102391a5/home-manager/shell/yazi.nix#L9-L11 - mkYaziPlugin = name: text: { - "${name}" = toString (pkgs.writeTextDir "${name}.yazi/init.lua" text) + "/${name}.yazi"; - }; - in { - enable = true; - enableFishIntegration = true; - plugins = mkYaziPlugin "smart-enter" '' - return { - entry = function() - local h = cx.active.current.hovered - ya.manager_emit(h and h.cha.is_dir and "enter" or "open", { hovered = true }) - end, - } - ''; - keymap.manager.prepend_keymap = [ - { - on = "l"; - run = "plugin --sync smart-enter"; - desc = "Enter the child directory, or open the file"; - } - ]; - }; - }; -} diff --git a/modules/hm/programs/terminal/shell/fish.nix b/modules/hm/programs/terminal/shell/fish.nix deleted file mode 100644 index 142d7eb..0000000 --- a/modules/hm/programs/terminal/shell/fish.nix +++ /dev/null @@ -1,88 +0,0 @@ -{ - lib, - pkgs, - config, - osConfig, - ... -}: let - starshipTransient = lib.strings.optionalString config.programs.starship.enableTransience '' - function starship_transient_prompt_func - starship module character - end - - function starship_transient_rprompt_func - starship module cmd_duration - end - ''; - styleCfg = osConfig.local.style; -in { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - programs.fish = { - enable = true; - interactiveShellInit = - starshipTransient - + '' - set fish_greeting # Disable greeting - fish_vi_key_bindings # Enable Vi mode - - '' - + lib.optionalString styleCfg.enable - '' - set fish_cursor_default block blink - set fish_cursor_insert line blink - set fish_cursor_replace_one underscore blink - set fish_cursor_visual block - - set -x fish_color_autosuggestion brblack - set -x fish_color_cancel -r - set -x fish_color_command brgreen - set -x fish_color_comment brmagenta - set -x fish_color_cwd green - set -x fish_color_cwd_root red - set -x fish_color_end brmagenta - set -x fish_color_error brred - set -x fish_color_escape brcyan - set -x fish_color_history_current --bold - set -x fish_color_host normal - set -x fish_color_host_remote yellow - set -x fish_color_match --background=brblue - set -x fish_color_normal normal - set -x fish_color_operator cyan - set -x fish_color_param brblue - set -x fish_color_quote yellow - set -x fish_color_redirection bryellow - set -x fish_color_search_match 'bryellow' '--background=brblack' - set -x fish_color_selection 'white' '--bold' '--background=brblack' - set -x fish_color_status red - set -x fish_color_user brgreen - set -x fish_color_valid_path --underline - set -x fish_pager_color_completion normal - set -x fish_pager_color_description yellow - set -x fish_pager_color_prefix 'white' '--bold' '--underline' - set -x fish_pager_color_progress 'brwhite' '--background=cyan' - ''; - - plugins = [ - { - name = "fzf"; - inherit (pkgs.fishPlugins.fzf) src; - } - { - name = "autopair"; - inherit (pkgs.fishPlugins.autopair) src; - } - ]; - }; - - programs.bash = { - enable = true; - initExtra = '' - if [[ $(${pkgs.procps}/bin/ps --no-header --pid=$PPID --format=comm) != "fish" && -z ''${BASH_EXECUTION_STRING} ]] - then - shopt -q login_shell && LOGIN_OPTION='--login' || LOGIN_OPTION="" - exec ${pkgs.fish}/bin/fish $LOGIN_OPTION - fi - ''; - }; - }; -} diff --git a/modules/hm/programs/terminal/shell/starship.nix b/modules/hm/programs/terminal/shell/starship.nix deleted file mode 100644 index 2128b18..0000000 --- a/modules/hm/programs/terminal/shell/starship.nix +++ /dev/null @@ -1,29 +0,0 @@ -{ - lib, - osConfig, - ... -}: { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - programs.starship = { - enable = true; - enableTransience = true; - settings = { - add_newline = true; - - directory = { - style = "bold yellow"; - }; - character = { - format = "$symbol "; - success_symbol = "[➜](bold green)"; - error_symbol = "[✗](bold red)"; - vicmd_symbol = "[](bold green)"; - }; - cmd_duration = { - style = "yellow"; - format = "[ $duration]($style)"; - }; - }; - }; - }; -} diff --git a/modules/hm/programs/terminal/shell/zoxide.nix b/modules/hm/programs/terminal/shell/zoxide.nix deleted file mode 100644 index 63f3106..0000000 --- a/modules/hm/programs/terminal/shell/zoxide.nix +++ /dev/null @@ -1,12 +0,0 @@ -{ - lib, - osConfig, - ... -}: { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - programs.zoxide = { - enable = true; - enableBashIntegration = false; - }; - }; -} diff --git a/modules/hm/programs/walker.nix b/modules/hm/programs/walker.nix deleted file mode 100644 index 0b39d60..0000000 --- a/modules/hm/programs/walker.nix +++ /dev/null @@ -1,184 +0,0 @@ -{ - lib, - inputs, - osConfig, - ... -}: let - styleCfg = osConfig.local.style; -in { - imports = [ - inputs.walker.homeManagerModules.default - ]; - config = lib.mkIf osConfig.local.modules.hyprland.enable { - programs.walker = { - enable = true; - runAsService = true; - # All options from the config.json can be used here. - config = { - list = { - height = 200; - }; - app_launch_prefix = "uwsm app -- "; - websearch.prefix = "?"; - switcher.prefix = "/"; - }; - - theme = with styleCfg.scheme.palette; - lib.mkIf styleCfg.enable { - style = '' - @define-color foreground ${base05}; - @define-color background ${base00}; - @define-color accent ${base0E}; - - #window, - #box, - #aiScroll, - #aiList, - #search, - #password, - #input, - #prompt, - #clear, - #typeahead, - #list, - child, - scrollbar, - slider, - #item, - #text, - #label, - #bar, - #sub, - #activationlabel { - all: unset; - } - - #cfgerr { - background: rgba(255, 0, 0, 0.4); - margin-top: 20px; - padding: 8px; - font-size: 1.2em; - } - - #window { - color: @foreground; - } - - #box { - border-radius: 2px; - background: @background; - padding: 32px; - border: 1px solid ${base01}; - box-shadow: - 0 19px 38px rgba(0, 0, 0, 0.3), - 0 15px 12px rgba(0, 0, 0, 0.22); - } - - #search { - box-shadow: - 0 1px 3px rgba(0, 0, 0, 0.1), - 0 1px 2px rgba(0, 0, 0, 0.22); - background: ${base01}; - padding: 8px; - } - - #prompt { - margin-left: 4px; - margin-right: 12px; - color: @foreground; - opacity: 0.2; - } - - #clear { - color: @foreground; - opacity: 0.8; - } - - #password, - #input, - #typeahead { - border-radius: 2px; - } - - #input { - background: none; - } - - #spinner { - padding: 8px; - } - - #typeahead { - color: @foreground; - opacity: 0.8; - } - - #input placeholder { - opacity: 0.5; - } - - child { - padding: 8px; - border-radius: 2px; - } - - child:selected, - child:hover { - background: alpha(@accent, 0.4); - } - - #icon { - margin-right: 8px; - } - - #label { - font-weight: 500; - } - - #sub { - opacity: 0.5; - font-size: 0.8em; - } - - .aiItem { - padding: 10px; - border-radius: 2px; - color: @foreground; - background: @background; - } - - .aiItem.assistant { - background: ${base02}; - } - - .aiItem:hover { - background: alpha(@accent, 0.2); - color: ${base00}; - } - - #activationlabel { - color: @accent; - font-weight: bold; - } - ''; - - layout = { - ui.window.box = { - v_align = "center"; - orientation = "vertical"; - }; - }; - }; - }; - - systemd.user.services.walker = { - Unit = { - PartOf = lib.mkForce []; - After = lib.mkForce ["graphical-session.target"]; - }; - Service = { - Slice = lib.mkForce "background-graphical.slice"; - }; - }; - }; -} diff --git a/modules/hm/programs/wlogout.nix b/modules/hm/programs/wlogout.nix deleted file mode 100644 index b9938d9..0000000 --- a/modules/hm/programs/wlogout.nix +++ /dev/null @@ -1,69 +0,0 @@ -{ - lib, - pkgs, - config, - osConfig, - ... -}: { - config = lib.mkIf osConfig.local.modules.hyprland.enable { - programs.wlogout = { - enable = true; - - layout = let - systemd = let - systemd = lib.getExe' pkgs.systemd; - in { - loginctl = systemd "loginctl"; - systemctl = systemd "systemctl"; - }; - in [ - { - action = "${systemd.loginctl} lock-session"; - keybind = "l"; - label = "lock"; - text = "Lock"; - } - - { - action = "${systemd.systemctl} hibernate"; - keybind = "h"; - label = "hibernate"; - text = "Hibernate"; - } - - { - action = "${ - systemd.loginctl - } terminate-user ${ - config.home.username - }"; - - keybind = "q"; - label = "logout"; - text = "Logout"; - } - - { - action = "${systemd.systemctl} poweroff"; - keybind = "p"; - label = "shutdown"; - text = "Shutdown"; - } - - { - action = "${systemd.systemctl} suspend"; - keybind = "s"; - label = "suspend"; - text = "Suspend"; - } - - { - action = "${systemd.systemctl} reboot"; - keybind = "r"; - label = "reboot"; - text = "Reboot"; - } - ]; - }; - }; -} diff --git a/modules/hm/programs/xdg.nix b/modules/hm/programs/xdg.nix deleted file mode 100644 index 33ccf54..0000000 --- a/modules/hm/programs/xdg.nix +++ /dev/null @@ -1,42 +0,0 @@ -{ - lib, - config, - osConfig, - ... -}: { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - xdg = { - enable = true; - cacheHome = config.home.homeDirectory + "/.local/cache"; - - mimeApps = { - enable = true; - defaultApplications = { - "default-web-browser" = ["firefox.desktop"]; - "text/html" = ["firefox.desktop"]; - "x-scheme-handler/http" = ["firefox.desktop"]; - "x-scheme-handler/https" = ["firefox.desktop"]; - "x-scheme-handler/about" = ["firefox.desktop"]; - "x-scheme-handler/unknown" = ["firefox.desktop"]; - "x-scheme-handler/chrome" = ["chromium-browser.desktop"]; - "inode/directory" = ["yazi.desktop"]; - "application/pdf" = ["org.pwmt.zathura-pdf-mupdf.desktop"]; - "image/png" = ["org.gnome.gThumb.desktop"]; - "image/svg" = [" org.gnome.gThumb.desktop"]; - "image/jpeg" = ["org.gnome.gThumb.desktop"]; - "image/gif" = [" org.gnome.gThumb.desktop"]; - "video/mp4" = ["io.github.celluloid_player.Celluloid.desktop"]; - "video/avi" = ["io.github.celluloid_player.Celluloid.desktop"]; - "video/mkv" = ["io.github.celluloid_player.Celluloid.desktop"]; - }; - }; - userDirs = { - enable = true; - createDirectories = true; - extraConfig = { - XDG_SCREENSHOTS_DIR = "${config.xdg.userDirs.pictures}/Screenshots"; - }; - }; - }; - }; -} diff --git a/modules/hm/services/default.nix b/modules/hm/services/default.nix deleted file mode 100644 index 6bff764..0000000 --- a/modules/hm/services/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - imports = [ - ./gammastep.nix - ./gtk.nix - ./syncthing.nix - ./swaync - ./udiskie.nix - ]; -} diff --git a/modules/hm/services/gammastep.nix b/modules/hm/services/gammastep.nix deleted file mode 100644 index 82b32fd..0000000 --- a/modules/hm/services/gammastep.nix +++ /dev/null @@ -1,23 +0,0 @@ -{ - lib, - osConfig, - ... -}: { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - services.gammastep = { - enable = true; - tray = true; - provider = "geoclue2"; - }; - - systemd.user.services.gammastep = { - Unit = { - PartOf = lib.mkForce []; - After = lib.mkForce ["graphical-session.target"]; - }; - Service = { - Slice = lib.mkForce "background-graphical.slice"; - }; - }; - }; -} diff --git a/modules/hm/services/gtk.nix b/modules/hm/services/gtk.nix deleted file mode 100644 index 6363a70..0000000 --- a/modules/hm/services/gtk.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ - lib, - osConfig, - ... -}: let - styleCfg = osConfig.local.style; -in { - config = with styleCfg; - lib.mkIf styleCfg.enable { - gtk = rec { - enable = true; - iconTheme = { - inherit (gtk.iconTheme) name package; - }; - theme = { - inherit (gtk.theme) name package; - }; - - gtk3.extraConfig = { - gtk-application-prefer-dark-theme = scheme.variant == "dark"; - }; - }; - - dconf.settings."org/gnome/desktop/interface".color-scheme = "prefer-${scheme.variant}"; - }; -} diff --git a/modules/hm/services/swaync/default.nix b/modules/hm/services/swaync/default.nix deleted file mode 100644 index 6d512f0..0000000 --- a/modules/hm/services/swaync/default.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ - lib, - lib', - osConfig, - ... -}: let - styleCfg = osConfig.local.style; -in { - config = lib.mkIf osConfig.local.modules.hyprland.enable { - services.swaync = lib.mkMerge [ - { - enable = true; - settings = { - positionX = "right"; - positionY = "top"; - layer = "overlay"; - control-center-layer = "top"; - layer-shell = true; - cssPriority = "application"; - control-center-margin-top = 0; - control-center-margin-bottom = 0; - control-center-margin-right = 0; - control-center-margin-left = 0; - notification-2fa-action = true; - notification-inline-replies = false; - notification-icon-size = 64; - notification-body-image-height = 100; - notification-body-image-width = 200; - }; - } - - (lib.mkIf styleCfg.enable { - style = - lib'.generateGtkColors lib styleCfg.scheme.palette - + builtins.readFile ./style.css; - }) - ]; - - systemd.user.services.swaync.Unit.ConditionEnvironment = lib.mkForce ""; - }; -} diff --git a/modules/hm/services/syncthing.nix b/modules/hm/services/syncthing.nix deleted file mode 100644 index d0cd12a..0000000 --- a/modules/hm/services/syncthing.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ - lib, - osConfig, - ... -}: { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - services.syncthing = { - enable = true; - }; - }; -} diff --git a/modules/hm/services/udiskie.nix b/modules/hm/services/udiskie.nix deleted file mode 100644 index cc2e2fb..0000000 --- a/modules/hm/services/udiskie.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ - lib, - osConfig, - ... -}: { - config = lib.mkIf osConfig.local.profiles.desktop.enable { - services.udiskie.enable = true; - }; -} diff --git a/modules/nix/core/home-manager.nix b/modules/nix/core/home-manager.nix deleted file mode 100644 index bae18aa..0000000 --- a/modules/nix/core/home-manager.nix +++ /dev/null @@ -1,38 +0,0 @@ -{ - inputs, - lib, - config, - ... -}: let - inherit (config.local.systemVars) username; - lib' = import ../../../shared/lib inputs.nixpkgs.lib; -in { - imports = [ - inputs.home-manager.nixosModules.default - ]; - - config = lib.mkIf (!config.local.profiles.server.enable) { - home-manager = { - backupFileExtension = "backup"; - useGlobalPkgs = true; - useUserPackages = true; - - extraSpecialArgs = {inherit inputs lib';}; - sharedModules = [../../hm]; - }; - - home-manager.users.${username} = { - home = { - homeDirectory = "/home/${username}"; - stateVersion = "24.05"; - }; - - programs.home-manager.enable = true; - }; - - programs = { - # make HM-managed GTK stuff work - dconf.enable = true; - }; - }; -} diff --git a/modules/nix/programs/default.nix b/modules/nix/programs/default.nix deleted file mode 100644 index 11b433e..0000000 --- a/modules/nix/programs/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ - imports = [ - ./hyprland.nix - ./games.nix - ./xdg.nix - ]; -} diff --git a/modules/nix/programs/games.nix b/modules/nix/programs/games.nix deleted file mode 100644 index 8d1a05e..0000000 --- a/modules/nix/programs/games.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - lib, - config, - ... -}: { - config = lib.mkIf config.local.profiles.gaming.enable { - programs = { - steam = { - enable = true; - }; - - gamemode.enable = true; - gamescope.enable = true; - - coolercontrol = { - enable = true; - nvidiaSupport = true; - }; - }; - }; -} diff --git a/modules/nix/programs/hyprland.nix b/modules/nix/programs/hyprland.nix deleted file mode 100644 index 9aca4f1..0000000 --- a/modules/nix/programs/hyprland.nix +++ /dev/null @@ -1,36 +0,0 @@ -{ - inputs, - config, - lib, - pkgs, - ... -}: { - config = lib.mkIf config.local.modules.hyprland.enable { - environment.systemPackages = [ - inputs.hyprland-qtutils.packages.${pkgs.system}.default - ]; - - programs.hyprland = { - enable = true; - package = inputs.hyprland.packages.${pkgs.system}.hyprland; - portalPackage = inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland; - withUWSM = true; - systemd.setPath.enable = true; - }; - - # copied from https://github.com/linyinfeng/dotfiles/blob/91b0363b093303f57885cbae9da7f8a99bbb4432/nixos/profiles/graphical/niri/default.nix#L17-L29 - security.pam.services.hyprlock.text = lib.mkIf config.services.fprintd.enable '' - account required pam_unix.so - - # check passwork before fprintd - auth sufficient pam_unix.so try_first_pass likeauth - auth sufficient ${pkgs.fprintd}/lib/security/pam_fprintd.so - auth required pam_deny.so - - password sufficient pam_unix.so nullok yescrypt - - session required pam_env.so conffile=/etc/pam/environment readenv=0 - session required pam_unix.so - ''; - }; -} diff --git a/modules/nix/programs/xdg.nix b/modules/nix/programs/xdg.nix deleted file mode 100644 index 1724017..0000000 --- a/modules/nix/programs/xdg.nix +++ /dev/null @@ -1,21 +0,0 @@ -{ - lib, - pkgs, - config, - ... -}: { - config = lib.mkIf config.local.profiles.desktop.enable { - xdg.portal = { - enable = true; - xdgOpenUsePortal = true; - config = { - common.default = ["gtk"]; - hyprland.default = ["gtk" "hyprland"]; - }; - - extraPortals = [ - pkgs.xdg-desktop-portal-gtk - ]; - }; - }; -} diff --git a/modules/nix/services/syncthing.nix b/modules/nix/services/syncthing.nix deleted file mode 100644 index 258af23..0000000 --- a/modules/nix/services/syncthing.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ - lib, - config, - ... -}: { - config = lib.mkIf config.local.profiles.desktop.enable { - services = { - syncthing = { - enable = true; - }; - }; - systemd.services.syncthing.environment.STNODEFAULTFOLDER = "true"; # Don't create default ~/Sync folder - }; -} diff --git a/modules/options/homeVars.nix b/modules/options/homeVars.nix index fe69889..50295ea 100644 --- a/modules/options/homeVars.nix +++ b/modules/options/homeVars.nix @@ -18,6 +18,17 @@ in { description = "your email (used for git commits)"; default = null; }; + signingKey = mkOption { + type = str; + description = "your ssh public key (used for signing git commits)"; + }; + + userEnvFile = mkOption { + type = str; + description = "filename where the user environment variables such as EDITOR will be stored, under `$XDG_CONFIG_HOME/environment.d` (needs to be a file name without extension)."; + default = "99-user-env"; + example = "99-user-env"; + }; }; config.assertions = mkIf (!config.local.profiles.server.enable) [ @@ -27,5 +38,11 @@ in { { assertion = options.local.homeVars.email.isDefined; } + { + assertion = options.local.homeVars.signingKey.isDefined; + } + { + assertion = options.local.homeVars.userEnvFile.isDefined; + } ]; } diff --git a/modules/programs/anyrun/config.ron b/modules/programs/anyrun/config.ron new file mode 100644 index 0000000..2f50d7c --- /dev/null +++ b/modules/programs/anyrun/config.ron @@ -0,0 +1,38 @@ +Config( + // Position/size fields use an enum for the value, it can be either: + // Absolute(n): The absolute value in pixels + // Fraction(n): A fraction of the width or height of the full screen (depends on exclusive zones and the settings related to them) window respectively + + // The horizontal position, adjusted so that Relative(0.5) always centers the runner + x: Fraction(0.5), + + // The vertical position, works the same as `x` + y: Absolute(0), + + // The width of the runner + width: Absolute(800), + + // The minimum height of the runner, the runner will expand to fit all the entries + height: Absolute(0), + + // Hide match and plugin info icons + hide_icons: false, + + // ignore exclusive zones, f.e. Waybar + ignore_exclusive_zones: false, + + // Layer shell layer: Background, Bottom, Top, Overlay + layer: Overlay, + + // Hide the plugin info panel + hide_plugin_info: false, + + // Close window when a click outside the main box is received + close_on_click: false, + + // Show search results immediately when Anyrun starts + show_results_immediately: true, + + // Limit amount of entries shown in total + max_entries: None, +) diff --git a/modules/programs/anyrun/default.nix b/modules/programs/anyrun/default.nix new file mode 100644 index 0000000..9e8f8de --- /dev/null +++ b/modules/programs/anyrun/default.nix @@ -0,0 +1,36 @@ +{ + lib, + inputs, + config, + pkgs, + ... +}: let + inherit (lib) mkIf; + inherit (config.local.systemVars) username; +in { + config = mkIf config.local.modules.hyprland.enable { + hjem.users.${username} = { + packages = [inputs.anyrun.packages.${pkgs.system}.anyrun-with-all-plugins]; + files = { + ".config/anyrun/config.ron".source = ./config.ron; + ".config/anyrun/applications.ron".text = '' + Config( + // Also show the Desktop Actions defined in the desktop files, e.g. "New Window" from LibreWolf + desktop_actions: true, + max_entries: 5, + // The terminal used for running terminal based desktop entries, if left as `None` a static list of terminals is used + // to determine what terminal to use. + terminal: Some(Terminal( + // The main terminal command + command: "foot", + // What arguments should be passed to the terminal process to run the command correctly + // {} is replaced with the command in the desktop entry + args: "uwsm app -- {}", + )), + ) + ''; + ".config/anyrun/style.css".source = ./style.css; + }; + }; + }; +} diff --git a/modules/programs/anyrun/style.css b/modules/programs/anyrun/style.css new file mode 100644 index 0000000..1374ee4 --- /dev/null +++ b/modules/programs/anyrun/style.css @@ -0,0 +1,25 @@ +#window { + background-color: rgba(0, 0, 0, 0); +} + +box#main { + border-radius: 10px; + background-color: @theme_bg_color; +} + +list#main { + background-color: rgba(0, 0, 0, 0); + border-radius: 10px; +} + +list#plugin { + background-color: rgba(0, 0, 0, 0); +} + +label#match-desc { + font-size: 10px; +} + +label#plugin { + font-size: 14px; +} diff --git a/modules/hm/programs/default.nix b/modules/programs/default.nix similarity index 78% rename from modules/hm/programs/default.nix rename to modules/programs/default.nix index 2094bba..f5dfdd8 100644 --- a/modules/hm/programs/default.nix +++ b/modules/programs/default.nix @@ -1,15 +1,14 @@ { imports = [ - ./browsers + ./anyrun ./editors ./hypr ./media ./terminal - ./anyrun.nix ./discord.nix + ./firefox.nix ./games.nix - ./gnome.nix ./misc.nix ./waybar.nix ./wlogout.nix diff --git a/modules/programs/discord.nix b/modules/programs/discord.nix new file mode 100644 index 0000000..23dc832 --- /dev/null +++ b/modules/programs/discord.nix @@ -0,0 +1,118 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (lib) mkIf; + inherit (config.local.systemVars) username; + styleCfg = config.local.style; +in { + config = mkIf config.local.profiles.desktop.enable { + hjem.users.${username} = { + packages = [pkgs.vesktop]; + files.".config/vesktop/themes/midnight-base16.css".text = with styleCfg.scheme.palette; + mkIf styleCfg.enable '' + /** + * @name Midnight-base16 + * @description A dark, rounded discord theme. Updated to use base16 colors. + * @author refact0r + * @version 1.6.2 + * @invite nz87hXyvcy + * @website https://github.com/refact0r/midnight-discord + * @source https://github.com/refact0r/midnight-discord/blob/master/midnight.theme.css + * @authorId 508863359777505290 + * @authorLink https://www.refact0r.dev + */ + + /* IMPORTANT: make sure to enable dark mode in discord settings for the theme to apply properly!!! */ + + @import url('https://refact0r.github.io/midnight-discord/midnight.css'); + + /* customize things here */ + :root { + /* font, change to 'gg sans' for default discord font*/ + --font: 'gg sans'; + + /* top left corner text */ + --corner-text: '${styleCfg.scheme.name}'; + + /* color of status indicators and window controls */ + --online-indicator: ${base0B}; /* change to #23a55a for default green */ + --dnd-indicator: ${base08}; /* change to #f13f43 for default red */ + --idle-indicator: ${base0A}; /* change to #f0b232 for default yellow */ + --streaming-indicator: ${base0E}; /* change to #593695 for default purple */ + + /* accent colors */ + --accent-1: ${base0D}; /* links */ + --accent-2: ${base0E}; /* general unread/mention elements, some icons when active */ + --accent-3: ${base0E}; /* accent buttons */ + --accent-4: ${base03}; /* accent buttons when hovered */ + --accent-5: ${base07}; /* accent buttons when clicked */ + --mention: ${base00}1a; /* mentions & mention messages */ + --mention-hover: ${base00}0d; /* mentions & mention messages when hovered */ + + /* text colors */ + --text-0: var(--bg-4); /* text on colored elements */ + --text-1: ${base06}; /* other normally white text */ + --text-2: ${base06}; /* headings and important text */ + --text-3: ${base05}; /* normal text */ + --text-4: ${base05}; /* icon buttons and channels */ + --text-5: ${base04}; /* muted channels/chats and timestamps */ + + /* background and dark colors */ + --bg-1: ${base0E}; /* dark buttons when clicked */ + --bg-2: ${base02}; /* dark buttons */ + --bg-3: ${base01}; /* spacing, secondary elements */ + --bg-4: ${base00}; /* main background color */ + --hover: ${base03}1a; /* channels and buttons when hovered */ + --active: ${base03}33; /* channels and buttons when clicked or selected */ + --message-hover: #0000001a; /* messages when hovered */ + + /* amount of spacing and padding */ + --spacing: 12px; + + /* animations */ + /* ALL ANIMATIONS CAN BE DISABLED WITH REDUCED MOTION IN DISCORD SETTINGS */ + --list-item-transition: 0.2s ease; /* channels/members/settings hover transition */ + --unread-bar-transition: 0.2s ease; /* unread bar moving into view transition */ + --moon-spin-transition: 0.4s ease; /* moon icon spin */ + --icon-spin-transition: 1s ease; /* round icon button spin (settings, emoji, etc.) */ + + /* corner roundness (border-radius) */ + --roundness-xl: 22px; /* roundness of big panel outer corners */ + --roundness-l: 20px; /* popout panels */ + --roundness-m: 16px; /* smaller panels, images, embeds */ + --roundness-s: 12px; /* members, settings inputs */ + --roundness-xs: 10px; /* channels, buttons */ + --roundness-xxs: 8px; /* searchbar, small elements */ + + /* direct messages moon icon */ + /* change to block to show, none to hide */ + --discord-icon: none; /* discord icon */ + --moon-icon: block; /* moon icon */ + --moon-icon-url: url('https://upload.wikimedia.org/wikipedia/commons/c/c4/Font_Awesome_5_solid_moon.svg'); /* custom icon url */ + --moon-icon-size: auto; + + /* filter uncolorable elements to fit theme */ + /* (just set to none, they're too much work to configure) */ + --login-bg-filter: saturate(0.3) hue-rotate(-15deg) brightness(0.4); /* login background artwork */ + --green-to-accent-3-filter: hue-rotate(56deg) saturate(1.43); /* add friend page explore icon */ + --blurple-to-accent-3-filter: hue-rotate(304deg) saturate(0.84) brightness(1.2); /* add friend page school icon */ + } + + /* Selected chat/friend text */ + .selected_f5eb4b, + .selected_f6f816 .link_d8bfb3 { + color: var(--text-0) !important; + background: var(--accent-3) !important; + } + + .selected_f6f816 .link_d8bfb3 * { + color: var(--text-0) !important; + fill: var(--text-0) !important; + } + ''; + }; + }; +} diff --git a/modules/programs/editors/default.nix b/modules/programs/editors/default.nix new file mode 100644 index 0000000..6bade39 --- /dev/null +++ b/modules/programs/editors/default.nix @@ -0,0 +1,23 @@ +{ + config, + lib, + ... +}: let + inherit (lib) mkIf; + inherit (config.local.systemVars) username; + inherit (config.local.homeVars) userEnvFile; +in { + imports = [ + ./neovim.nix + ]; + + config = mkIf config.local.profiles.desktop.enable { + hjem.users.${username} = { + files = { + ".config/environment.d/${userEnvFile}.conf".text = '' + EDITOR="nvim"; + ''; + }; + }; + }; +} diff --git a/modules/hm/programs/editors/neovim.nix b/modules/programs/editors/neovim.nix similarity index 90% rename from modules/hm/programs/editors/neovim.nix rename to modules/programs/editors/neovim.nix index dfb6e2d..74782f3 100644 --- a/modules/hm/programs/editors/neovim.nix +++ b/modules/programs/editors/neovim.nix @@ -2,17 +2,16 @@ lib, inputs, pkgs, - osConfig, + config, ... }: let - styleCfg = osConfig.local.style; -in { - imports = [inputs.nvf.homeManagerModules.default]; + inherit (config.local.systemVars) username; + styleCfg = config.local.style; - config = lib.mkIf osConfig.local.profiles.desktop.enable { - programs.nvf = { - enable = true; - settings.vim = lib.mkMerge [ + customNeovim = inputs.nvf.lib.neovimConfiguration { + inherit pkgs; + modules = lib.singleton { + config.vim = lib.mkMerge [ { viAlias = true; vimAlias = true; @@ -229,27 +228,11 @@ in { }) ]; }; - - programs.neovide = { - enable = true; - settings = { - fork = false; - frame = "full"; - idle = true; - maximized = false; - no-multigrid = false; - srgb = false; - tabs = true; - theme = "auto"; - title-hidden = true; - vsync = true; - wsl = false; - - font = { - normal = []; - size = 14.0; - }; - }; + }; +in { + config = lib.mkIf config.local.profiles.desktop.enable { + hjem.users.${username} = { + packages = [customNeovim.neovim]; }; }; } diff --git a/modules/programs/firefox.nix b/modules/programs/firefox.nix new file mode 100644 index 0000000..2d4b2e7 --- /dev/null +++ b/modules/programs/firefox.nix @@ -0,0 +1,170 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (config.local.systemVars) username; + toINI = lib.generators.toINI {}; + + betterfox = pkgs.fetchFromGitHub { + owner = "yokoffing"; + repo = "betterfox"; + rev = "e026ed7d3a763c5d3f96c2680d7bc3340831af4f"; + hash = "sha256-hpkEO5BhMVtINQG8HN4xqfas/R6q5pYPZiFK8bilIDs="; + }; + + firefox = pkgs.wrapFirefox pkgs.firefox-esr-128-unwrapped { + extraPolicies = { + SearchEngines.Default = "SearxNG"; + SearchEngines.Add = [ + { + Name = "SearxNG"; + URLTemplate = "https://search.nezia.dev/search?q={searchTerms}"; + Method = "GET"; + SuggestURLTemplate = "https://search.nezia.dev/autocompleter?q={searchTerms}"; + } + { + Name = "Nix Packages"; + Alias = "@np"; + URLTemplate = "https://search.nixos.org/packages?channel=unstable&query={searchTerms}"; + Method = "GET"; + } + { + Name = "Nix Options"; + Alias = "@no"; + URLTemplate = "https://search.nixos.org/options?channel=unstable&query={searchTerms}"; + Method = "GET"; + } + { + Name = "NixOS Wiki"; + Alias = "@nw"; + URLTemplate = "https://wiki.nixos.org/w/index.php?search={searchTerms}"; + Method = "GET"; + } + { + Name = "Home Manager Options"; + Alias = "@hmo"; + URLTemplate = "https://home-manager-options.extranix.com/?query={searchTerms}&release=master"; + Method = "GET"; + } + { + Name = "ProtonDB"; + Alias = "@pdb"; + URLTemplate = "https://www.protondb.com/search?q={searchTerms}"; + Method = "GET"; + } + { + Name = "Noogle"; + Alias = "@ng"; + URLTemplate = "https://noogle.dev/q?term={searchTerms}"; + } + { + Name = "GitHub Nix"; + Alias = "@ghn"; + URLTemplate = "https://github.com/search?q=language:nix NOT is:fork {searchTerms}&type=code"; + } + ]; + DisableTelemetry = true; + DisablePocket = true; + DisableFeedbackCommands = true; + DisableFirefoxStudies = true; + OfferToSaveLogins = false; + OffertosaveloginsDefault = false; + PasswordManagerEnabled = false; + SearchSuggestEnabled = true; + + # https://github.com/Sly-Harvey/NixOS/blob/f9da2691ea46565256ad757959cfc26ec6cee10d/modules/programs/browser/firefox/default.nix#L58-L163 + "3rdparty".Extensions = { + "addon@darkreader.org" = { + permissions = ["internal:privateBrowsingAllowed"]; + enabled = true; + automation = { + enabled = true; + behavior = "OnOff"; + mode = "system"; + }; + detectDarkTheme = true; + enabledByDefault = true; + changeBrowserTheme = false; + enableForProtectedPages = true; + fetchNews = false; + previewNewDesign = true; + }; + "uBlock0@raymondhill.net" = { + permissions = ["internal:privateBrowsingAllowed"]; + advancedSettings = [ + [ + "userResourcesLocation" + "https://raw.githubusercontent.com/pixeltris/TwitchAdSolutions/master/video-swap-new/video-swap-new-ublock-origin.js" + ] + ]; + adminSettings = { + userSettings = { + uiTheme = "dark"; + advancedUserEnabled = true; + userFiltersTrusted = true; + importedLists = [ + "https://raw.githubusercontent.com/laylavish/uBlockOrigin-HUGE-AI-Blocklist/main/list.txt" + ]; + selectedFilterLists = [ + "FRA-0" + "adguard-cookies" + "adguard-mobile-app-banners" + "adguard-other-annoyances" + "adguard-popup-overlays" + "adguard-social" + "adguard-spyware-url" + "adguard-widgets" + "easylist" + "easylist-annoyances" + "easylist-chat" + "easylist-newsletters" + "easylist-notifications" + "easyprivacy" + "fanboy-cookiemonster" + "https://filters.adtidy.org/extension/ublock/filters/3.txt" + "https://github.com/DandelionSprout/adfilt/raw/master/LegitimateURLShortener.txt" + "plowe-0" + "ublock-annoyances" + "ublock-badware" + "ublock-cookies-adguard" + "ublock-cookies-easylist" + "ublock-filters" + "ublock-privacy" + "ublock-quick-fixes" + "ublock-unbreak" + "urlhaus-1" + "https://raw.githubusercontent.com/laylavish/uBlockOrigin-HUGE-AI-Blocklist/main/list.txt" + ]; + }; + }; + }; + }; + }; + }; +in { + config = lib.mkIf config.local.profiles.desktop.enable { + hjem.users.${username} = { + packages = [firefox]; + files = { + ".mozilla/firefox/profiles.ini".text = toINI { + Profile0 = { + # creates lunarnova profile and sets it as default + Name = "${username}"; + IsRelative = 1; + Path = "${username}"; + Default = 1; + }; + }; + ".mozilla/firefox/${username}/user.js".text = builtins.concatStringsSep "\n" [ + (builtins.readFile "${betterfox}/user.js") + (builtins.readFile "${betterfox}/Securefox.js") + (builtins.readFile "${betterfox}/Fastfox.js") + (builtins.readFile "${betterfox}/Peskyfox.js") + (builtins.readFile "${betterfox}/Smoothfox.js") + ]; + }; + }; + }; +} diff --git a/modules/programs/games.nix b/modules/programs/games.nix new file mode 100644 index 0000000..26c17e1 --- /dev/null +++ b/modules/programs/games.nix @@ -0,0 +1,36 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (lib) mkIf; + inherit (config.local.systemVars) username; +in { + config = mkIf config.local.profiles.gaming.enable { + hjem.users.${username} = { + packages = [ + pkgs.mangohud + pkgs.bolt-launcher + pkgs.ankama-launcher + pkgs.lutris + pkgs.qbittorrent + pkgs.protonplus + ]; + }; + + programs = { + steam = { + enable = true; + }; + + gamemode.enable = true; + gamescope.enable = true; + + coolercontrol = { + enable = true; + nvidiaSupport = true; + }; + }; + }; +} diff --git a/modules/hm/programs/hypr/default.nix b/modules/programs/hypr/default.nix similarity index 93% rename from modules/hm/programs/hypr/default.nix rename to modules/programs/hypr/default.nix index fc2610c..28eb9b4 100644 --- a/modules/hm/programs/hypr/default.nix +++ b/modules/programs/hypr/default.nix @@ -1,6 +1,7 @@ -_: { +{ imports = [ ./land + ./idle.nix ./lock.nix ./paper.nix diff --git a/modules/programs/hypr/idle.nix b/modules/programs/hypr/idle.nix new file mode 100644 index 0000000..1f6e133 --- /dev/null +++ b/modules/programs/hypr/idle.nix @@ -0,0 +1,62 @@ +{ + lib, + lib', + inputs, + pkgs, + config, + ... +}: let + inherit (lib'.generators) toHyprConf; + inherit (config.local.systemVars) username; + inherit (inputs.hypridle.packages.${pkgs.system}) hypridle; + + hyprlock = "${inputs.hyprlock.packages.${pkgs.system}.hyprlock}/bin/hyprlock"; +in { + config = lib.mkIf config.local.modules.hyprland.enable { + hjem.users.${username} = { + packages = [hypridle]; + files = { + ".config/hypr/hypridle.conf".text = toHyprConf { + attrs = { + general = { + lock_cmd = "pidof ${hyprlock} || ${hyprlock}"; + unlock_cmd = "pkill --signal SIGUSR1 ${hyprlock}"; + before_sleep_cmd = "loginctl lock-session"; + after_sleep_cmd = "hyprctl dispatch dpms on"; + }; + + listener = [ + { + timeout = 300; # 5m + on-timeout = "loginctl lock-session"; + } + { + timeout = 330; # 5.5m + on-timeout = "hyprctl dipsatch dpms off"; + on-resume = "hyprctl dispatch dpms on"; + } + { + timeout = 600; # 10m + on-timeout = "systemctl suspend"; + } + ]; + }; + }; + }; + }; + # needed when using uwsm as the session manager + systemd.user.services.hypridle = { + name = "hypridle"; + after = ["graphical-session.target"]; + description = "Hyprland's Idle Daemon"; + wantedBy = ["graphical-session.target"]; + restartTriggers = ["${config.hjem.users.${username}.files.".config/hypr/hypridle.conf".text}"]; + serviceConfig = { + Type = "exec"; + ExecStart = "${hypridle}/bin/hypridle"; + Restart = "on-failure"; + Slice = "background-graphical.slice"; + }; + }; + }; +} diff --git a/modules/programs/hypr/land/binds.nix b/modules/programs/hypr/land/binds.nix new file mode 100644 index 0000000..c9bd8fc --- /dev/null +++ b/modules/programs/hypr/land/binds.nix @@ -0,0 +1,77 @@ +lib: let + # thanks https://github.com/fufexan/dotfiles/blob/c0b3c77d95ce1f574a87e7f7ead672ca0d951245/home/programs/wayland/hyprland/binds.nix#L16-L20 + toggle = program: uwsm: let + prog = builtins.substring 0 14 program; + in "pkill ${prog} || ${lib.optionalString uwsm "uwsm app -- "} ${program}"; + runOnce = program: "pgrep ${program} || uwsm app -- ${program}"; + run = program: "uwsm app -- ${program}"; +in { + "$mod" = "SUPER"; + bindr = [ + "$mod, SUPER_L, exec, ${toggle "anyrun" false}" + ]; + bind = [ + "$mod, Return, exec, ${run "ghostty"}" + "$mod, n, exec, ${run "neovide"}" + "$mod, w, exec, ${run "firefox"}" + ", Print, exec, ${runOnce "grimblast"} --notify --cursor copysave output" + "$mod, q, killactive" + "$mod SHIFT, q, exec, loginctl terminate-user ''" + "$mod, period, exec, ${toggle "walker -m emojis" false}" # not using uwsm as it already runs as a service + "CTRL, Print, exec, ${runOnce "grimblast"} --notify --cursor --freeze copysave area" + + "$mod, h, movefocus, l" + "$mod, j, movefocus, d" + "$mod, k, movefocus, u" + "$mod, l, movefocus, r" + + "$mod SHIFT, h, movewindow, l" + "$mod SHIFT, j, movewindow, d" + "$mod SHIFT, k, movewindow, u" + "$mod SHIFT, l, movewindow, r" + + "$mod, 1, workspace, 1" + "$mod, 2, workspace, 2" + "$mod, 3, workspace, 3" + "$mod, 4, workspace, 4" + "$mod, 5, workspace, 5" + "$mod, 6, workspace, 6" + "$mod, 7, workspace, 7" + "$mod, 8, workspace, 8" + "$mod, 9, workspace, 9" + "$mod, 0, workspace, 10" + + "$mod SHIFT, 1, movetoworkspacesilent, 1" + "$mod SHIFT, 2, movetoworkspacesilent, 2" + "$mod SHIFT, 3, movetoworkspacesilent, 3" + "$mod SHIFT, 4, movetoworkspacesilent, 4" + "$mod SHIFT, 5, movetoworkspacesilent, 5" + "$mod SHIFT, 6, movetoworkspacesilent, 6" + "$mod SHIFT, 7, movetoworkspacesilent, 7" + "$mod SHIFT, 8, movetoworkspacesilent, 8" + "$mod SHIFT, 9, movetoworkspacesilent, 9" + "$mod SHIFT, 0, movetoworkspacesilent, 10" + + "$mod, t, togglefloating" + ", F11, fullscreen, 0" + "$mod, f, fullscreen, 1" + + "$mod, e, togglespecialworkspace, file_manager_tui" + "$mod SHIFT, e, togglespecialworkspace, file_manager_gui" + + ", XF86PowerOff, exec, ${toggle "wlogout" true}" + ]; + + bindel = [ + ", XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+" + ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" + ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle" + + ", XF86MonBrightnessUp, exec, brillo -q -u 300000 -A 5" + ", XF86MonBrightnessDown, exec, brillo -q -u 300000 -U 5" + ", XF86AudioMedia, exec, XDG_CURRENT_DESKTOP=gnome gnome-control-center" + ]; + binde = [ + "$mod Alt, l, exec, loginctl lock-session" + ]; +} diff --git a/modules/programs/hypr/land/default.nix b/modules/programs/hypr/land/default.nix new file mode 100644 index 0000000..8646773 --- /dev/null +++ b/modules/programs/hypr/land/default.nix @@ -0,0 +1,167 @@ +{ + lib, + lib', + inputs, + pkgs, + config, + ... +}: let + inherit (builtins) toString; + inherit (lib) mkIf; + inherit (lib'.generators) toHyprConf; + inherit (config.local.systemVars) username; + + styleCfg = config.local.style; + gnomeControlCenter = pkgs.gnome-control-center.overrideAttrs (old: { + postInstall = + old.postInstall + + '' + dir=$out/share/applications + for panel in $dir/* + do + [ "$panel" = "$dir/gnome-network-panel.desktop" ] && continue + [ "$panel" = "$dir/gnome-bluetooth-panel.desktop" ] && continue + [ "$panel" = "$dir/gnome-wifi-panel.desktop" ] && continue + [ "$panel" = "$dir/gnome-wwan-panel.desktop" ] && continue + [ "$panel" = "$dir/gnome-sharing-panel.desktop" ] && continue + [ "$panel" = "$dir/gnome-wacom-panel.desktop" ] && continue + rm "$panel" + done + ''; + }); +in { + config = mkIf config.local.modules.hyprland.enable { + environment.systemPackages = [ + inputs.hyprland-qtutils.packages.${pkgs.system}.default + ]; + + programs.hyprland = { + enable = true; + package = inputs.hyprland.packages.${pkgs.system}.hyprland; + portalPackage = inputs.hyprland.packages.${pkgs.system}.xdg-desktop-portal-hyprland; + withUWSM = true; + systemd.setPath.enable = true; + }; + + # copied from https://github.com/linyinfeng/dotfiles/blob/91b0363b093303f57885cbae9da7f8a99bbb4432/nixos/profiles/graphical/niri/default.nix#L17-L29 + security.pam.services.hyprlock.text = mkIf config.services.fprintd.enable '' + account required pam_unix.so + + # check passwork before fprintd + auth sufficient pam_unix.so try_first_pass likeauth + auth sufficient ${pkgs.fprintd}/lib/security/pam_fprintd.so + auth required pam_deny.so + + password sufficient pam_unix.so nullok yescrypt + + session required pam_env.so conffile=/etc/pam/environment readenv=0 + session required pam_unix.so + ''; + + hjem.users.${username} = { + packages = [ + inputs.hyprwm-contrib.packages.${pkgs.system}.grimblast + gnomeControlCenter + ]; + files.".config/hypr/hyprland.conf".text = toHyprConf { + attrs = + { + xwayland = { + force_zero_scaling = true; + }; + + env = [ + "GDK_SCALE,1" + ]; + + cursor = { + no_hardware_cursors = 1; + }; + + monitor = [ + "eDP-1, preferred, auto, 1.33" + ]; + workspace = [ + "special:terminal, on-created-empty:foot" + "special:mixer_gui, on-created-empty:pavucontrol" + "special:file_manager_gui, on-created-empty:nautilus" + "special:file_manager_tui, on-created-empty:foot -- yazi" + ]; + + windowrulev2 = [ + # fixes fullscreen windows (mostly games) + "stayfocused, initialtitle:^()$, initialclass:^(steam)$" + "minsize 1 1, initialtitle:^()$, initialclass:^(steam)$" + "maximize, initialtitle:^(\S+)$, initialclass:^(steamwebhelper)$" + + "immediate, initialclass:^(steam_app_)(.*)$" + "fullscreen, initialclass:^(steam_app_)(.*)$" + + # inhibit idle on every fullscreen app except games + "idleinhibit always, fullscreen:1,!initialclass:^(steam_app_)(.*)$" + ]; + + render = { + explicit_sync = 1; + explicit_sync_kms = 1; + expand_undersized_textures = false; + }; + + bezier = "overshot, 0.05, 0.9, 0.1, 1.1"; + + animations = { + enabled = true; + animation = [ + "windows, 1, 5, overshot" + "windowsOut, 1, 5, default, popin 80%" + "windowsMove, 1, 5, default, popin 80%" + "fade, 1, 5, default" + "border, 1, 5, default" + "borderangle, 0, 8, default" + "workspaces, 0" + "specialWorkspace, 0" + ]; + }; + + input = { + kb_options = "compose:ralt"; + touchpad = { + natural_scroll = true; + scroll_factor = 0.8; + tap-to-click = true; + clickfinger_behavior = true; + }; + }; + + gestures = { + workspace_swipe = true; + workspace_swipe_direction_lock = false; + workspace_swipe_cancel_ratio = 0.15; + }; + + misc = { + force_default_wallpaper = 0; + disable_hyprland_logo = true; + middle_click_paste = false; + }; + } + // lib.optionalAttrs styleCfg.enable { + env = [ + "HYPRCURSOR_THEME,${styleCfg.cursorTheme.name}" + "HYPRCURSOR_SIZE,${toString styleCfg.cursorTheme.size}" + "XCURSOR_SIZE,${toString styleCfg.cursorTheme.size}" + ]; + general = { + border_size = 4; + "col.active_border" = "rgb(${lib.removePrefix "#" styleCfg.scheme.palette.base0E})"; + }; + decoration = { + rounding = 10; + blur.enabled = true; + }; + } + // import ./binds.nix lib; + }; + }; + }; +} diff --git a/modules/programs/hypr/lock.nix b/modules/programs/hypr/lock.nix new file mode 100644 index 0000000..ae1bfba --- /dev/null +++ b/modules/programs/hypr/lock.nix @@ -0,0 +1,119 @@ +{ + lib, + lib', + inputs, + pkgs, + config, + ... +}: let + inherit (lib) mkIf; + inherit (lib'.generators) toHyprConf; + inherit (config.local.systemVars) username; + inherit (inputs.hyprlock.packages.${pkgs.system}) hyprlock; + + styleCfg = config.local.style; + rgbaPalette = builtins.mapAttrs (_: c: (lib'.rgba c 1)) styleCfg.scheme.palette; +in { + config = mkIf config.local.modules.hyprland.enable { + hjem.users.${username} = { + packages = [hyprlock]; + files = { + ".config/hypr/hyprlock.conf".text = toHyprConf { + attrs = + { + general = { + disable_loading_bar = true; + hide_cursor = true; + }; + } + // (with rgbaPalette; + lib.optionalAttrs styleCfg.enable { + background = [ + { + path = "screenshot"; + blur_passes = 3; + blur_size = 8; + } + ]; + + label = [ + { + monitor = ""; + text = "Layout: $LAYOUT"; + font_size = 25; + color = base05; + + position = "30, -30"; + halign = "left"; + valign = "top"; + } + { + monitor = ""; + text = "$TIME"; + font_size = 90; + color = base05; + + position = "-30, 0"; + halign = "right"; + valign = "top"; + } + { + monitor = ""; + text = "cmd[update:43200000] date +\"%A, %d %B %Y\""; + font_size = 25; + color = base05; + + position = "-30, -150"; + halign = "right"; + valign = "top"; + } + ]; + + image = { + monitor = ""; + path = "${styleCfg.avatar}"; # Replace with your avatar path + size = 100; + border_color = base0D; + + position = "0, 75"; + halign = "center"; + valign = "center"; + }; + + input-field = [ + { + monitor = ""; + + size = "300, 60"; + outline_thickness = 4; + dots_size = 0.2; + dots_spacing = 0.2; + dots_center = true; + + outer_color = base0D; + inner_color = base02; + font_color = base05; + + fade_on_empty = false; + + # the span elements still use #RRGGBB, so we use scheme directly + placeholder_text = "󰌾 Logged in as $USER"; + + hide_input = false; + check_color = base0D; + fail_color = base08; + + fail_text = "$FAIL ($ATTEMPTS)"; + capslock_color = base0E; + + position = "0, -47"; + halign = "center"; + valign = "center"; + } + ]; + }); + }; + }; + }; + }; +} diff --git a/modules/programs/hypr/paper.nix b/modules/programs/hypr/paper.nix new file mode 100644 index 0000000..c2d29b9 --- /dev/null +++ b/modules/programs/hypr/paper.nix @@ -0,0 +1,42 @@ +{ + lib, + lib', + inputs, + pkgs, + config, + ... +}: let + inherit (lib'.generators) toHyprConf; + inherit (config.local.systemVars) username; + inherit (config.local.style) wallpaper; + inherit (inputs.hyprpaper.packages.${pkgs.system}) hyprpaper; +in { + config = lib.mkIf config.local.modules.hyprland.enable { + hjem.users.${username} = { + packages = [hyprpaper]; + files = { + ".config/hypr/hyprpaper.conf".text = toHyprConf { + attrs = { + preload = ["${wallpaper}"]; + wallpaper = [", ${wallpaper}"]; + }; + }; + }; + }; + + systemd.user.services.hyprpaper = { + name = "hyprpaper"; + after = ["graphical-session.target"]; + description = "Fast, IPC-controlled wallpaper utility for Hyprland."; + documentation = ["https://wiki.hyprland.org/Hypr-Ecosystem/hyprpaper/"]; + wantedBy = ["graphical-session.target"]; + restartTriggers = ["${config.hjem.users.${username}.files.".config/hypr/hyprpaper.conf".text}"]; + serviceConfig = { + Type = "simple"; + ExecStart = "${hyprpaper}/bin/hyprpaper"; + Restart = "on-failure"; + Slice = "background-graphical.slice"; + }; + }; + }; +} diff --git a/modules/hm/programs/media/default.nix b/modules/programs/media/default.nix similarity index 54% rename from modules/hm/programs/media/default.nix rename to modules/programs/media/default.nix index 653170e..601ba70 100644 --- a/modules/hm/programs/media/default.nix +++ b/modules/programs/media/default.nix @@ -1,17 +1,18 @@ { lib, pkgs, - osConfig, + config, ... -}: { +}: let + inherit (config.local.systemVars) username; +in { imports = [ ./tidal-hifi.nix ./zathura.nix ]; - config = lib.mkIf osConfig.local.profiles.desktop.enable { - programs.mpv.enable = true; - home.packages = [ + config = lib.mkIf config.local.profiles.desktop.enable { + hjem.users.${username}.packages = [ pkgs.gnome-calculator pkgs.gthumb pkgs.spotify diff --git a/modules/programs/media/tidal-hifi.nix b/modules/programs/media/tidal-hifi.nix new file mode 100644 index 0000000..2080e85 --- /dev/null +++ b/modules/programs/media/tidal-hifi.nix @@ -0,0 +1,201 @@ +{ + lib, + config, + pkgs, + ... +}: let + inherit (config.local.systemVars) username; + styleCfg = config.local.style; +in { + config = lib.mkIf config.local.profiles.desktop.enable { + hjem.users.${username} = { + packages = [pkgs.tidal-hifi]; + files = { + # based on https://github.com/rose-pine/tidal. adapted to work with base16 colors. + "tidal-hifi/themes/base16.css".text = with styleCfg.scheme.palette; + lib.mkIf styleCfg.enable '' + :root { + --glass-white-1: ${base05}; + --glass-white-1-hover: ${base06}; + --glass-white-2: ${base07}; + --glass-white-2-hover: ${base08}; + --glass-white-3: ${base07}; + --glass-white-4: ${base04}; + --glass-white-5: ${base04}; + --glass-white-6: ${base05}; + --snow-white: ${base07}; + --snow-white-hover: ${base08}; + --gray-4: ${base00}; + --gray-5: ${base02}; + --gray-6: ${base03}; + --gray-7: ${base04}; + --cyan-blue: ${base0D}; + --cyan-blue-hover: ${base0C}; + --glass-cyan-1: ${base04}; + --glass-cyan-2: ${base05}; + --glass-cyan-3: ${base06}; + --master-gold: ${base0E}; + --master-gold-hover: ${base08}; + --glass-master-gold: ${base05}; + --glass-master-gold-2: ${base06}; + --raspberry-pink: ${base08}; + --raspberry-pink-lighter: ${base09}; + --black: ${base00}; + --midnight-black: ${base00}; + --controls-overlay: ${base03}; + --duration-overlay: ${base02}; + --background-dark: ${base00}; + --hoverLighten: brightness(130%); + --hoverDarken: brightness(70%); + --hoverTransition: filter 0.15s ease; + --scrollbar-track: ${base03}; + --scrollbar-thumb: ${base00}; + --lighten-25: ${base01}; + --red-alert: ${base08}; + --user-profile-linear-gradient: linear-gradient(160deg,${base0D} 1.22%,${base0C} 40.51%,${base00} 79.07%); + --wave-border-radius--none: 0px; + --wave-border-radius--extra-small: 4px; + --wave-border-radius--small: 8px; + --wave-border-radius--regular: 12px; + --wave-border-radius--full: 1000px; + --wave-color-material-dark: ${base00}80; + --wave-color-material-light: ${base04}33; + --wave-color-opacity-accent-dark-ultra-thick: ${base0C}cc; + --wave-color-opacity-accent-darkest-ultra-thick: ${base01}; + --wave-color-opacity-accent-fill-regular: ${base0C}66; + --wave-color-opacity-accent-fill-thin: ${base0C}33; + --wave-color-opacity-accent-fill-ultra-thick: ${base0C}cc; + --wave-color-opacity-accent-fill-ultra-thin: ${base0C}1a; + --wave-color-opacity-base-bright-thick: ${base00}99; + --wave-color-opacity-base-bright-thin: ${base00}33; + --wave-color-opacity-base-bright-transparent: ${base00}; + --wave-color-opacity-base-bright-ultra-thick: ${base00}cc; + --wave-color-opacity-base-brighter-ultra-thick: ${base01}cc; + --wave-color-opacity-base-brightest-regular: ${base02}66; + --wave-color-opacity-base-brightest-thin: ${base02}33; + --wave-color-opacity-base-brightest-ultra-thin: ${base02}1a; + --wave-color-opacity-base-fill-regular: ${base00}66; + --wave-color-opacity-base-fill-thick: ${base00}99; + --wave-color-opacity-base-fill-thin: ${base00}33; + --wave-color-opacity-base-fill-transparent: #000; + --wave-color-opacity-base-fill-ultra-thick: ${base00}cc; + --wave-color-opacity-base-fill-ultra-thin: ${base00}1a; + --wave-color-opacity-contrast-fill-regular: ${base07}66; + --wave-color-opacity-contrast-fill-thick: ${base07}99; + --wave-color-opacity-contrast-fill-thin: ${base07}33; + --wave-color-opacity-contrast-fill-transparent: #fff; + --wave-color-opacity-contrast-fill-ultra-thick: ${base07}cc; + --wave-color-opacity-contrast-fill-ultra-thin: ${base07}1a; + --wave-color-opacity-rainbow-blue-thin: ${base0D}33; + --wave-color-opacity-rainbow-yellow-fill-regular: ${base0E}66; + --wave-color-opacity-rainbow-yellow-fill-thin: ${base0E}33; + --wave-color-opacity-rainbow-yellow-fill-ultra-thick: ${base0E}cc; + --wave-color-opacity-rainbow-yellow-fill-ultra-thin: ${base0E}1a; + --wave-color-opacity-special-fill-regular: ${base0E}66; + --wave-color-opacity-special-fill-thin: ${base0E}33; + --wave-color-opacity-special-fill-ultra-thick: ${base0E}cc; + --wave-color-opacity-special-fill-ultra-thin: ${base0E}1a; + --wave-color-services-facebook: ${base0D}; + --wave-color-services-instagram-red: ${base08}; + --wave-color-services-mtn: ${base0E}; + --wave-color-services-musix-orange: ${base09}; + --wave-color-services-musix-pink: ${base0E}; + --wave-color-services-play: ${base0C}; + --wave-color-services-plus: ${base0B}; + --wave-color-services-snapchat: ${base0A}; + --wave-color-services-sprint: ${base0A}; + --wave-color-services-t-mobile: ${base08}; + --wave-color-services-tik-tok-blue: ${base0D}; + --wave-color-services-tik-tok-red: ${base08}; + --wave-color-services-twitter: ${base0D}; + --wave-color-services-viacom-1: ${base0D}; + --wave-color-services-viacom-2: ${base0E}; + --wave-color-services-viacom-3: ${base08}; + --wave-color-services-viacom-4: ${base09}; + --wave-color-services-viacom-5: ${base0E}; + --wave-color-services-vivo: ${base0E}; + --wave-color-services-vodafone: ${base08}; + --wave-color-services-waze: ${base0D}; + --wave-color-solid-accent-bright: ${base0D}; + --wave-color-solid-accent-brighter: ${base0D}; + --wave-color-solid-accent-dark: ${base0C}; + --wave-color-solid-accent-darker: ${base01}; + --wave-color-solid-accent-darkest: ${base00}; + --wave-color-solid-accent-fill: ${base0D}; + --wave-color-solid-base-bright: ${base00}; + --wave-color-solid-base-brighter: ${base01}; + --wave-color-solid-base-brightest: ${base02}; + --wave-color-solid-base-fill: ${base00}; + --wave-color-solid-contrast-dark: ${base07}; + --wave-color-solid-contrast-darker: ${base06}; + --wave-color-solid-contrast-darkest: ${base05}; + --wave-color-solid-contrast-fill: ${base07}; + --wave-color-solid-rainbow-blue-fill: ${base0D}; + --wave-color-solid-rainbow-green-brighter: ${base0D}; + --wave-color-solid-rainbow-green-dark: ${base0C}; + --wave-color-solid-rainbow-green-darker: ${base0C}; + --wave-color-solid-rainbow-green-darkest: ${base01}; + --wave-color-solid-rainbow-green-fill: ${base0D}; + --wave-color-solid-rainbow-orange-fill: ${base09}; + --wave-color-solid-rainbow-purple-fill: ${base0E}; + --wave-color-solid-rainbow-red-bright: ${base08}; + --wave-color-solid-rainbow-red-brighter: ${base08}; + --wave-color-solid-rainbow-red-dark: ${base09}; + --wave-color-solid-rainbow-red-darker: ${base01}; + --wave-color-solid-rainbow-red-darkest: ${base00}; + --wave-color-solid-rainbow-red-fill: ${base08}; + --wave-color-solid-rainbow-yellow-bright: ${base0A}; + --wave-color-solid-rainbow-yellow-brighter: ${base06}; + --wave-color-solid-rainbow-yellow-dark: ${base09}; + --wave-color-solid-rainbow-yellow-darker: ${base01}; + --wave-color-solid-rainbow-yellow-darkest: ${base00}; + --wave-color-solid-rainbow-yellow-fill: ${base0A}; + --wave-color-solid-special-bright: ${base09}; + --wave-color-solid-special-brighter: ${base06}; + --wave-color-solid-special-dark: ${base09}; + --wave-color-solid-special-darker: ${base09}; + --wave-color-solid-special-darkest: ${base00}; + --wave-color-solid-special-fill: ${base0E}; + --wave-color-solid-warning-bright: ${base08}; + --wave-color-solid-warning-brighter: ${base09}; + --wave-color-solid-warning-dark: ${base09}; + --wave-color-solid-warning-darker: ${base01}; + --wave-color-solid-warning-darkest: ${base00}; + --wave-color-solid-warning-fill: ${base08}; + --wave-color-text-disabled: ${base02}; + --wave-color-text-link: ${base0D}; + --wave-color-text-main: ${base07}; + --wave-color-text-placeholder: ${base02}; + --wave-color-text-secondary: ${base06}; + --wave-color-text-tertiary: ${base05}; + --wave-font-weight--bold: 700; + --wave-font-weight--demi: 600; + --wave-font-weight--medium: 500; + --wave-opacity--ultra-thin: .05; + --wave-opacity--thin: .1; + --wave-opacity--regular: .4; + --wave-opacity--thick: .6; + --wave-opacity--ultra-thick: .8; + --wave-spacing--extra-extra-large: 64px; + --wave-spacing--extra-large: 40px; + --wave-spacing--large: 24px; + --wave-spacing--medium: 20px; + --wave-spacing--regular: 16px; + --wave-spacing--small: 12px; + --wave-spacing--extra-small: 8px; + --wave-spacing--extra-extra-small: 4px; + } + + .wave-text-caption-demi, .tidal-ui__v-stack { + color: var(--wave-color-solid-accent-bright) !important; + } + + .tidal-ui__icon { + fill: var(--wave-color-solid-rainbow-purple-fill) !important; + stroke: var(--wave-color-solid-rainbow-purple-fill) !important; + } + ''; + }; + }; + }; +} diff --git a/modules/programs/media/zathura.nix b/modules/programs/media/zathura.nix new file mode 100644 index 0000000..3a317ca --- /dev/null +++ b/modules/programs/media/zathura.nix @@ -0,0 +1,31 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (config.local.systemVars) username; + toZathura = attrs: + builtins.concatStringsSep "\n" + (lib.mapAttrsToList (option: value: "set ${option} \"${toString value}\"") attrs); +in { + config = lib.mkIf config.local.profiles.desktop.enable { + hjem.users.${username} = { + packages = [pkgs.zathura]; + files = { + ".config/zathura/zathurarc".text = toZathura { + font = "sans-serif 12"; + selection-notification = true; + + selection-clipboard = "clipboard"; + adjust-open = "best-fit"; + pages-per-row = "1"; + scroll-page-aware = "true"; + scroll-full-overlap = "0.01"; + scroll-step = "100"; + zoom-min = "10"; + }; + }; + }; + }; +} diff --git a/modules/programs/misc.nix b/modules/programs/misc.nix new file mode 100644 index 0000000..9cafe65 --- /dev/null +++ b/modules/programs/misc.nix @@ -0,0 +1,42 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (builtins) toJSON; + inherit (lib) mkIf; + inherit (config.local.systemVars) username; +in { + config = mkIf config.local.profiles.desktop.enable { + hjem.users.${username} = { + packages = with pkgs; [ + cinny-desktop + entr + fastfetch + fractal + fzf + geary + hyfetch + imhex + logisim-evolution + mission-center + nautilus + obsidian + playerctl + proton-pass + simple-scan + wl-clipboard + ]; + + files = { + ".config/hyfetch.json".text = toJSON { + preset = "nonbinary"; + mode = "rgb"; + backend = "fastfetch"; + color_align.mode = "horizontal"; + }; + }; + }; + }; +} diff --git a/modules/nix/default.nix b/modules/programs/terminal/default.nix similarity index 52% rename from modules/nix/default.nix rename to modules/programs/terminal/default.nix index 8c116a5..f260146 100644 --- a/modules/nix/default.nix +++ b/modules/programs/terminal/default.nix @@ -1,7 +1,7 @@ -{ +_: { imports = [ - ./core + ./emulators ./programs - ./services + ./shell ]; } diff --git a/modules/hm/programs/terminal/emulators/default.nix b/modules/programs/terminal/emulators/default.nix similarity index 100% rename from modules/hm/programs/terminal/emulators/default.nix rename to modules/programs/terminal/emulators/default.nix diff --git a/modules/programs/terminal/emulators/foot.nix b/modules/programs/terminal/emulators/foot.nix new file mode 100644 index 0000000..ada1641 --- /dev/null +++ b/modules/programs/terminal/emulators/foot.nix @@ -0,0 +1,56 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (lib) optionalAttrs; + inherit (config.local.systemVars) username; + + styleCfg = config.local.style; + # because someone thought this was a great idea: https://github.com/tinted-theming/schemes/commit/61058a8d2e2bd4482b53d57a68feb56cdb991f0b + palette = builtins.mapAttrs (_: color: lib.removePrefix "#" color) styleCfg.scheme.palette; + toINI = lib.generators.toINI {}; + mkColors = palette: { + background = palette.base00; + foreground = palette.base05; + regular0 = palette.base00; + regular1 = palette.base08; + regular2 = palette.base0B; + regular3 = palette.base0A; + regular4 = palette.base0D; + regular5 = palette.base0E; + regular6 = palette.base0C; + regular7 = palette.base05; + bright0 = palette.base02; + bright1 = palette.base08; + bright2 = palette.base0B; + bright3 = palette.base0A; + bright4 = palette.base0D; + bright5 = palette.base0E; + bright6 = palette.base0C; + bright7 = palette.base07; + "16" = palette.base09; + "17" = palette.base0F; + "18" = palette.base01; + "19" = palette.base02; + "20" = palette.base04; + "21" = palette.base06; + }; +in { + config = lib.mkIf config.local.modules.hyprland.enable { + hjem.users.${username} = { + packages = [pkgs.foot]; + files = { + ".config/foot/foot.ini".text = toINI { + main = { + term = "xterm-256color"; + font = "monospace:size=14"; + shell = "${pkgs.nushell}/bin/nu"; + }; + colors = optionalAttrs styleCfg.enable (mkColors palette); + }; + }; + }; + }; +} diff --git a/modules/programs/terminal/emulators/ghostty.nix b/modules/programs/terminal/emulators/ghostty.nix new file mode 100644 index 0000000..f3397f2 --- /dev/null +++ b/modules/programs/terminal/emulators/ghostty.nix @@ -0,0 +1,114 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (lib) mapAttrs mkIf mkMerge optionalAttrs removePrefix; + inherit (config.local.systemVars) username; + toINI = lib.generators.toINIWithGlobalSection {listsAsDuplicateKeys = true;}; + styleCfg = config.local.style; + + prefix = "ctrl+a"; + + mkGhosttyTheme = palette: let + colors = mapAttrs (_: value: removePrefix "#" value) palette; + in { + palette = [ + "0=#${colors.base00}" + "1=#${colors.base08}" + "2=#${colors.base0B}" + "3=#${colors.base0A}" + "4=#${colors.base0D}" + "5=#${colors.base0E}" + "6=#${colors.base0C}" + "7=#${colors.base05}" + "8=#${colors.base02}" + "9=#${colors.base08}" + "10=#${colors.base0B}" + "11=#${colors.base0A}" + "12=#${colors.base0D}" + "13=#${colors.base0E}" + "14=#${colors.base0C}" + "15=#${colors.base07}" + "16=#${colors.base09}" + "17=#${colors.base0F}" + "18=#${colors.base01}" + "19=#${colors.base02}" + "20=#${colors.base04}" + "21=#${colors.base06}" + ]; + background = colors.base00; + foreground = colors.base05; + cursor-color = colors.base06; + selection-background = colors.base02; + selection-foreground = colors.base05; + }; +in { + config = mkIf config.local.profiles.desktop.enable { + hjem.users.${username} = { + files = mkMerge [ + { + ".config/ghostty/config".text = + toINI + { + globalSection = { + font-family = ["monospace" "Symbols Nerd Font"]; + font-size = 14; + gtk-single-instance = true; + gtk-adwaita = false; + confirm-close-surface = false; + + keybind = [ + "${prefix}>c=new_tab" + "${prefix}>p=move_tab:-1" + "${prefix}>n=move_tab:1" + + "${prefix}>\\=new_split:right" + "${prefix}>-=new_split:down" + "${prefix}>h=goto_split:left" + "${prefix}>j=goto_split:bottom" + "${prefix}>k=goto_split:top" + "${prefix}>l=goto_split:right" + "${prefix}>shift+h=resize_split:left,10" + "${prefix}>shift+j=resize_split:down,10" + "${prefix}>shift+k=resize_split:up,10" + "${prefix}>shift+l=resize_split:right,11" + "${prefix}>z=toggle_split_zoom" + ]; + + adw-toolbar-style = "flat"; + gtk-tabs-location = "bottom"; + gtk-wide-tabs = false; + window-decoration = false; + + linux-cgroup = "always"; + }; + }; + } + (optionalAttrs styleCfg.enable + { + ".config/ghostty/config".text = toINI { + globalSection.theme = "base16"; + }; + ".config/ghostty/themes/base16".text = toINI {globalSection = mkGhosttyTheme styleCfg.scheme.palette;}; + }) + ]; + packages = [pkgs.ghostty]; + }; + + systemd.user.services.ghosttyd = { + description = "ghosttyd™"; + partOf = ["graphical-session.target"]; + after = ["graphical-session.target"]; + wantedBy = ["graphical-session.target"]; + + serviceConfig = { + Type = "simple"; + ExecStart = "${pkgs.ghostty}/bin/ghostty --initial-window=false --quit-after-last-window-closed=false"; + Slice = "background-graphical.slice"; + Restart = "on-failure"; + }; + }; + }; +} diff --git a/modules/programs/terminal/programs/bat.nix b/modules/programs/terminal/programs/bat.nix new file mode 100644 index 0000000..83cdc20 --- /dev/null +++ b/modules/programs/terminal/programs/bat.nix @@ -0,0 +1,31 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (config.local.systemVars) username; + inherit (config.local.homeVars) userEnvFile; + toConf = attrs: + builtins.concatStringsSep "\n" + (lib.mapAttrsToList (option: value: "--${option}=\"${value}\"") attrs); +in { + config = lib.mkIf config.local.profiles.desktop.enable { + hjem.users.${username} = { + packages = [ + pkgs.bat + pkgs.bat-extras.batman + ]; + files = { + ".config/bat/config".text = toConf { + theme = "base16"; + }; + + ".config/environment.d/${userEnvFile}.conf".text = '' + MANPAGER = "sh -c 'col -bx | bat --language man' "; + MANROFFOPT = "-c"; + ''; + }; + }; + }; +} diff --git a/modules/hm/programs/terminal/programs/default.nix b/modules/programs/terminal/programs/default.nix similarity index 55% rename from modules/hm/programs/terminal/programs/default.nix rename to modules/programs/terminal/programs/default.nix index 8b56212..c308bbe 100644 --- a/modules/hm/programs/terminal/programs/default.nix +++ b/modules/programs/terminal/programs/default.nix @@ -3,10 +3,7 @@ ./bat.nix ./direnv.nix ./git.nix - ./gnupg.nix ./misc.nix - ./nix-index.nix - ./tmux.nix - ./yazi.nix + # ./tmux.nix ]; } diff --git a/modules/programs/terminal/programs/direnv.nix b/modules/programs/terminal/programs/direnv.nix new file mode 100644 index 0000000..28edce7 --- /dev/null +++ b/modules/programs/terminal/programs/direnv.nix @@ -0,0 +1,9 @@ +{ + lib, + config, + ... +}: { + config = lib.mkIf config.local.profiles.desktop.enable { + programs.direnv.enable = true; + }; +} diff --git a/modules/programs/terminal/programs/git.nix b/modules/programs/terminal/programs/git.nix new file mode 100644 index 0000000..f044ff3 --- /dev/null +++ b/modules/programs/terminal/programs/git.nix @@ -0,0 +1,29 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (config.local.systemVars) username; + inherit (config.local.homeVars) signingKey; + toINI = lib.generators.toINI {}; +in { + config = lib.mkIf config.local.profiles.desktop.enable { + hjem.users.${username} = { + packages = with pkgs; [git lazygit]; + files = { + ".config/git/config".text = toINI { + user = { + name = "Anthony Rodriguez"; + email = "anthony@nezia.dev"; + signingkey = signingKey; + }; + commit.gpgsign = true; + tag.gpgsign = true; + gpg.format = "ssh"; + push.autoSetupRemote = true; + }; + }; + }; + }; +} diff --git a/modules/programs/terminal/programs/misc.nix b/modules/programs/terminal/programs/misc.nix new file mode 100644 index 0000000..3e64d53 --- /dev/null +++ b/modules/programs/terminal/programs/misc.nix @@ -0,0 +1,25 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (config.local.systemVars) username; +in { + config = lib.mkIf config.local.profiles.desktop.enable { + hjem.users.${username} = { + packages = with pkgs; [ + # archives + zip + unzip + unrar + + # utils + fd + file + ripgrep + yazi + ]; + }; + }; +} diff --git a/modules/hm/programs/terminal/programs/tmux.nix b/modules/programs/terminal/programs/tmux.nix similarity index 100% rename from modules/hm/programs/terminal/programs/tmux.nix rename to modules/programs/terminal/programs/tmux.nix diff --git a/modules/hm/programs/terminal/shell/default.nix b/modules/programs/terminal/shell/default.nix similarity index 76% rename from modules/hm/programs/terminal/shell/default.nix rename to modules/programs/terminal/shell/default.nix index 3910822..4612e64 100644 --- a/modules/hm/programs/terminal/shell/default.nix +++ b/modules/programs/terminal/shell/default.nix @@ -1,7 +1,7 @@ { imports = [ - ./fish.nix ./starship.nix + ./nushell.nix ./zoxide.nix ]; } diff --git a/modules/programs/terminal/shell/nushell.nix b/modules/programs/terminal/shell/nushell.nix new file mode 100644 index 0000000..bb9e7e0 --- /dev/null +++ b/modules/programs/terminal/shell/nushell.nix @@ -0,0 +1,95 @@ +# simplified version of https://raw.githubusercontent.com/Lunarnovaa/nixconf/3d13d69e9fcf072365935ee9dda719d6b0aa9bc1/modules/programs/terminal/nushell.nix +{ + lib, + config, + pkgs, + ... +}: let + inherit (config.local.systemVars) username; + inherit (lib.modules) mkIf; + + carapaceCache = "${config.hjem.users.${username}.directory}/.cache/carapace"; + starshipCache = "${config.hjem.users.${username}.directory}/.cache/starship"; + zoxideCache = "${config.hjem.users.${username}.directory}/.cache/zoxide"; +in { + config = mkIf config.local.profiles.desktop.enable { + users.users.${username}.shell = pkgs.nushell; + hjem.users.${username} = { + packages = with pkgs; [carapace nushell]; + files = { + ".config/nushell/config.nu".text = '' + # disabling the basic banner on startup + $env.config = { + show_banner: false, + edit_mode: vi, + hooks: { + pre_prompt: [{ || + if (which direnv | is-empty) { + return + } + + direnv export json | from json | default {} | load-env + if 'ENV_CONVERSIONS' in $env and 'PATH' in $env.ENV_CONVERSIONS { + $env.PATH = do $env.ENV_CONVERSIONS.PATH.from_string $env.PATH + } + }] + } + } + $env.SSH_AUTH_SOCK = $"($env.XDG_RUNTIME_DIR)/ssh-agent" + + # aliases + alias ll = ls -l + alias lg = lazygit + + alias lg = lazygit; + alias g = git; + alias gs = git status; + alias gsh = git show HEAD; + alias gshs = DELTA_FEATURES=+side-by-side git show HEAD; + alias ga = git add; + alias gaa = git add :/; + alias gap = git add -p; + alias gc = git commit; + alias gca = git commit --amend; + alias gcm = git commit --message; + alias gcf = git commit --fixup; + alias gk = git checkout; + alias gkp = git checkout -p; + alias gd = git diff; + alias gds = DELTA_FEATURES=+side-by-side git diff; + alias gdc = git diff --cached; + alias gdcs = DELTA_FEATURES=+side-by-side git diff --cached; + alias gf = git fetch; + alias gl = git log; + alias glp = git log -p; + alias glps = DELTA_FEATURES=+side-by-side git log -p; + alias gp = git push; + alias gpf = git push --force-with-lease; + alias gr = git reset; + alias gra = git reset :/; + alias grp = git reset -p; + alias gt = git stash; + alias gtp = git stash pop; + alias gu = git pull; + + # carapace init (completion engine) + source ${carapaceCache}/init.nu + # starship init + use ${starshipCache}/init.nu + # zoxide init + source ${zoxideCache}/init.nu + ''; + + ".config/nushell/env.nu".text = '' + mkdir ${carapaceCache} + mkdir ${starshipCache} + mkdir ${zoxideCache} + + carapace _carapace nushell | save -f ${carapaceCache}/init.nu + starship init nu | save -f ${starshipCache}/init.nu + zoxide init nushell | save -f ${zoxideCache}/init.nu + ''; + }; + }; + }; +} diff --git a/modules/programs/terminal/shell/starship.nix b/modules/programs/terminal/shell/starship.nix new file mode 100644 index 0000000..cc58f2c --- /dev/null +++ b/modules/programs/terminal/shell/starship.nix @@ -0,0 +1,32 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (config.local.systemVars) username; + toTOML = (pkgs.formats.toml {}).generate; +in { + config = lib.mkIf config.local.profiles.desktop.enable { + hjem.users.${username} = { + packages = [pkgs.starship]; + files = { + ".config/starship/config.toml".source = toTOML "starship config" { + add_newline = true; + directory = { + style = "bold yellow"; + }; + character = { + format = "$symbol "; + success_symbol = "[➜](bold green)"; + error_symbol = "[✗](bold red)"; + }; + cmd_duration = { + style = "yellow"; + format = "[ $duration]($style)"; + }; + }; + }; + }; + }; +} diff --git a/modules/programs/terminal/shell/zoxide.nix b/modules/programs/terminal/shell/zoxide.nix new file mode 100644 index 0000000..a183294 --- /dev/null +++ b/modules/programs/terminal/shell/zoxide.nix @@ -0,0 +1,14 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (config.local.systemVars) username; +in { + config = lib.mkIf config.local.profiles.desktop.enable { + hjem.users.${username} = { + packages = [pkgs.zoxide]; + }; + }; +} diff --git a/modules/hm/programs/waybar.nix b/modules/programs/waybar.nix similarity index 56% rename from modules/hm/programs/waybar.nix rename to modules/programs/waybar.nix index 604a98c..666d0cc 100644 --- a/modules/hm/programs/waybar.nix +++ b/modules/programs/waybar.nix @@ -1,18 +1,24 @@ { lib, pkgs, - osConfig, + config, ... }: let - styleCfg = osConfig.local.style; + inherit (lib) mkIf; + inherit (builtins) toJSON; + inherit (config.local.systemVars) username; + styleCfg = config.local.style; betterTransition = "all 0.3s cubic-bezier(.55,-0.68,.48,1.682)"; in { - config = lib.mkIf osConfig.local.modules.hyprland.enable { - programs.waybar = { - enable = true; - systemd.enable = true; - settings = { - mainBar = { + config = mkIf config.local.modules.hyprland.enable { + hjem.users.${username} = { + packages = [ + pkgs.waybar + pkgs.pavucontrol + ]; + + files = { + ".config/waybar/config".text = toJSON { layer = "top"; position = "top"; @@ -178,100 +184,109 @@ in { on-click-middle = "${pkgs.swaynotificationcenter}/bin/swaync-client --toggle-dnd --skip-wait"; }; }; - }; - style = with styleCfg.scheme.palette; '' - * { - font-family: "0xProto Nerd Font"; - font-size: 16px; - border-radius: 0px; - border: none; - min-height: 0px; - } - window#waybar { - background: rgba(0,0,0,0); - } - #workspaces { - color: ${base00}; - background: ${base01}; - margin: 4px 4px; - padding: 5px 5px; - border-radius: 16px; - } - #workspaces button { - font-weight: bold; - padding: 0px 5px; - margin: 0px 3px; - border-radius: 16px; - color: ${base00}; - background: linear-gradient(45deg, ${base08}, ${base0D}); - opacity: 0.5; - transition: ${betterTransition}; - } - #workspaces button.active { - font-weight: bold; - padding: 0px 5px; - margin: 0px 3px; - border-radius: 16px; - color: ${base00}; - background: linear-gradient(45deg, ${base08}, ${base0D}); - transition: ${betterTransition}; - opacity: 1.0; - min-width: 40px; - } - #workspaces button:hover { - font-weight: bold; - border-radius: 16px; - color: ${base00}; - background: linear-gradient(45deg, ${base08}, ${base0D}); - opacity: 0.8; - transition: ${betterTransition}; - } - tooltip { - background: ${base00}; - border: 1px solid ${base0E}; - border-radius: 12px; - } - tooltip label { - color: ${base0E}; - } - #window, #pulseaudio, #cpu, #memory, #idle_inhibitor { - font-weight: bold; - margin: 4px 0px; - margin-left: 7px; - padding: 0px 18px; - background: ${base00}; - color: ${base05}; - border-radius: 24px 10px 24px 10px; - } - #network, #battery, - #custom-swaync, #tray, #custom-power { - font-weight: bold; - background: ${base00}; - color: ${base05}; - margin: 4px 0px; - margin-right: 7px; - border-radius: 10px 24px 10px 24px; - padding: 0px 18px; - } - #clock { - font-weight: bold; - color: ${base00}; - background: linear-gradient(90deg, ${base0E}, ${base0C}); - margin: 0px; - padding: 0px 15px 0px 30px; - border-radius: 0px 0px 0px 40px; - } - ''; + ".config/waybar/style.css".text = with styleCfg.scheme.palette; + mkIf styleCfg.enable '' + * { + font-family: "0xProto Nerd Font"; + font-size: 16px; + border-radius: 0px; + border: none; + min-height: 0px; + } + window#waybar { + background: rgba(0,0,0,0); + } + #workspaces { + color: ${base00}; + background: ${base01}; + margin: 4px 4px; + padding: 5px 5px; + border-radius: 16px; + } + #workspaces button { + font-weight: bold; + padding: 0px 5px; + margin: 0px 3px; + border-radius: 16px; + color: ${base00}; + background: linear-gradient(45deg, ${base08}, ${base0D}); + opacity: 0.5; + transition: ${betterTransition}; + } + #workspaces button.active { + font-weight: bold; + padding: 0px 5px; + margin: 0px 3px; + border-radius: 16px; + color: ${base00}; + background: linear-gradient(45deg, ${base08}, ${base0D}); + transition: ${betterTransition}; + opacity: 1.0; + min-width: 40px; + } + #workspaces button:hover { + font-weight: bold; + border-radius: 16px; + color: ${base00}; + background: linear-gradient(45deg, ${base08}, ${base0D}); + opacity: 0.8; + transition: ${betterTransition}; + } + tooltip { + background: ${base00}; + border: 1px solid ${base0E}; + border-radius: 12px; + } + tooltip label { + color: ${base0E}; + } + #window, #pulseaudio, #cpu, #memory, #idle_inhibitor { + font-weight: bold; + margin: 4px 0px; + margin-left: 7px; + padding: 0px 18px; + background: ${base00}; + color: ${base05}; + border-radius: 24px 10px 24px 10px; + } + #network, #battery, + #custom-swaync, #tray, #custom-power { + font-weight: bold; + background: ${base00}; + color: ${base05}; + margin: 4px 0px; + margin-right: 7px; + border-radius: 10px 24px 10px 24px; + padding: 0px 18px; + } + #clock { + font-weight: bold; + color: ${base00}; + background: linear-gradient(90deg, ${base0E}, ${base0C}); + margin: 0px; + padding: 0px 15px 0px 30px; + border-radius: 0px 0px 0px 40px; + } + ''; + }; }; systemd.user.services.waybar = { - Unit.After = lib.mkForce "graphical-session.target"; - Service.Slice = "app-graphical.slice"; - }; + description = "Highly customizable Wayland bar for Sway and Wlroots based compositors."; + documentation = ["https://github.com/Alexays/Waybar/wiki/"]; + after = ["graphical-session.target"]; + partOf = ["graphical-session.target"]; + requisite = ["graphical-session.target"]; + wantedBy = ["graphical-session.target"]; - home.packages = [ - pkgs.pavucontrol - ]; + reloadTriggers = ["${config.hjem.users.${username}.files.".config/waybar/config".text}"]; + serviceConfig = { + ExecStart = "${pkgs.waybar}/bin/waybar"; + ExecReload = "kill -SIGUSR2 $MAINPID"; + Restart = "on-failure"; + Slice = "app-graphical.slice"; + }; + }; }; } diff --git a/modules/programs/wlogout.nix b/modules/programs/wlogout.nix new file mode 100644 index 0000000..568158f --- /dev/null +++ b/modules/programs/wlogout.nix @@ -0,0 +1,75 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (config.local.systemVars) username; + + mkLayout = items: let + formatItem = item: '' + { + "label" : "${item.label}", + "action" : "${item.action}", + "text" : "${item.text}", + "keybind" : "${item.keybind}" + }''; + in + builtins.concatStringsSep "\n" (map formatItem items); +in { + config = lib.mkIf config.local.modules.hyprland.enable { + hjem.users.${username} = { + packages = [pkgs.wlogout]; + files = { + ".config/wlogout/layout".text = let + loginctl = lib.getExe' pkgs.systemd "loginctl"; + systemctl = lib.getExe' pkgs.systemd "systemctl"; + in + mkLayout [ + { + action = "${loginctl} lock-session"; + keybind = "l"; + label = "lock"; + text = "Lock"; + } + + { + action = "${systemctl} hibernate"; + keybind = "h"; + label = "hibernate"; + text = "Hibernate"; + } + + { + action = "${loginctl} terminate-user ${username}"; + + keybind = "q"; + label = "logout"; + text = "Logout"; + } + + { + action = "${systemctl} poweroff"; + keybind = "p"; + label = "shutdown"; + text = "Shutdown"; + } + + { + action = "${systemctl} suspend"; + keybind = "s"; + label = "suspend"; + text = "Suspend"; + } + + { + action = "${systemctl} reboot"; + keybind = "r"; + label = "reboot"; + text = "Reboot"; + } + ]; + }; + }; + }; +} diff --git a/modules/programs/xdg.nix b/modules/programs/xdg.nix new file mode 100644 index 0000000..fda39f0 --- /dev/null +++ b/modules/programs/xdg.nix @@ -0,0 +1,46 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (config.local.systemVars) username; +in { + config = lib.mkIf config.local.profiles.desktop.enable { + hjem.users.${username} = { + files = { + ".config/mimeapps.list".text = '' + [Default Applications] + application/pdf=org.pwmt.zathura-pdf-mupdf.desktop + default-web-browser=firefox.desktop + image/gif= org.gnome.gThumb.desktop + image/jpeg=org.gnome.gThumb.desktop + image/png=org.gnome.gThumb.desktop + image/svg= org.gnome.gThumb.desktop + inode/directory=yazi.desktop + text/html=firefox.desktop + video/avi=io.github.celluloid_player.Celluloid.desktop + video/mkv=io.github.celluloid_player.Celluloid.desktop + video/mp4=io.github.celluloid_player.Celluloid.desktop + x-scheme-handler/about=firefox.desktop + x-scheme-handler/chrome=chromium-browser.desktop + x-scheme-handler/http=firefox.desktop + x-scheme-handler/https=firefox.desktop + x-scheme-handler/unknown=firefox.desktop + ''; + }; + }; + xdg.portal = { + enable = true; + xdgOpenUsePortal = true; + config = { + common.default = ["gtk"]; + hyprland.default = ["gtk" "hyprland"]; + }; + + extraPortals = [ + pkgs.xdg-desktop-portal-gtk + ]; + }; + }; +} diff --git a/modules/nix/services/brightness.nix b/modules/services/brightness.nix similarity index 100% rename from modules/nix/services/brightness.nix rename to modules/services/brightness.nix diff --git a/modules/nix/services/default.nix b/modules/services/default.nix similarity index 82% rename from modules/nix/services/default.nix rename to modules/services/default.nix index 9f454d8..1610824 100644 --- a/modules/nix/services/default.nix +++ b/modules/services/default.nix @@ -1,13 +1,16 @@ { imports = [ + ./swaync + ./brightness.nix ./docker.nix ./documentation.nix ./flatpak.nix ./forgejo.nix + ./gammastep.nix ./gnome.nix - ./gnupg.nix ./greetd.nix + ./gtk.nix ./keyd.nix ./kmscon.nix ./location.nix @@ -15,7 +18,7 @@ ./pipewire.nix ./power.nix ./searx.nix - ./syncthing.nix + ./ssh.nix ./website.nix ]; } diff --git a/modules/nix/services/docker.nix b/modules/services/docker.nix similarity index 100% rename from modules/nix/services/docker.nix rename to modules/services/docker.nix diff --git a/modules/nix/services/documentation.nix b/modules/services/documentation.nix similarity index 100% rename from modules/nix/services/documentation.nix rename to modules/services/documentation.nix diff --git a/modules/nix/services/flatpak.nix b/modules/services/flatpak.nix similarity index 100% rename from modules/nix/services/flatpak.nix rename to modules/services/flatpak.nix diff --git a/modules/nix/services/forgejo.nix b/modules/services/forgejo.nix similarity index 100% rename from modules/nix/services/forgejo.nix rename to modules/services/forgejo.nix diff --git a/modules/services/gammastep.nix b/modules/services/gammastep.nix new file mode 100644 index 0000000..75d2ec3 --- /dev/null +++ b/modules/services/gammastep.nix @@ -0,0 +1,37 @@ +{ + lib, + pkgs, + config, + ... +}: let + inherit (config.local.systemVars) username; + toINI = lib.generators.toINI {}; +in { + config = lib.mkIf config.local.profiles.desktop.enable { + hjem.users.${username} = { + packages = [pkgs.gammastep]; + files = { + ".config/gammastep/config.ini".text = toINI { + general = { + location-provider = "geoclue2"; + temp-day = 5500; + temp-night = 3700; + }; + }; + }; + }; + + systemd.user.services.gammastep = { + description = "Gammastep colour temperature adjuster"; + after = ["graphical-session.target"]; + wants = ["geoclue-agent.service"]; + wantedBy = ["graphical-session.target"]; + serviceConfig = { + ExecStart = "${pkgs.gammastep}/bin/gammastep-indicator"; + Restart = "on-failure"; + RestartSec = 3; + Slice = "background-graphical.slice"; + }; + }; + }; +} diff --git a/modules/nix/services/gnome.nix b/modules/services/gnome.nix similarity index 100% rename from modules/nix/services/gnome.nix rename to modules/services/gnome.nix diff --git a/modules/nix/services/greetd.nix b/modules/services/greetd.nix similarity index 100% rename from modules/nix/services/greetd.nix rename to modules/services/greetd.nix diff --git a/modules/services/gtk.nix b/modules/services/gtk.nix new file mode 100644 index 0000000..150a232 --- /dev/null +++ b/modules/services/gtk.nix @@ -0,0 +1,40 @@ +# heavily borrowed from https://github.com/Lunarnovaa/nixconf/blob/f88254f1938211853f6005426fe19ba4b889e854/modules/desktop/theming/gtk.nix +{ + lib, + config, + lib', + ... +}: let + inherit (lib'.generators.gtk) finalGtk2Text toGtk3Ini; + inherit (config.local.systemVars) username; + + styleCfg = config.local.style; + + gtkSettings = with styleCfg; { + gtk-icon-theme-name = gtk.iconTheme.name; + gtk-theme-name = gtk.theme.name; + gtk-cursor-theme-name = cursorTheme.name; + gtk-application-prefer-dark-theme = scheme.variant == "dark"; + }; +in { + config = with styleCfg; + lib.mkIf styleCfg.enable { + hjem.users.${username} = { + files = { + ".gtkrc-2.0".text = finalGtk2Text {attrs = gtkSettings;}; + ".config/gtk-3.0/settings.ini".text = toGtk3Ini { + Settings = gtkSettings; + }; + ".config/gtk-4.0/settings.ini".text = toGtk3Ini { + Settings = gtkSettings; + }; + ".config/gtk-4.0/gtk.css".source = with styleCfg; "${gtk.theme.package}/share/themes/${gtk.theme.name}/gtk-4.0/gtk-dark.css"; + }; + packages = with styleCfg; [ + cursorTheme.package + gtk.theme.package + gtk.iconTheme.package + ]; + }; + }; +} diff --git a/modules/nix/services/keyd.nix b/modules/services/keyd.nix similarity index 100% rename from modules/nix/services/keyd.nix rename to modules/services/keyd.nix diff --git a/modules/nix/services/kmscon.nix b/modules/services/kmscon.nix similarity index 100% rename from modules/nix/services/kmscon.nix rename to modules/services/kmscon.nix diff --git a/modules/nix/services/location.nix b/modules/services/location.nix similarity index 100% rename from modules/nix/services/location.nix rename to modules/services/location.nix diff --git a/modules/nix/services/logind.nix b/modules/services/logind.nix similarity index 100% rename from modules/nix/services/logind.nix rename to modules/services/logind.nix diff --git a/modules/nix/services/pipewire.nix b/modules/services/pipewire.nix similarity index 100% rename from modules/nix/services/pipewire.nix rename to modules/services/pipewire.nix diff --git a/modules/nix/services/power.nix b/modules/services/power.nix similarity index 100% rename from modules/nix/services/power.nix rename to modules/services/power.nix diff --git a/modules/nix/services/searx.nix b/modules/services/searx.nix similarity index 100% rename from modules/nix/services/searx.nix rename to modules/services/searx.nix diff --git a/modules/nix/services/gnupg.nix b/modules/services/ssh.nix similarity index 55% rename from modules/nix/services/gnupg.nix rename to modules/services/ssh.nix index a33cdb0..6c910f5 100644 --- a/modules/nix/services/gnupg.nix +++ b/modules/services/ssh.nix @@ -4,9 +4,8 @@ ... }: { config = lib.mkIf config.local.profiles.desktop.enable { - programs.gnupg.agent = { - enable = true; - enableSSHSupport = true; + programs.ssh = { + startAgent = true; }; }; } diff --git a/modules/services/swaync/default.nix b/modules/services/swaync/default.nix new file mode 100644 index 0000000..716e87d --- /dev/null +++ b/modules/services/swaync/default.nix @@ -0,0 +1,52 @@ +{ + lib, + pkgs, + config, + lib', + ... +}: let + inherit (builtins) toJSON; + inherit (config.local.systemVars) username; + inherit (lib') generateGtkColors; +in { + config = lib.mkIf config.local.modules.hyprland.enable { + hjem.users.${username} = { + files = { + ".config/swaync/config.json".text = toJSON { + positionX = "right"; + positionY = "top"; + layer = "overlay"; + control-center-layer = "top"; + layer-shell = true; + cssPriority = "application"; + control-center-margin-top = 0; + control-center-margin-bottom = 0; + control-center-margin-right = 0; + control-center-margin-left = 0; + notification-2fa-action = true; + notification-inline-replies = false; + notification-icon-size = 64; + notification-body-image-height = 100; + notification-body-image-width = 200; + }; + ".config/swaync/style.css".text = (generateGtkColors config.local.style.scheme.palette) + builtins.readFile ./style.css; + }; + + packages = [pkgs.swaynotificationcenter]; + }; + + systemd.user.services.swaync = { + description = "Swaync notification daemon"; + documentation = ["https://github.com/ErikReider/SwayNotificationCenter"]; + after = ["graphical-session.target"]; + partOf = ["graphical-session.target"]; + wantedBy = ["graphical-session.target"]; + serviceConfig = { + BusName = "org.freedesktop.Notifications"; + ExecStart = "${pkgs.swaynotificationcenter}/bin/swaync"; + Restart = "on-failure"; + Type = "dbus"; + }; + }; + }; +} diff --git a/modules/hm/services/swaync/style.css b/modules/services/swaync/style.css similarity index 100% rename from modules/hm/services/swaync/style.css rename to modules/services/swaync/style.css diff --git a/modules/nix/services/website.nix b/modules/services/website.nix similarity index 100% rename from modules/nix/services/website.nix rename to modules/services/website.nix diff --git a/shared/lib/default.nix b/shared/lib/default.nix index d6face6..2f1ae3f 100644 --- a/shared/lib/default.nix +++ b/shared/lib/default.nix @@ -67,10 +67,11 @@ with lib; let else (pow' base (exponent - 1) (value * base)); in base: exponent: pow' base exponent base; - generateGtkColors = lib: palette: (lib.concatLines - (lib.mapAttrsToList + generateGtkColors = palette: (concatLines + (mapAttrsToList (name: color: "@define-color ${name} ${color};") palette)); in { inherit blurImage generateGtkColors rgba; + generators = import ./generators lib; } diff --git a/shared/lib/generators/default.nix b/shared/lib/generators/default.nix new file mode 100644 index 0000000..cb07ef0 --- /dev/null +++ b/shared/lib/generators/default.nix @@ -0,0 +1,4 @@ +lib: { + toHyprConf = import ./tohyprconf.nix lib; + gtk = import ./gtk.nix lib; +} diff --git a/shared/lib/generators/gtk.nix b/shared/lib/generators/gtk.nix new file mode 100644 index 0000000..eb31d4f --- /dev/null +++ b/shared/lib/generators/gtk.nix @@ -0,0 +1,31 @@ +lib: let + # toGtk3Ini , formatGtk2Option , and finalGtk2Text are all taken from https://github.com/nix-community/home-manager, with some minor modifications to their function. + # All of the gtk generator functions are available under the MIT License. + inherit (lib) generators isBool boolToString mapAttrsToList concatMapStrings isString escape; + formatGtk2Option = n: v: let + v' = + if isBool v + then boolToString v + else if isString v + then ''"${v}"'' + else toString v; + in "${escape ["="] n} = ${v'}"; +in { + toGtk3Ini = generators.toINI { + mkKeyValue = key: value: let + value' = + if isBool value + then boolToString value + else toString value; + in "${escape ["="] key}=${value'}"; + }; + formatGtk2Option = n: v: let + v' = + if isBool v + then boolToString v + else if isString v + then ''"${v}"'' + else toString v; + in "${escape ["="] n} = ${v'}"; + finalGtk2Text = {attrs}: concatMapStrings (l: l + "\n") (mapAttrsToList formatGtk2Option attrs); +} diff --git a/shared/lib/generators/tohyprconf.nix b/shared/lib/generators/tohyprconf.nix new file mode 100644 index 0000000..20879a7 --- /dev/null +++ b/shared/lib/generators/tohyprconf.nix @@ -0,0 +1,63 @@ +lib: { + attrs, + indentLevel ? 0, + importantPrefixes ? ["$" "bezier" "name"], +}: let + inherit + (lib) + all + concatMapStringsSep + concatStrings + concatStringsSep + filterAttrs + foldl + generators + hasPrefix + isAttrs + isList + mapAttrsToList + replicate + ; + + initialIndent = concatStrings (replicate indentLevel " "); + + toHyprconf' = indent: attrs: let + sections = + filterAttrs (_: v: isAttrs v || (isList v && all isAttrs v)) attrs; + + mkSection = n: attrs: + if lib.isList attrs + then (concatMapStringsSep "\n" (a: mkSection n a) attrs) + else '' + ${indent}${n} { + ${toHyprconf' " ${indent}" attrs}${indent}} + ''; + + mkFields = generators.toKeyValue { + listsAsDuplicateKeys = true; + inherit indent; + }; + + allFields = + filterAttrs (_: v: !(isAttrs v || (isList v && all isAttrs v))) + attrs; + + isImportantField = n: _: + foldl (acc: prev: + if hasPrefix prev n + then true + else acc) + false + importantPrefixes; + + importantFields = filterAttrs isImportantField allFields; + + fields = + builtins.removeAttrs allFields + (mapAttrsToList (n: _: n) importantFields); + in + mkFields importantFields + + concatStringsSep "\n" (mapAttrsToList mkSection sections) + + mkFields fields; +in + toHyprconf' initialIndent attrs