diff --git a/flake.lock b/flake.lock index 2e67993..9b7960e 100644 --- a/flake.lock +++ b/flake.lock @@ -260,6 +260,27 @@ } }, "flake-parts_3": { + "inputs": { + "nixpkgs-lib": [ + "nix-fast-build", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1736143030, + "narHash": "sha256-+hu54pAoLDEZT9pjHlqL9DNzWz0NbUn8NEAHP7PQPzU=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "b905f6fc23a9051a6e1b741e1438dbfc0634c6de", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "flake-parts_4": { "inputs": { "nixpkgs-lib": "nixpkgs-lib_2" }, @@ -277,7 +298,7 @@ "type": "github" } }, - "flake-parts_4": { + "flake-parts_5": { "inputs": { "nixpkgs-lib": [ "nixThePlanet", @@ -452,7 +473,7 @@ }, "hercules-ci-effects": { "inputs": { - "flake-parts": "flake-parts_4", + "flake-parts": "flake-parts_5", "nixpkgs": "nixpkgs_7" }, "locked": { @@ -746,6 +767,28 @@ "type": "github" } }, + "nix-fast-build": { + "inputs": { + "flake-parts": "flake-parts_3", + "nixpkgs": [ + "nixpkgs" + ], + "treefmt-nix": "treefmt-nix_2" + }, + "locked": { + "lastModified": 1736592044, + "narHash": "sha256-HkaJeIFgxncLm8MC1BaWRTkge9b1/+mjPcbzXTRshoM=", + "owner": "Mic92", + "repo": "nix-fast-build", + "rev": "906af17fcd50c84615a4660d9c08cf89c01cef7d", + "type": "github" + }, + "original": { + "owner": "Mic92", + "repo": "nix-fast-build", + "type": "github" + } + }, "nix-formatter-pack": { "inputs": { "nixpkgs": [ @@ -836,7 +879,7 @@ }, "nixThePlanet": { "inputs": { - "flake-parts": "flake-parts_3", + "flake-parts": "flake-parts_4", "hercules-ci-effects": "hercules-ci-effects", "nixpkgs": "nixpkgs_8", "osx-kvm": "osx-kvm" @@ -1298,12 +1341,13 @@ "lix-eval-jobs": "lix-eval-jobs", "lix-module": "lix-module", "mobile-nixos": "mobile-nixos", + "nix-fast-build": "nix-fast-build", "nix-on-droid": "nix-on-droid", "nixDarwin": "nixDarwin", "nixThePlanet": "nixThePlanet", "nixosHardware": "nixosHardware", "nixpkgs": "nixpkgs_9", - "treefmt-nix": "treefmt-nix_2", + "treefmt-nix": "treefmt-nix_3", "vscode-server": "vscode-server" } }, @@ -1448,6 +1492,27 @@ } }, "treefmt-nix_2": { + "inputs": { + "nixpkgs": [ + "nix-fast-build", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1736154270, + "narHash": "sha256-p2r8xhQZ3TYIEKBoiEhllKWQqWNJNoT9v64Vmg4q8Zw=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "13c913f5deb3a5c08bb810efd89dc8cb24dd968b", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + }, + "treefmt-nix_3": { "inputs": { "nixpkgs": [ "nixpkgs" diff --git a/flake.nix b/flake.nix index 34a3717..ff70299 100644 --- a/flake.nix +++ b/flake.nix @@ -59,6 +59,10 @@ }; catppuccin.url = "github:catppuccin/nix"; emacs-overlay.url = "github:nix-community/emacs-overlay"; + nix-fast-build = { + url = "github:Mic92/nix-fast-build"; + inputs.nixpkgs.follows = "nixpkgs"; + }; }; outputs = diff --git a/hmModules/emacs/init.el b/hmModules/emacs/init.el index 19ac094..047e4d3 100644 --- a/hmModules/emacs/init.el +++ b/hmModules/emacs/init.el @@ -1016,41 +1016,26 @@ This is meant to be an helper to be called from the window manager." ;;; Experiments, remove from here -(defun ccr/test (niri-socket) - "Select a window and focus it based on `niri msg` output." + +(defun ccr/test () + "test" (interactive) - (let* ((niri-output (ccr/niri-get-windows niri-socket)) - (display-list (mapcar (lambda (entry) - (let ((title (cdr (assoc 'title entry))) - (app-id (cdr (assoc 'app_id entry))) - (id (cdr (assoc 'id entry)))) - (cons (format "%s - %s" title app-id) id))) - niri-output))) - (with-selected-frame - (make-frame '((name . "Emacs Selector") - (minibuffer . only) - (fullscreen . 0) - (undecorated . t) - (internal-border-width . 10) - (width . 120) - (height . 20))) - (unwind-protect - (let* ((entry (completing-read "Select window: " (mapcar #'car display-list) nil t "")) - (entry-id (cdr (assoc entry display-list))) ;; Get the ID associated with the selected entry - (command (format "NIRI_SOCKET=\"%s\" niri msg action focus-window --id %s" niri-socket entry-id))) - (message command) - (shell-command command)) - (delete-frame))))) + (with-selected-frame + (make-frame '((name . "Emacs Selector") + (minibuffer . only) + (fullscreen . 0) ; no fullscreen + (undecorated . t) ; remove title bar + ;;(auto-raise . t) ; focus on this frame + ;;(tool-bar-lines . 0) + ;;(menu-bar-lines . 0) + (internal-border-width . 10) + (width . 50) + (height . 10))) + (unwind-protect + (completing-read "ciao " '("foo" "bar" "pippo") nil t "") + (delete-frame)))) -(defun ccr/niri-get-windows (niri-socket) - "Esegue `niri msg --json windows` e parse l'output JSON in una alist." - (let* ((command (format "NIRI_SOCKET=\"%s\" niri msg --json windows" niri-socket)) - (output (shell-command-to-string command)) - (json-object-type 'alist) ; Usa alist per rappresentare gli oggetti JSON - (parsed-json (json-read-from-string output))) - parsed-json)) - (provide 'init) ;;; init.el ends here diff --git a/hmModules/gpg/default.nix b/hmModules/gpg/default.nix index f245f26..a894c90 100644 --- a/hmModules/gpg/default.nix +++ b/hmModules/gpg/default.nix @@ -2,13 +2,25 @@ { services.gpg-agent = { enable = true; - pinentryPackage = pkgs.pinentry-rofi.override { - rofi = pkgs.rofi-wayland; - }; - extraConfig = '' - allow-emacs-pinentry - allow-loopback-pinentry - ''; + enableSshSupport = true; + extraConfig = + let + pinentryRofi = pkgs.writeShellApplication { + name = "pinentry-rofi-with-env"; + runtimeInputs = with pkgs; [ + coreutils + rofi-wayland + ]; + text = '' + "${pkgs.pinentry-rofi}/bin/pinentry-rofi" "$@" + ''; + }; + in + '' + allow-emacs-pinentry + allow-loopback-pinentry + pinentry-program ${pinentryRofi}/bin/pinentry-rofi-with-env + ''; }; programs.gpg = { diff --git a/hmModules/hyprland/default.nix b/hmModules/hyprland/default.nix index 1958349..2596638 100644 --- a/hmModules/hyprland/default.nix +++ b/hmModules/hyprland/default.nix @@ -1,7 +1,6 @@ { config, pkgs, - lib, ... }: let @@ -53,34 +52,29 @@ in services.udiskie.enable = true; - home.pointerCursor = { - gtk.enable = true; - x11.enable = true; - package = pkgs.catppuccin-cursors; - name = "catppuccin-mocha-sapphire"; - size = 38; - }; - gtk = { enable = true; - theme = { - name = "Catppuccin-GTK-Purple-Dark-Compact"; - package = pkgs.magnetic-catppuccin-gtk.override { - accent = [ "purple" ]; - shade = "dark"; - size = "compact"; - }; - }; + # font.name = lib.mkForce "Sans,Symbols Nerd Font"; iconTheme = { name = "Adwaita"; package = pkgs.adwaita-icon-theme; }; + cursorTheme = { + name = "catppuccin-mocha-sapphire"; + package = pkgs.catppuccin-cursors; + size = 38; + }; }; qt = { enable = true; }; + home.file.".icons/catppuccin-mocha-sapphire" = { + source = "${pkgs.catppuccin-cursors.mochaSapphire}/share/icons/catppuccin-mocha-sapphire-cursors"; + recursive = true; + }; + wayland.windowManager.hyprland = { enable = true; plugins = with pkgs.hyprlandPlugins; [ diff --git a/hmModules/niri/config.kdl b/hmModules/niri/config.kdl index 43f7a4f..7d25a06 100644 --- a/hmModules/niri/config.kdl +++ b/hmModules/niri/config.kdl @@ -301,18 +301,9 @@ window-rule { } window-rule { - match title=r#"^Emacs Selector$"# - opacity 0.95 - open-floating true - open-focused true + match app-id=r#"^Emacs Selector$"# } -window-rule { - match title=r#"^bTop$"# - opacity 0.95 - open-floating true - open-focused true -} @@ -343,9 +334,9 @@ binds { Mod+M { spawn "emacsclient" "-c" "--eval" "(notmuch-search \"tag:new\")"; } Mod+G { spawn "emacsclient" "-c" "--eval" "(switch-to-buffer (gptel \"*ChatGPT*\"))"; } Mod+Shift+C { spawn "emacsclient" "-c" "--eval" "(org-roam-dailies-capture-today)"; } - Mod+Alt+L { spawn "swaylock"; } + Super+Alt+L { spawn "swaylock"; } Mod+Space { spawn "rofi" "-show" "menu" "-modi" "menu:rofi-power-menu"; } - Mod+Ctrl+b { spawn "foot" "--title='bTop'" "-W" "210x60" "btop";} + // Example volume keys mappings for PipeWire & WirePlumber. // The allow-when-locked=true property makes them work even when the session is locked. diff --git a/hmModules/swayidle/default.nix b/hmModules/swayidle/default.nix index 4db2310..ccd150b 100644 --- a/hmModules/swayidle/default.nix +++ b/hmModules/swayidle/default.nix @@ -48,4 +48,10 @@ } ]; }; + + # Otherwise it will start only after Sway and will not work with Hyprland + systemd.user.services.swayidle = { + Unit.PartOf = lib.mkForce [ ]; + Install.WantedBy = lib.mkForce [ "graphical-session-pre.target" ]; + }; } diff --git a/hosts/default.nix b/hosts/default.nix index b76a20d..9b4c7c9 100644 --- a/hosts/default.nix +++ b/hosts/default.nix @@ -14,22 +14,20 @@ deltaflyer = { nixpkgs = let - # keep in sync with https://github.com/mobile-nixos/mobile-nixos/blob/development/npins/sources.json - rev = "d3c42f187194c26d9f0309a8ecc469d6c878ce33"; + # keep in sync with https://github.com/NixOS/mobile-nixos/blob/development/pkgs.nix + rev = "44d0940ea560dee511026a53f0e2e2cde489b4d4"; in builtins.getFlake "github:NixOS/nixpkgs/${rev}"; extraHmModules = [ - inputs.catppuccin.homeManagerModules.catppuccin + # inputs.ccrEmacs.hmModules.default ]; vpn = { ip = "10.100.0.5"; publicKey = "6bzmBx2b5yzMdW0aK0KapoBesNcxTv5+qdo+pGmG+jc="; }; - # homeManager = builtins.getFlake "github:nix-community/home-manager/670d9ecc3e46a6e3265c203c2d136031a3d3548e"; + homeManager = builtins.getFlake "github:nix-community/home-manager/670d9ecc3e46a6e3265c203c2d136031a3d3548e"; extraModules = [ (import "${inputs.mobile-nixos}/lib/configuration.nix" { device = "oneplus-fajita"; }) - inputs.catppuccin.nixosModules.catppuccin - inputs.lix-module.nixosModules.default ]; secrets = { "deltaflyer-wireguard-private-key" = { }; diff --git a/hosts/deltaflyer/default.nix b/hosts/deltaflyer/default.nix index 7e68982..70f479f 100644 --- a/hosts/deltaflyer/default.nix +++ b/hosts/deltaflyer/default.nix @@ -30,13 +30,6 @@ # INSECURE STUFF FIRST # Users and hardcoded passwords. { - nixpkgs.overlays = [ - (prev: final: { - gcc7 = final.gcc; - gcc8 = final.gcc; - }) - ]; - users.users.root.password = "nixos"; # users.users.ccr.password = "1234"; @@ -73,13 +66,11 @@ "git" "shell" "helix" - # "hyprland" - "niri" + "hyprland" "emacs" "firefox" "mpv" "xdg" - "catppuccin" ]; extraGroups = [ "dialout" @@ -108,18 +99,18 @@ ccr.extraModules = [ { programs.fish.loginShellInit = '' - pgrep niri >/dev/null || exec niri-session + pgrep Hypr >/dev/null || exec dbus-run-session Hyprland + ''; + wayland.windowManager.hyprland.extraConfig = lib.mkAfter '' + monitor = DSI-1, 1080x2340, 0x0, 2, transform, 1 + input { + touchdevice { + transform = 1 + } + } + bind = $mod, r, exec, rotate-screen hor + bind = $mod SHIFT, r, exec, rotate-screen ver ''; - # wayland.windowManager.hyprland.extraConfig = lib.mkAfter '' - # monitor = DSI-1, 1080x2340, 0x0, 2, transform, 1 - # input { - # touchdevice { - # transform = 1 - # } - # } - # bind = $mod, r, exec, rotate-screen hor - # bind = $mod SHIFT, r, exec, rotate-screen ver - # ''; home.packages = let rotateScript = pkgs.writeShellApplication { diff --git a/hosts/deltaflyer/plasma-mobile.nix b/hosts/deltaflyer/plasma-mobile.nix index 11eb446..35c6f86 100644 --- a/hosts/deltaflyer/plasma-mobile.nix +++ b/hosts/deltaflyer/plasma-mobile.nix @@ -3,7 +3,6 @@ # { lib, - pkgs, ... }: { @@ -17,38 +16,35 @@ # # desktopManager.plasma5.mobile.enable = true; - displayManager.autoLogin = { - enable = true; - user = "ccr"; - }; + # displayManager.autoLogin = { + # enable = true; + # }; - displayManager.session = [ - { - manage = "desktop"; - name = "niri"; - start = '' - ${pkgs.niri}/bin/niri-session & - waitPID=$! - ''; - } - ]; + # displayManager.session = [{ + # manage = "desktop"; + # name = "hyprland"; + # start = '' + # ${pkgs.hyprland}/bin/Hyprland & + # waitPID=$! + # ''; + # }]; - displayManager.defaultSession = "niri"; + # displayManager.defaultSession = "hyprland"; - displayManager.lightdm = { - enable = true; - # Workaround for autologin only working at first launch. - # A logout or session crashing will show the login screen otherwise. - extraSeatDefaults = '' - session-cleanup-script=${pkgs.procps}/bin/pkill -P1 -fx ${pkgs.lightdm}/sbin/lightdm - ''; - }; + # displayManager.lightdm = { + # enable = true; + # # Workaround for autologin only working at first launch. + # # A logout or session crashing will show the login screen otherwise. + # extraSeatDefaults = '' + # session-cleanup-script=${pkgs.procps}/bin/pkill -P1 -fx ${pkgs.lightdm}/sbin/lightdm + # ''; + # }; libinput.enable = true; }; hardware.bluetooth.enable = true; - hardware.pulseaudio.enable = lib.mkDefault false; # mkDefault to help out users wanting pipewire + hardware.pulseaudio.enable = lib.mkDefault true; # mkDefault to help out users wanting pipewire networking.networkmanager.enable = true; networking.wireless.enable = false; powerManagement.enable = true; diff --git a/modules/nix/default.nix b/modules/nix/default.nix index 49227c9..a46e84e 100644 --- a/modules/nix/default.nix +++ b/modules/nix/default.nix @@ -8,13 +8,12 @@ { nixpkgs.overlays = [ (final: _: { - nix-eval-jobs = - (fleetFlake.inputs.lix-eval-jobs.packages.${final.system}.nix-eval-jobs.override { - nix = final.nix; - }) - // { - nix = final.nix; - }; + nix-fast-build = fleetFlake.inputs.nix-fast-build.packages.${final.system}.nix-fast-build // { + nix = final.nix; + }; + nix-eval-job = fleetFlake.inputs.lix-eval-jobs.packages.${final.system}.nix-eval-jobs // { + nix = final.nix; + }; }) ];