From 7b77f05476ac60227fcab625a8c462343ec4b889 Mon Sep 17 00:00:00 2001 From: uku Date: Tue, 6 May 2025 12:28:08 +0200 Subject: [PATCH 1/3] feat: initial switch from hm to hjem --- configs/common.nix | 33 ++++++++-------------- configs/desktop.nix | 49 ++++++++++++++++----------------- configs/laptop.nix | 12 ++++---- flake.lock | 22 +++++++-------- flake.nix | 6 ++-- programs/fish.nix | 13 ++++----- programs/games.nix | 2 +- programs/ghostty.nix | 22 +++++++-------- programs/git.nix | 52 +++++++++++++++++------------------ programs/gnome.nix | 10 ++----- programs/neovim/neovide.nix | 9 +++--- programs/rust.nix | 4 +-- systems/fuji/default.nix | 28 +++++++++---------- systems/fuji/nvidia.nix | 12 ++++---- systems/mottarone/default.nix | 11 ++++++-- 15 files changed, 131 insertions(+), 154 deletions(-) diff --git a/configs/common.nix b/configs/common.nix index 8d75731..e64fb1f 100644 --- a/configs/common.nix +++ b/configs/common.nix @@ -5,16 +5,13 @@ _utils, agenix, camasca, - home-manager, + hjem, nixpkgs, nix-index-database, vencord, ... }: let - username = "leo"; - stateVersion = "24.11"; - rootPassword = _utils.setupSingleSecret config "rootPassword" { }; secrets = _utils.setupSharedSecrets config { secrets = [ "userPassword" ]; @@ -23,11 +20,9 @@ in { imports = [ agenix.nixosModules.default - home-manager.nixosModules.home-manager + hjem.nixosModules.default nix-index-database.nixosModules.nix-index - (lib.mkAliasOptionModule [ "hm" ] [ "home-manager" "users" username ]) - rootPassword.generate secrets.generate @@ -71,21 +66,17 @@ in wget ]; - hm = { - home = { inherit stateVersion; }; - - programs.ssh = { - enable = true; - addKeysToAgent = "yes"; - forwardAgent = true; + hjem = { + clobberByDefault = true; + users.leo.files = { + ".ssh/config".text = '' + Host * + ForwardAgent yes + AddKeysToAgent yes + ''; }; }; - home-manager = { - useGlobalPkgs = true; - useUserPackages = true; - }; - i18n.defaultLocale = "en_US.UTF-8"; networking = { @@ -196,7 +187,7 @@ in time.timeZone = "Europe/Paris"; users.users = { - "${username}" = { + leo = { isNormalUser = true; shell = pkgs.fish; extraGroups = [ @@ -225,5 +216,5 @@ in # this value at the release version of the first install of this system. # Before changing this value read the documentation for this option # (e.g. man configuration.nix or on https://nixos.org/nixos/options.html). - system.stateVersion = lib.mkDefault stateVersion; # Did you read the comment? + system.stateVersion = lib.mkDefault "24.11"; # Did you read the comment? } diff --git a/configs/desktop.nix b/configs/desktop.nix index 5538560..7b6b0fc 100644 --- a/configs/desktop.nix +++ b/configs/desktop.nix @@ -14,6 +14,7 @@ ../programs/ghostty.nix ../programs/gnome.nix ../programs/java.nix + ../programs/neovim/neovide.nix ]; boot = { @@ -44,8 +45,30 @@ sbctl wl-clipboard + chromium + (discord.override { + withOpenASAR = true; + withVencord = true; + }) + gimp3 + gparted + idea-wrapped + mpv + obsidian + strawberry + teams-for-linux + thunderbird + vscode + niigo-miku-cursors patchouli-cursors + + # libreoffice stuff + libreoffice-qt6-fresh + hunspell + hunspellDicts.en_US + hunspellDicts.fr-moderne + ]; sessionVariables = { @@ -77,32 +100,6 @@ enable32Bit = true; }; - hm.imports = [ ../programs/neovim/neovide.nix ]; - hm.home = { - packages = with pkgs; [ - chromium - (discord.override { - withOpenASAR = true; - withVencord = true; - }) - gimp3 - gparted - idea-wrapped - mpv - obsidian - strawberry - teams-for-linux - thunderbird - vscode - - # libreoffice stuff - libreoffice-qt6-fresh - hunspell - hunspellDicts.en_US - hunspellDicts.fr-moderne - ]; - }; - i18n.extraLocaleSettings = { LC_ADDRESS = "fr_FR.UTF-8"; LC_IDENTIFICATION = "fr_FR.UTF-8"; diff --git a/configs/laptop.nix b/configs/laptop.nix index 7f97765..b72f963 100644 --- a/configs/laptop.nix +++ b/configs/laptop.nix @@ -1,7 +1,5 @@ { - lib, pkgs, - config, ... }: { @@ -31,9 +29,9 @@ programs.light.enable = true; # hyprland stuff - services.blueman = lib.mkIf config.programs.hyprland.enable { enable = true; }; - hm.wayland.windowManager.hyprland.settings.exec-once = with pkgs; [ - "${lib.getExe networkmanagerapplet}" - "${lib.getExe' blueman "blueman-applet"}" - ]; + # services.blueman = lib.mkIf config.programs.hyprland.enable { enable = true; }; + # hm.wayland.windowManager.hyprland.settings.exec-once = with pkgs; [ + # "${lib.getExe networkmanagerapplet}" + # "${lib.getExe' blueman "blueman-applet"}" + # ]; } diff --git a/flake.lock b/flake.lock index cd16f97..017c881 100644 --- a/flake.lock +++ b/flake.lock @@ -3,9 +3,7 @@ "agenix": { "inputs": { "darwin": [], - "home-manager": [ - "home-manager" - ], + "home-manager": [], "nixpkgs": [ "nixpkgs" ], @@ -145,23 +143,23 @@ "type": "github" } }, - "home-manager": { + "hjem": { "inputs": { "nixpkgs": [ "nixpkgs" ] }, "locked": { - "lastModified": 1746413188, - "narHash": "sha256-i6BoiQP0PasExESQHszC0reQHfO6D4aI2GzOwZMOI20=", - "owner": "nix-community", - "repo": "home-manager", - "rev": "8a318641ac13d3bc0a53651feaee9560f9b2d89a", + "lastModified": 1746355589, + "narHash": "sha256-LguszqsDBTtdBxblQTtN7vOAYmfoe43aHkB8aK1dChE=", + "owner": "feel-co", + "repo": "hjem", + "rev": "77b37eeb583d43e1c723119a69c906235174ce57", "type": "github" }, "original": { - "owner": "nix-community", - "repo": "home-manager", + "owner": "feel-co", + "repo": "hjem", "type": "github" } }, @@ -283,7 +281,7 @@ "flake-parts": "flake-parts", "flake-utils": "flake-utils", "getchvim": "getchvim", - "home-manager": "home-manager", + "hjem": "hjem", "lanzaboote": "lanzaboote", "mystia": "mystia", "nix-index-database": "nix-index-database", diff --git a/flake.nix b/flake.nix index af39522..9be34c3 100644 --- a/flake.nix +++ b/flake.nix @@ -68,7 +68,7 @@ url = "github:uku3lig/agenix"; inputs.nixpkgs.follows = "nixpkgs"; inputs.systems.follows = "systems"; - inputs.home-manager.follows = "home-manager"; + inputs.home-manager.follows = ""; inputs.darwin.follows = ""; }; @@ -89,8 +89,8 @@ inputs.nixpkgs.follows = "nixpkgs"; }; - home-manager = { - url = "github:nix-community/home-manager"; + hjem = { + url = "github:feel-co/hjem"; inputs.nixpkgs.follows = "nixpkgs"; }; diff --git a/programs/fish.nix b/programs/fish.nix index 824094b..bc0a632 100644 --- a/programs/fish.nix +++ b/programs/fish.nix @@ -6,17 +6,16 @@ fishPlugins.hydro ]; - hm.programs.fish = { - enable = true; + hjem.users.leo.files.".config/fish/config.fish".text = '' + function fish_greeting + end - interactiveShellInit = '' + if status is-interactive set --global hydro_symbol_git_dirty "*" set --global hydro_color_pwd blue set --global hydro_color_git magenta set --global hydro_color_prompt green set --global hydro_color_duration yellow - ''; - - functions.fish_greeting = ""; - }; + end + ''; } diff --git a/programs/games.nix b/programs/games.nix index 0b09711..dc83c4e 100644 --- a/programs/games.nix +++ b/programs/games.nix @@ -5,7 +5,7 @@ xpadneo.enable = true; }; - hm.home.packages = with pkgs; [ + environment.systemPackages = with pkgs; [ obs-studio osu-lazer-bin krita diff --git a/programs/ghostty.nix b/programs/ghostty.nix index bb7ae9c..d33f833 100644 --- a/programs/ghostty.nix +++ b/programs/ghostty.nix @@ -1,14 +1,12 @@ +{ pkgs, ... }: { - hm.programs.ghostty = { - enable = true; - settings = { - theme = "light:catppuccin-latte,dark:catppuccin-mocha"; - font-family = "Iosevka Term"; - font-size = 12; - font-feature = [ - "-calt" - "-dlig" - ]; - }; - }; + environment.systemPackages = [ pkgs.ghostty ]; + + hjem.users.leo.files.".config/ghostty/config".text = '' + font-family = Iosevka Term + font-feature = -calt + font-feature = -dlig + font-size = 12 + theme = light:catppuccin-latte,dark:catppuccin-mocha + ''; } diff --git a/programs/git.nix b/programs/git.nix index 0ba006b..5e42ee3 100644 --- a/programs/git.nix +++ b/programs/git.nix @@ -1,36 +1,36 @@ -{ config, ... }: +{ lib, pkgs, ... }: { - programs.git.enable = true; + environment.systemPackages = with pkgs; [ + git + gh + ]; - hm.programs = { - git = { - inherit (config.programs.git) enable package; - userName = "uku"; - userEmail = "hi@uku.moe"; - - signing = { - format = "ssh"; - key = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN+7+KfdOrhcnHayxvOENUeMx8rE4XEIV/AxMHiaNUP8"; - signByDefault = true; + hjem.users.leo.files = { + ".gitconfig".text = lib.generators.toGitINI { + user = { + name = "uku"; + email = "hi@uku.moe"; + signingKey = "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIN+7+KfdOrhcnHayxvOENUeMx8rE4XEIV/AxMHiaNUP8"; }; - # delta.enable = true; - - extraConfig = { - init.defaultBranch = "main"; - core.autocrlf = "input"; - push.autoSetupRemote = true; - merge.conflictStyle = "zdiff3"; - rebase.autoStash = true; - status.submoduleSummary = true; - diff.submodule = "log"; - submodule.recurse = true; - commit.verbose = true; + commit = { + gpgSign = true; + verbose = true; }; + + gpg.format = "ssh"; + tag.gpgSign = true; + core.autocrlf = "input"; + diff.submodule = "log"; + init.defaultBranch = "main"; + merge.conflictStyle = "zdiff3"; + push.autoSetupRemote = true; + rebase.autoStash = true; + status.submoduleSummary = true; + submodule.recurse = true; }; - gh = { - enable = true; + ".config/gh/config.yml".text = lib.generators.toYAML { } { settings.git_protocol = "ssh"; }; }; diff --git a/programs/gnome.nix b/programs/gnome.nix index fa1f145..852786f 100644 --- a/programs/gnome.nix +++ b/programs/gnome.nix @@ -16,14 +16,6 @@ terminal = "ghostty"; }; - hm.programs.gnome-shell = { - enable = true; - extensions = with pkgs.gnomeExtensions; [ - { package = appindicator; } - { package = dash-to-panel; } - ]; - }; - # ssh-agent is provided by gnome-keyring-daemon # (mabye soon by gcr, see NixOS/nixpkgs#140824) programs.ssh.startAgent = lib.mkForce false; @@ -32,6 +24,8 @@ systemPackages = [ adw-gtk3 gnome-tweaks + gnomeExtensions.appindicator + gnomeExtensions.dash-to-panel ]; gnome.excludePackages = [ diff --git a/programs/neovim/neovide.nix b/programs/neovim/neovide.nix index 5e78385..fa95937 100644 --- a/programs/neovim/neovide.nix +++ b/programs/neovim/neovide.nix @@ -1,7 +1,6 @@ -# home-manager module +{ pkgs, ... }: { - programs.neovide = { - enable = true; - settings.fork = true; - }; + environment.systemPackages = [ pkgs.neovide ]; + + hjem.users.leo.files.".config/neovide/config.toml".text = "fork = true"; } diff --git a/programs/rust.nix b/programs/rust.nix index ea33595..c9a3e9e 100644 --- a/programs/rust.nix +++ b/programs/rust.nix @@ -8,8 +8,8 @@ let toml = pkgs.formats.toml { }; in { - hm.home.file.".cargo/config.toml".source = toml.generate "config.toml" { - build.target-dir = "${config.hm.home.homeDirectory}/.cargo/target"; + hjem.users.leo.files.".cargo/config.toml".source = toml.generate "config.toml" { + build.target-dir = "${config.hjem.users.leo.directory}/.cargo/target"; target.x86_64-unknown-linux-gnu = { linker = "${lib.getExe pkgs.clang}"; diff --git a/systems/fuji/default.nix b/systems/fuji/default.nix index c1fb41a..83e4a96 100644 --- a/systems/fuji/default.nix +++ b/systems/fuji/default.nix @@ -7,20 +7,18 @@ services.xserver.videoDrivers = [ "amdgpu" ]; - hm = { - home.packages = with pkgs; [ - wineWowPackages.waylandFull - ]; + environment.systemPackages = with pkgs; [ + wineWowPackages.waylandFull + ]; - wayland.windowManager.hyprland.settings = { - monitor = "DP-1,3840x2160@144,0x0,1.5"; - - xwayland.force_zero_scaling = true; - - env = [ - "GDK_SCALE,1.5" - "XCURSOR_SIZE,24" - ]; - }; - }; + # hm = { + # wayland.windowManager.hyprland.settings = { + # monitor = "DP-1,3840x2160@144,0x0,1.5"; + # xwayland.force_zero_scaling = true; + # env = [ + # "GDK_SCALE,1.5" + # "XCURSOR_SIZE,24" + # ]; + # }; + # }; } diff --git a/systems/fuji/nvidia.nix b/systems/fuji/nvidia.nix index e77dab7..78d2e26 100644 --- a/systems/fuji/nvidia.nix +++ b/systems/fuji/nvidia.nix @@ -37,10 +37,10 @@ }; }; - hm.wayland.windowManager.hyprland.settings.env = [ - "XDG_SESSION_TYPE,wayland" - "GBM_BACKEND,nvidia-drm" - "__GLX_VENDOR_LIBRARY_NAME,nvidia" - "NVD_BACKEND,direct" - ]; + # hm.wayland.windowManager.hyprland.settings.env = [ + # "XDG_SESSION_TYPE,wayland" + # "GBM_BACKEND,nvidia-drm" + # "__GLX_VENDOR_LIBRARY_NAME,nvidia" + # "NVD_BACKEND,direct" + # ]; } diff --git a/systems/mottarone/default.nix b/systems/mottarone/default.nix index 07d28fe..469b62a 100644 --- a/systems/mottarone/default.nix +++ b/systems/mottarone/default.nix @@ -29,9 +29,14 @@ in i18n.defaultLocale = lib.mkForce "fr_FR.UTF-8"; - hm.programs = { - git.includes = [ { path = "~/.config/git/work_config"; } ]; - ssh.includes = [ "work_config" ]; + hjem.users.leo.files = { + ".gitconfig".text = lib.generators.toGitINI { + include.path = "~/.config/git/work_config"; + }; + + ".ssh/config".text = lib.mkBefore '' + Include work_config + ''; }; networking.firewall.allowedTCPPorts = [ 8000 ]; From 689c291762d0749bff64c9ebed25d21168234bd2 Mon Sep 17 00:00:00 2001 From: uku Date: Thu, 8 May 2025 11:37:07 +0200 Subject: [PATCH 2/3] chore: add shorthand for hjem option --- configs/common.nix | 2 ++ programs/fish.nix | 2 +- programs/ghostty.nix | 2 +- programs/git.nix | 2 +- programs/neovim/neovide.nix | 2 +- programs/rust.nix | 2 +- systems/mottarone/default.nix | 2 +- 7 files changed, 8 insertions(+), 6 deletions(-) diff --git a/configs/common.nix b/configs/common.nix index e64fb1f..502b08a 100644 --- a/configs/common.nix +++ b/configs/common.nix @@ -23,6 +23,8 @@ in hjem.nixosModules.default nix-index-database.nixosModules.nix-index + (lib.mkAliasOptionModule [ "hj" ] [ "hjem" "users" "leo" "files" ]) + rootPassword.generate secrets.generate diff --git a/programs/fish.nix b/programs/fish.nix index bc0a632..42657e5 100644 --- a/programs/fish.nix +++ b/programs/fish.nix @@ -6,7 +6,7 @@ fishPlugins.hydro ]; - hjem.users.leo.files.".config/fish/config.fish".text = '' + hj.".config/fish/config.fish".text = '' function fish_greeting end diff --git a/programs/ghostty.nix b/programs/ghostty.nix index d33f833..477f94b 100644 --- a/programs/ghostty.nix +++ b/programs/ghostty.nix @@ -2,7 +2,7 @@ { environment.systemPackages = [ pkgs.ghostty ]; - hjem.users.leo.files.".config/ghostty/config".text = '' + hj.".config/ghostty/config".text = '' font-family = Iosevka Term font-feature = -calt font-feature = -dlig diff --git a/programs/git.nix b/programs/git.nix index 5e42ee3..8218619 100644 --- a/programs/git.nix +++ b/programs/git.nix @@ -5,7 +5,7 @@ gh ]; - hjem.users.leo.files = { + hj = { ".gitconfig".text = lib.generators.toGitINI { user = { name = "uku"; diff --git a/programs/neovim/neovide.nix b/programs/neovim/neovide.nix index fa95937..300a55f 100644 --- a/programs/neovim/neovide.nix +++ b/programs/neovim/neovide.nix @@ -2,5 +2,5 @@ { environment.systemPackages = [ pkgs.neovide ]; - hjem.users.leo.files.".config/neovide/config.toml".text = "fork = true"; + hj.".config/neovide/config.toml".text = "fork = true"; } diff --git a/programs/rust.nix b/programs/rust.nix index c9a3e9e..1affa7e 100644 --- a/programs/rust.nix +++ b/programs/rust.nix @@ -8,7 +8,7 @@ let toml = pkgs.formats.toml { }; in { - hjem.users.leo.files.".cargo/config.toml".source = toml.generate "config.toml" { + hj.".cargo/config.toml".source = toml.generate "config.toml" { build.target-dir = "${config.hjem.users.leo.directory}/.cargo/target"; target.x86_64-unknown-linux-gnu = { diff --git a/systems/mottarone/default.nix b/systems/mottarone/default.nix index 469b62a..8315878 100644 --- a/systems/mottarone/default.nix +++ b/systems/mottarone/default.nix @@ -29,7 +29,7 @@ in i18n.defaultLocale = lib.mkForce "fr_FR.UTF-8"; - hjem.users.leo.files = { + hj = { ".gitconfig".text = lib.generators.toGitINI { include.path = "~/.config/git/work_config"; }; From 63d99f20628679080f66bad2b1016f56ac520209 Mon Sep 17 00:00:00 2001 From: uku Date: Thu, 8 May 2025 12:20:30 +0200 Subject: [PATCH 3/3] feat: convert the rest of the configs to hjem --- configs/laptop.nix | 15 +- global/utils.nix | 58 +++++++ programs/alacritty.nix | 35 +++-- programs/fuzzel.nix | 36 ++--- programs/hyprland-misc.nix | 3 +- programs/hyprland.nix | 280 +++++++++++++++++----------------- programs/starship/default.nix | 29 ++-- programs/waybar/default.nix | 163 ++++++++++---------- systems/fuji/default.nix | 20 ++- systems/fuji/nvidia.nix | 15 +- 10 files changed, 361 insertions(+), 293 deletions(-) diff --git a/configs/laptop.nix b/configs/laptop.nix index b72f963..4c38bca 100644 --- a/configs/laptop.nix +++ b/configs/laptop.nix @@ -1,5 +1,8 @@ { + lib, pkgs, + config, + _utils, ... }: { @@ -29,9 +32,11 @@ programs.light.enable = true; # hyprland stuff - # services.blueman = lib.mkIf config.programs.hyprland.enable { enable = true; }; - # hm.wayland.windowManager.hyprland.settings.exec-once = with pkgs; [ - # "${lib.getExe networkmanagerapplet}" - # "${lib.getExe' blueman "blueman-applet"}" - # ]; + services.blueman = lib.mkIf config.programs.hyprland.enable { enable = true; }; + hj.".config/hypr/hyprland.conf".text = _utils.toHyprconf { + exec-once = with pkgs; [ + "${lib.getExe networkmanagerapplet}" + "${lib.getExe' blueman "blueman-applet"}" + ]; + }; } diff --git a/global/utils.nix b/global/utils.nix index a98b0a5..3efb923 100644 --- a/global/utils.nix +++ b/global/utils.nix @@ -111,4 +111,62 @@ alias = builtins.toString (pkgs.writeTextDir filename content) + "/"; tryFiles = "${filename} =${builtins.toString status}"; }; + + # https://github.com/nix-community/home-manager/blob/ec71b5162848e6369bdf2be8d2f1dd41cded88e8/modules/lib/generators.nix#L4-L61 + toHyprconf = + attrs: + let + inherit (lib) + all + concatMapStringsSep + concatStrings + concatStringsSep + filterAttrs + foldl + generators + hasPrefix + isAttrs + isList + mapAttrsToList + replicate + ; + + indentLevel = 0; + importantPrefixes = [ "$" ]; + initialIndent = concatStrings (replicate indentLevel " "); + + toHyprconf' = + indent: attrs: + let + sections = filterAttrs (n: 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 (n: 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; } diff --git a/programs/alacritty.nix b/programs/alacritty.nix index f59a58f..da06c3d 100644 --- a/programs/alacritty.nix +++ b/programs/alacritty.nix @@ -3,24 +3,23 @@ pkgs, ... }: -{ - hm.programs.alacritty = - let - theme = pkgs.fetchurl { - # url = "https://raw.githubusercontent.com/catppuccin/alacritty/ce476fb41f307d90f841c1a4fd7f0727c21248b2/catppuccin-macchiato.toml"; - url = "https://raw.githubusercontent.com/rose-pine/alacritty/3c3e36eb5225b0eb6f1aa989f9d9e783a5b47a83/dist/rose-pine.toml"; - hash = "sha256-MheSmzz02ZLAOS2uaclyazu6E//eikcdFydFfkio0/U="; - }; +let + toml = pkgs.formats.toml { }; - themeAttr = builtins.fromTOML (builtins.readFile theme); - in - { - enable = true; - settings = lib.recursiveUpdate themeAttr { - font = { - normal.family = "Iosevka Nerd Font"; - size = 12; - }; + theme = pkgs.fetchurl { + # url = "https://raw.githubusercontent.com/catppuccin/alacritty/ce476fb41f307d90f841c1a4fd7f0727c21248b2/catppuccin-macchiato.toml"; + url = "https://raw.githubusercontent.com/rose-pine/alacritty/3c3e36eb5225b0eb6f1aa989f9d9e783a5b47a83/dist/rose-pine.toml"; + hash = "sha256-MheSmzz02ZLAOS2uaclyazu6E//eikcdFydFfkio0/U="; + }; + themeAttr = builtins.fromTOML (builtins.readFile theme); +in +{ + hj.".config/alacritty/alacritty.toml".source = toml.generate "alacritty.toml" ( + lib.recursiveUpdate themeAttr { + font = { + normal.family = "Iosevka Nerd Font"; + size = 12; }; - }; + } + ); } diff --git a/programs/fuzzel.nix b/programs/fuzzel.nix index a3c224a..7baf6ac 100644 --- a/programs/fuzzel.nix +++ b/programs/fuzzel.nix @@ -1,24 +1,24 @@ +{ lib, pkgs, ... }: { - hm.programs.fuzzel = { - enable = true; - settings = { - main = { - font = "Iosevka Nerd Font:size=16"; - dpi-aware = false; - horizontal-pad = 20; - }; + environment.systemPackages = [ pkgs.fuzzel ]; - border.radius = 8; + hj.".config/fuzzel/fuzzel.ini".text = lib.generators.toINI { } { + main = { + font = "Iosevka Nerd Font:size=16"; + dpi-aware = false; + horizontal-pad = 20; + }; - colors = { - background = "24273aff"; # base - border = "91d7e3cc"; # sky - text = "cad3f5ff"; # text - match = "a6da95ff"; # green - selection = "f4dbd6ff"; # rosewater - selection-text = "181926ff"; # crust - selection-match = "40a02bff"; # latte green - }; + border.radius = 8; + + colors = { + background = "24273aff"; # base + border = "91d7e3cc"; # sky + text = "cad3f5ff"; # text + match = "a6da95ff"; # green + selection = "f4dbd6ff"; # rosewater + selection-text = "181926ff"; # crust + selection-match = "40a02bff"; # latte green }; }; } diff --git a/programs/hyprland-misc.nix b/programs/hyprland-misc.nix index f37e79e..36e7bd7 100644 --- a/programs/hyprland-misc.nix +++ b/programs/hyprland-misc.nix @@ -1,8 +1,7 @@ { pkgs, ... }: { # utility packages for hyprland, since you know it's not a DE - - hm.home.packages = with pkgs; [ + environment.systemPackages = with pkgs; [ gnome.gnome-calculator mate.eom nwg-look diff --git a/programs/hyprland.nix b/programs/hyprland.nix index ae83972..3bc0936 100644 --- a/programs/hyprland.nix +++ b/programs/hyprland.nix @@ -1,6 +1,7 @@ { lib, pkgs, + _utils, ... }: { @@ -23,168 +24,163 @@ xdg.portal.extraPortals = with pkgs; [ xdg-desktop-portal-gtk ]; - hm = { - home.packages = with pkgs; [ - hyprpaper - hyprpicker - wl-clipboard - cliphist - swayidle - swappy - grimblast - playerctl - polkit_gnome - ]; + environment.systemPackages = with pkgs; [ + hyprpaper + hyprpicker + wl-clipboard + cliphist + swayidle + swappy + grimblast + playerctl + polkit_gnome + ]; - wayland.windowManager.hyprland = { - enable = true; - settings = - let - inherit (lib) getExe getExe'; - keys = [ - "ampersand" - "eacute" - "quotedbl" - "apostrophe" - "parenleft" - "minus" - "egrave" - "underscore" - "ccedilla" - "agrave" - ]; - in - with pkgs; - { - "$mod" = "SUPER"; - "$wl-paste" = getExe' wl-clipboard "wl-paste"; - "$wpctl" = getExe' wireplumber "wpctl"; + hj.".config/hypr/hyprland.conf".text = + let + inherit (lib) getExe getExe'; + keys = [ + "ampersand" + "eacute" + "quotedbl" + "apostrophe" + "parenleft" + "minus" + "egrave" + "underscore" + "ccedilla" + "agrave" + ]; + in + with pkgs; + _utils.toHyprconf { + "$mod" = "SUPER"; + "$wl-paste" = getExe' wl-clipboard "wl-paste"; + "$wpctl" = getExe' wireplumber "wpctl"; - monitor = lib.mkDefault ",highres,auto,1"; + monitor = lib.mkDefault ",highres,auto,1"; - env = [ - "WLR_DRM_NO_ATOMIC,1" - "SDL_VIDEODRIVER,wayland" - "MOZ_ENABLE_WAYLAND,1" - "_JAVA_AWT_WM_NONREPARENTING,1" - "NIXOS_OZONE_WL,1" - ]; + env = [ + "WLR_DRM_NO_ATOMIC,1" + "SDL_VIDEODRIVER,wayland" + "MOZ_ENABLE_WAYLAND,1" + "_JAVA_AWT_WM_NONREPARENTING,1" + "NIXOS_OZONE_WL,1" + ]; - exec-once = [ - "${getExe waybar}" - "${getExe hyprpaper}" - "${getExe swayidle} -w" - "${polkit_gnome}/libexec/polkit-gnome-authentication-agent-1" - "$wl-paste --type text --watch ${getExe cliphist} store" - "$wl-paste --type image --watch ${getExe cliphist} store" - ]; + exec-once = [ + "${getExe waybar}" + "${getExe hyprpaper}" + "${getExe swayidle} -w" + "${polkit_gnome}/libexec/polkit-gnome-authentication-agent-1" + "$wl-paste --type text --watch ${getExe cliphist} store" + "$wl-paste --type image --watch ${getExe cliphist} store" + ]; - input = { - kb_layout = "fr"; - follow_mouse = 1; + input = { + kb_layout = "fr"; + follow_mouse = 1; - touchpad.drag_lock = true; + touchpad.drag_lock = true; - sensitivity = -0.1; - accel_profile = "flat"; - }; + sensitivity = -0.1; + accel_profile = "flat"; + }; - general = { - gaps_in = 0; - gaps_out = 0; - border_size = 0; + general = { + gaps_in = 0; + gaps_out = 0; + border_size = 0; - allow_tearing = true; - }; + allow_tearing = true; + }; - decoration = { - drop_shadow = false; - blur.enabled = true; - }; + decoration = { + drop_shadow = false; + blur.enabled = true; + }; - animations = { - enabled = true; + animations = { + enabled = true; - animation = [ - "windows, 1, 2, default" - "windowsOut, 1, 2, default, popin 90%" - "fade, 1, 2, default" - "workspaces, 1, 3, default" - ]; - }; + animation = [ + "windows, 1, 2, default" + "windowsOut, 1, 2, default, popin 90%" + "fade, 1, 2, default" + "workspaces, 1, 3, default" + ]; + }; - dwindle = { - pseudotile = true; - preserve_split = true; - force_split = 2; - }; + dwindle = { + pseudotile = true; + preserve_split = true; + force_split = 2; + }; - gestures.workspace_swipe = true; + gestures.workspace_swipe = true; - windowrulev2 = [ - "float, class:^(pavucontrol)$" + windowrulev2 = [ + "float, class:^(pavucontrol)$" - "suppressevent maximize, class:^(firefox)$" - "float, title:^(Picture-in-Picture)$" - "float, class:^(firefox)$, title:^()$" # notifications + "suppressevent maximize, class:^(firefox)$" + "float, title:^(Picture-in-Picture)$" + "float, class:^(firefox)$, title:^()$" # notifications - "immediate, class:^(cs2)$" - "immediate, class:^(osu.*)$" - "immediate, class:^(steam_app_1229490)$" # ultrakill - # "immediate, class:^(steam_app_\d+)$" - # "immediate, class:^(steam_app_322170)$" - ]; + "immediate, class:^(cs2)$" + "immediate, class:^(osu.*)$" + "immediate, class:^(steam_app_1229490)$" # ultrakill + # "immediate, class:^(steam_app_\d+)$" + # "immediate, class:^(steam_app_322170)$" + ]; - bind = + bind = + [ + "$mod, Return, exec, ${getExe alacritty}" + "$mod SHIFT, A, killactive," + "$mod SHIFT, E, exit," + "$mod SHIFT, Space, togglefloating," + "$mod, D, exec, ${getExe fuzzel}" + "$mod, F, fullscreen, 0" + "$mod, P, pseudo," # dwindle + "$mod, J, togglesplit," # dwindle + + # audio + ",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" + ",XF86AudioMicMute, exec, $wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" + ",XF86AudioPause, exec, ${getExe playerctl} play-pause" + ",XF86AudioPlay, exec, ${getExe playerctl} play-pause" + ",XF86AudioNext, exec, ${getExe playerctl} next" + ",XF86AudioPrev, exec, ${getExe playerctl} previous" + + # backlight + ",XF86MonBrightnessUp, exec, ${getExe' light "light"} -A 5" + ",XF86MonBrightnessDown, exec, ${getExe' light "light"} -U 5" + + # screenshot + ",Print, exec, ${getExe grimblast} --freeze save area - | ${getExe swappy} -f -" + ] + ++ + # Switch workspaces with mod + [0-9] + # Move active window to a workspace with mod + SHIFT + [0-9] + lib.flatten ( + builtins.map ( + i: + let + key = builtins.elemAt keys (i - 1); + in [ - "$mod, Return, exec, ${getExe alacritty}" - "$mod SHIFT, A, killactive," - "$mod SHIFT, E, exit," - "$mod SHIFT, Space, togglefloating," - "$mod, D, exec, ${getExe fuzzel}" - "$mod, F, fullscreen, 0" - "$mod, P, pseudo," # dwindle - "$mod, J, togglesplit," # dwindle - - # audio - ",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" - ",XF86AudioMicMute, exec, $wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle" - ",XF86AudioPause, exec, ${getExe playerctl} play-pause" - ",XF86AudioPlay, exec, ${getExe playerctl} play-pause" - ",XF86AudioNext, exec, ${getExe playerctl} next" - ",XF86AudioPrev, exec, ${getExe playerctl} previous" - - # backlight - ",XF86MonBrightnessUp, exec, ${getExe' light "light"} -A 5" - ",XF86MonBrightnessDown, exec, ${getExe' light "light"} -U 5" - - # screenshot - ",Print, exec, ${getExe grimblast} --freeze save area - | ${getExe swappy} -f -" + "$mod, ${key}, workspace, ${toString i}" + "$mod SHIFT, ${key}, movetoworkspace, ${toString i}" ] - ++ - # Switch workspaces with mod + [0-9] - # Move active window to a workspace with mod + SHIFT + [0-9] - lib.flatten ( - builtins.map ( - i: - let - key = builtins.elemAt keys (i - 1); - in - [ - "$mod, ${key}, workspace, ${toString i}" - "$mod SHIFT, ${key}, movetoworkspace, ${toString i}" - ] - ) (lib.range 1 10) - ); + ) (lib.range 1 10) + ); - bindm = [ - "$mod, mouse:272, movewindow" - "$mod, mouse:273, resizewindow" - "$mod SHIFT, mouse:272, resizewindow" - ]; - }; + bindm = [ + "$mod, mouse:272, movewindow" + "$mod, mouse:273, resizewindow" + "$mod SHIFT, mouse:272, resizewindow" + ]; }; - }; } diff --git a/programs/starship/default.nix b/programs/starship/default.nix index 135da01..d7cb632 100644 --- a/programs/starship/default.nix +++ b/programs/starship/default.nix @@ -1,13 +1,24 @@ +{ lib, pkgs, ... }: +let + toml = pkgs.formats.toml { }; +in { - hm.programs.starship = { - enable = true; - settings = { - add_newline = false; + environment.systemPackages = [ pkgs.starship ]; - directory = { - truncation_length = 3; - truncation_symbol = "…/"; - }; - } // (import ./nerd-font.nix); + hj = { + ".config/starship.toml" = + toml.generate "starship.toml" { + add_newline = false; + + directory = { + truncation_length = 3; + truncation_symbol = "…/"; + }; + } + // (import ./nerd-font.nix); + + ".config/fish/config.fish".text = lib.mkAfter '' + starship init fish | source + ''; }; } diff --git a/programs/waybar/default.nix b/programs/waybar/default.nix index 0290b19..5a4b4c9 100644 --- a/programs/waybar/default.nix +++ b/programs/waybar/default.nix @@ -5,93 +5,92 @@ ... }: { - hm.programs.waybar = { - enable = true; - style = ./style.css; + environment.systemPackages = [ pkgs.waybar ]; - settings = [ - { - position = "bottom"; - layer = "top"; - height = 24; - spacing = 2; + hj = { + ".config/waybar/style.css".source = ./style.css; - modules-left = [ "hyprland/workspaces" ]; - modules-center = [ ]; - modules-right = - [ "memory" ] - ++ lib.optionals (builtins.elem "amdgpu" config.services.xserver.videoDrivers) [ - "custom/gpu-usage" - ] - ++ [ - "cpu" - "wireplumber" - ] - ++ lib.optionals config.services.power-profiles-daemon.enable [ "battery" ] - ++ lib.optionals config.programs.light.enable [ "backlight" ] - ++ [ - "clock" - "tray" - ]; + ".config/waybar/config".text = builtins.toJSON { + position = "bottom"; + layer = "top"; + height = 24; + spacing = 2; - "hyprland/workspaces" = { - format = "{name}"; - on-click = "activate"; - sort-by-number = true; + modules-left = [ "hyprland/workspaces" ]; + modules-center = [ ]; + modules-right = + [ "memory" ] + ++ lib.optionals (builtins.elem "amdgpu" config.services.xserver.videoDrivers) [ + "custom/gpu-usage" + ] + ++ [ + "cpu" + "wireplumber" + ] + ++ lib.optionals config.services.power-profiles-daemon.enable [ "battery" ] + ++ lib.optionals config.programs.light.enable [ "backlight" ] + ++ [ + "clock" + "tray" + ]; + + "hyprland/workspaces" = { + format = "{name}"; + on-click = "activate"; + sort-by-number = true; + }; + + tray = { + icon-size = 16; + spacing = 10; + }; + + clock = { + format-alt = "{:%Y-%m-%d %H:%M:%S}"; + interval = 1; + }; + + cpu = { + format = "CPU {usage}%"; + tooltip = false; + interval = 2; + }; + + memory = { + format = "RAM {}%"; + interval = 2; + }; + + backlight = { + format = "LGT {percent}%"; + scroll-step = 5; + }; + + battery = { + states = { + low = 15; }; + format = "BAT {capacity}%"; + format-charging = "BAT+ {capacity}%"; + format-plugged = "BAT+ {capacity}%"; + format-low = "BAT! {capacity}%"; + interval = 5; + }; - tray = { - icon-size = 16; - spacing = 10; - }; + wireplumber = { + scroll-step = 5; + format = "VOL {volume}%"; + format-muted = "muted"; + on-click = "${lib.getExe' pkgs.wireplumber "wpctl"} set-mute @DEFAULT_AUDIO_SINK@ toggle"; + on-click-right = "${lib.getExe pkgs.pavucontrol}"; + }; - clock = { - format-alt = "{:%Y-%m-%d %H:%M:%S}"; - interval = 1; - }; - - cpu = { - format = "CPU {usage}%"; - tooltip = false; - interval = 2; - }; - - memory = { - format = "RAM {}%"; - interval = 2; - }; - - backlight = { - format = "LGT {percent}%"; - scroll-step = 5; - }; - - battery = { - states = { - low = 15; - }; - format = "BAT {capacity}%"; - format-charging = "BAT+ {capacity}%"; - format-plugged = "BAT+ {capacity}%"; - format-low = "BAT! {capacity}%"; - interval = 5; - }; - - wireplumber = { - scroll-step = 5; - format = "VOL {volume}%"; - format-muted = "muted"; - on-click = "${lib.getExe' pkgs.wireplumber "wpctl"} set-mute @DEFAULT_AUDIO_SINK@ toggle"; - on-click-right = "${lib.getExe pkgs.pavucontrol}"; - }; - - "custom/gpu-usage" = { - exec = "cat /sys/class/hwmon/hwmon*/device/gpu_busy_percent"; - format = "GPU {}%"; - return-type = ""; - interval = 2; - }; - } - ]; + "custom/gpu-usage" = { + exec = "cat /sys/class/hwmon/hwmon*/device/gpu_busy_percent"; + format = "GPU {}%"; + return-type = ""; + interval = 2; + }; + }; }; } diff --git a/systems/fuji/default.nix b/systems/fuji/default.nix index 83e4a96..46fe50a 100644 --- a/systems/fuji/default.nix +++ b/systems/fuji/default.nix @@ -1,4 +1,4 @@ -{ pkgs, ... }: +{ pkgs, _utils, ... }: { imports = [ ./nvidia.nix @@ -11,14 +11,12 @@ wineWowPackages.waylandFull ]; - # hm = { - # wayland.windowManager.hyprland.settings = { - # monitor = "DP-1,3840x2160@144,0x0,1.5"; - # xwayland.force_zero_scaling = true; - # env = [ - # "GDK_SCALE,1.5" - # "XCURSOR_SIZE,24" - # ]; - # }; - # }; + hj.".config/hypr/hyprland.conf".text = _utils.toHyprconf { + monitor = "DP-1,3840x2160@144,0x0,1.5"; + xwayland.force_zero_scaling = true; + env = [ + "GDK_SCALE,1.5" + "XCURSOR_SIZE,24" + ]; + }; } diff --git a/systems/fuji/nvidia.nix b/systems/fuji/nvidia.nix index 78d2e26..d22d70c 100644 --- a/systems/fuji/nvidia.nix +++ b/systems/fuji/nvidia.nix @@ -2,6 +2,7 @@ lib, pkgs, config, + _utils, ... }: { @@ -37,10 +38,12 @@ }; }; - # hm.wayland.windowManager.hyprland.settings.env = [ - # "XDG_SESSION_TYPE,wayland" - # "GBM_BACKEND,nvidia-drm" - # "__GLX_VENDOR_LIBRARY_NAME,nvidia" - # "NVD_BACKEND,direct" - # ]; + hj.".config/hypr/hyprland.conf".text = _utils.toHyprconf { + env = [ + "XDG_SESSION_TYPE,wayland" + "GBM_BACKEND,nvidia-drm" + "__GLX_VENDOR_LIBRARY_NAME,nvidia" + "NVD_BACKEND,direct" + ]; + }; }