diff --git a/flake.lock b/flake.lock index 9e5e604..63a625a 100644 --- a/flake.lock +++ b/flake.lock @@ -92,12 +92,36 @@ "type": "github" } }, + "plasma-manager": { + "inputs": { + "home-manager": [ + "home-manager" + ], + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1762274591, + "narHash": "sha256-Vbhluvk15qwiyNDyPd9tjJh9gxIfUjbKVT79c05Pd3I=", + "owner": "nix-community", + "repo": "plasma-manager", + "rev": "6296d7100cc84b2ff732b7c103a50c2856974cf6", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "plasma-manager", + "type": "github" + } + }, "root": { "inputs": { "apple-silicon": "apple-silicon", "catppuccin": "catppuccin", "home-manager": "home-manager", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "plasma-manager": "plasma-manager" } } }, diff --git a/flake.nix b/flake.nix index 2fc145a..09b6feb 100644 --- a/flake.nix +++ b/flake.nix @@ -14,62 +14,97 @@ inputs.nixpkgs.follows = "nixpkgs"; }; + plasma-manager = { + url = "github:nix-community/plasma-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + inputs.home-manager.follows = "home-manager"; + }; + apple-silicon = { url = "github:nix-community/nixos-apple-silicon"; inputs.nixpkgs.follows = "nixpkgs"; }; }; - outputs = { nixpkgs, catppuccin, home-manager, apple-silicon, ... }: + outputs = + { + nixpkgs, + catppuccin, + home-manager, + plasma-manager, + apple-silicon, + ... + }: let - mkNixosSystem = { name, system, hostModule, extraModules ? [] }: + mkNixosSystem = + { + hostname, + system, + extraModules ? [ ], + }: nixpkgs.lib.nixosSystem { inherit system; specialArgs = { inherit catppuccin; }; modules = [ ./hosts/all.nix - hostModule + ./hosts/${hostname}.nix + ./hardware/${hostname}.nix catppuccin.nixosModules.catppuccin home-manager.nixosModules.home-manager - ] ++ extraModules; + { + home-manager.sharedModules = [ plasma-manager.homeModules.plasma-manager ]; + } + ] + ++ extraModules; }; - mkHomeConfig = { user, system }: + mkHomeConfig = + { + user, + hostname, + system, + }: home-manager.lib.homeManagerConfiguration { pkgs = import nixpkgs { inherit system; }; + home.username = user; + home.homeDirectory = "/home/${user}"; modules = [ ./home/all.nix + ./home/${hostname}.nix catppuccin.homeModules.catppuccin + home-manager.homeModules.home-manager + plasma-manager.homeModules.plasma-manager ]; }; in { nixosConfigurations = { peach = mkNixosSystem { - name = "peach"; + hostname = "peach"; system = "aarch64-linux"; - hostModule = ./hosts/peach.nix; extraModules = [ - ./hardware/peach.nix apple-silicon.nixosModules.default { nixpkgs.overlays = [ apple-silicon.overlays.apple-silicon-overlay ]; } ]; }; alien = mkNixosSystem { - name = "alien"; + hostname = "alien"; system = "x86_64-linux"; - hostModule = ./hosts/alien.nix; - extraModules = [ - ./hardware/alien.nix - ]; }; }; homeConfigurations = { - peach = mkHomeConfig { user = "sckova"; system = "aarch64-linux"; }; - alien = mkHomeConfig { user = "sckova"; system = "x86_64-linux"; }; + peach = mkHomeConfig { + user = "sckova"; + hostname = "peach"; + system = "aarch64-linux"; + }; + alien = mkHomeConfig { + user = "sckova"; + hostname = "alien"; + system = "x86_64-linux"; + }; }; }; } - diff --git a/home/alien.nix b/home/alien.nix new file mode 100644 index 0000000..b0cd9b4 --- /dev/null +++ b/home/alien.nix @@ -0,0 +1,23 @@ +{ config, pkgs, ... }: + +{ + catppuccin = { + accent = "mocha"; + flavor = "blue"; + }; + + programs.plasma = { + workspace = { + # lookAndFeel = "Catppuccin-Mocha-Blue"; + colorScheme = "CatppuccinMochaBlue"; + cursor.theme = "catppuccin-mocha-blue-cursors"; + splashScreen.theme = "Catpppuccin-Mocha-Blue"; + }; + + configFile = { + kdeglobals.KDE = { + DefaultDarkLookAndFeel = "Catppuccin-Mocha-Blue"; + DefaultLightLookAndFeel = "Catppuccin-Latte-Blue"; + }; + }; +} diff --git a/home/all.nix b/home/all.nix index e1fbfdd..13eb9c9 100755 --- a/home/all.nix +++ b/home/all.nix @@ -1,11 +1,6 @@ { config, pkgs, ... }: { - # Home Manager needs a bit of information about you and the - # paths it should manage. - home.username = "sckova"; - home.homeDirectory = "/home/sckova"; - home.packages = with pkgs; [ vesktop fish @@ -24,19 +19,137 @@ fzf wl-clipboard openmw + nixfmt-rfc-style kde-rounded-corners kdePackages.partitionmanager + + colloid-icon-theme + (catppuccin-kde.override { + flavour = [ + "latte" + "mocha" + ]; + accents = [ + "peach" + "blue" + ]; + }) ]; catppuccin = { enable = true; - flavor = "mocha"; + cursors = { + enable = true; + accent = "dark"; + }; firefox = { force = true; }; }; + programs.plasma = { + enable = true; + overrideConfig = true; + + session = { + sessionRestore.restoreOpenApplicationsOnLogin = "startWithEmptySession"; + }; + + workspace = { + iconTheme = "Colloid-Dark"; + windowDecorations = { + library = "org.kde.breeze"; + theme = "Breeze"; + }; + cursor.size = 24; + }; + + configFile = { + kwinrc.Desktops.Number = 3; + # kdeglobals.KDE.AutomaticLookAndFeel = true; + kwinrc.Round-Corners.ActiveOutlinePalette = 3; + kwinrc.Round-Corners.ActiveOutlineUseCustom = false; + kwinrc.Round-Corners.ActiveOutlineUsePalette = true; + kwinrc.Round-Corners.ActiveSecondOutlinePalette = 3; + kwinrc.Round-Corners.ActiveSecondOutlineUseCustom = false; + kwinrc.Round-Corners.ActiveSecondOutlineUsePalette = true; + kwinrc.Round-Corners.InactiveOutlinePalette = 2; + kwinrc.Round-Corners.InactiveOutlineUseCustom = false; + kwinrc.Round-Corners.InactiveOutlineUsePalette = true; + kwinrc.Round-Corners.InactiveSecondOutlinePalette = 2; + kwinrc.Round-Corners.InactiveSecondOutlineUseCustom = false; + kwinrc.Round-Corners.InactiveSecondOutlineUsePalette = true; + }; + + panels = [ + # Windows-like panel at the bottom + { + location = "bottom"; + height = 40; + hiding = "dodgewindows"; + lengthMode = "fit"; + floating = true; + alignment = "left"; + widgets = [ + # Or you can configure the widgets by adding the widget-specific options for it. + # See modules/widgets for supported widgets and options for these widgets. + # For example: + { + kickoff = { + sortAlphabetically = true; + # icon = "nix-snowflake-white"; + }; + } + # Adding configuration to the widgets can also for example be used to + # pin apps to the task-manager, which this example illustrates by + # pinning dolphin and konsole to the task-manager by default with widget-specific options. + { + iconTasks = { + launchers = [ + "applications:firefox.desktop" + "applications:org.kde.dolphin.desktop" + "applications:org.kde.konsole.desktop" + ]; + }; + } + # If no configuration is needed, specifying only the name of the + # widget will add them with the default configuration. + "org.kde.plasma.activitypager" + "org.kde.plasma.marginsseparator" + # If you need configuration for your widget, instead of specifying the + # the keys and values directly using the config attribute as shown + # above, plasma-manager also provides some higher-level interfaces for + # configuring the widgets. See modules/widgets for supported widgets + # and options for these widgets. The widgets below shows two examples + # of usage, one where we add a digital clock, setting 12h time and + # first day of the week to Sunday and another adding a systray with + # some modifications in which entries to show. + { + systemTray.items = { + # We explicitly show bluetooth and battery + shown = [ + "org.kde.plasma.battery" + "org.kde.plasma.bluetooth" + ]; + # And explicitly hide networkmanagement and volume + hidden = [ + "org.kde.plasma.networkmanagement" + "org.kde.plasma.volume" + ]; + }; + } + { + digitalClock = { + calendar.firstDayOfWeek = "sunday"; + time.format = "12h"; + }; + } + ]; + } + ]; + }; + # This value determines the Home Manager release that your # configuration is compatible with. This helps avoid breakage # when a new Home Manager release introduces backwards diff --git a/home/peach.nix b/home/peach.nix new file mode 100644 index 0000000..7538dcc --- /dev/null +++ b/home/peach.nix @@ -0,0 +1,98 @@ +{ config, pkgs, ... }: + +{ + catppuccin = { + accent = "peach"; + flavor = "mocha"; + }; + + programs.plasma = { + workspace = { + # lookAndFeel = "Catppuccin-Mocha-Peach"; + colorScheme = "CatppuccinMochaPeach"; + cursor.theme = "catppuccin-mocha-peach-cursors"; + splashScreen.theme = "Catpppuccin-Mocha-Peach"; + }; + + configFile = { + kdeglobals.KDE = { + DefaultDarkLookAndFeel = "Catppuccin-Mocha-Peach"; + DefaultLightLookAndFeel = "Catppuccin-Latte-Peach"; + }; + }; + + panels = [ + # Application name, Global menu and Song information and playback controls at the top + { + location = "top"; + height = 37; + widgets = [ + { + applicationTitleBar = { + behavior = { + activeTaskSource = "activeTask"; + }; + layout = { + elements = [ "windowTitle" ]; + horizontalAlignment = "left"; + showDisabledElements = "deactivated"; + verticalAlignment = "center"; + }; + overrideForMaximized.enable = false; + titleReplacements = [ + { + type = "regexp"; + originalTitle = "^Brave Web Browser$"; + newTitle = "Brave"; + } + { + type = "regexp"; + originalTitle = ''\\bDolphin\\b''; + newTitle = "File manager"; + } + ]; + windowTitle = { + font = { + bold = false; + fit = "fixedSize"; + size = 12; + }; + hideEmptyTitle = true; + margins = { + bottom = 0; + left = 10; + right = 5; + top = 0; + }; + source = "appName"; + }; + }; + } + "org.kde.plasma.appmenu" + "org.kde.plasma.panelspacer" + { + plasmusicToolbar = { + panelIcon = { + albumCover = { + useAsIcon = false; + radius = 8; + }; + icon = "view-media-track"; + }; + playbackSource = "auto"; + musicControls.showPlaybackControls = true; + songText = { + displayInSeparateLines = true; + maximumWidth = 640; + scrolling = { + behavior = "alwaysScroll"; + speed = 3; + }; + }; + }; + } + ]; + } + ]; + }; +} diff --git a/hosts/alien.nix b/hosts/alien.nix index c55a473..fea340c 100644 --- a/hosts/alien.nix +++ b/hosts/alien.nix @@ -1,15 +1,14 @@ { config, pkgs, lib, catppuccin, ... }: { networking.hostName = "alien"; - catppuccin = { - accent = "lavender"; - }; + catppuccin.accent = "blue"; home-manager.users.sckova = { imports = [ catppuccin.homeModules.catppuccin ]; }; boot.kernelPackages = pkgs.linuxPackages; + boot.loader.systemd-boot.consoleMode = "max"; programs = { gamescope = { @@ -32,8 +31,8 @@ modesetting.enable = true; powerManagement.enable = false; nvidiaSettings = false; - open = true; - # package = pkgs.linuxPackages.nvidiaPackages.stable; + open = false; + package = pkgs.linuxPackages.nvidiaPackages.stable; }; } diff --git a/hosts/all.nix b/hosts/all.nix index 0099305..ba1d73e 100755 --- a/hosts/all.nix +++ b/hosts/all.nix @@ -2,20 +2,34 @@ # your system. Help is available in the configuration.nix(5) man page # and in the NixOS manual (accessible by running ‘nixos-help’). -{ config, lib, pkgs, ... }: +{ + config, + lib, + pkgs, + ... +}: { - nix.settings.experimental-features = [ "nix-command" "flakes" ]; - + nix.settings.experimental-features = [ + "nix-command" + "flakes" + ]; + home-manager.useGlobalPkgs = true; home-manager.useUserPackages = true; home-manager.users.sckova = { imports = [ ../home/all.nix + ../home/${config.networking.hostName}.nix ]; }; - + boot = { + + plymouth = { + enable = true; + }; + loader = { timeout = 3; systemd-boot = { @@ -40,6 +54,11 @@ initrd.verbose = false; }; + catppuccin = { + enable = true; + flavor = "mocha"; + }; + networking.networkmanager.enable = true; time.timeZone = "America/New_York"; i18n.defaultLocale = "en_US.UTF-8"; @@ -72,7 +91,7 @@ enable = true; useRoutingFeatures = "client"; }; - }; + }; services.printing.enable = true; @@ -86,20 +105,24 @@ users.users.sckova = { isNormalUser = true; description = "Sean Kovacs"; - extraGroups = [ "networkmanager" "wheel" ]; - packages = with pkgs; []; + extraGroups = [ + "networkmanager" + "wheel" + ]; + packages = with pkgs; [ ]; hashedPassword = "$6$bvwRUFaJNMpH8rm3$FGDWFN6tBScJ/2DynAjnlZE8JRfyADN78d6c4GawxpAjyNLNE/AjQzMA09tLRqpKX7WnN5PIUZLAm2bT9/RbG0"; }; + security.sudo.wheelNeedsPassword = false; programs.bash = { - interactiveShellInit = '' - 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 - ''; + interactiveShellInit = '' + 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 + ''; }; programs.firefox.enable = true; @@ -142,4 +165,3 @@ system.stateVersion = "25.05"; # Did you read the comment? } - diff --git a/hosts/peach.nix b/hosts/peach.nix index 4916d0a..8ed8ec8 100644 --- a/hosts/peach.nix +++ b/hosts/peach.nix @@ -1,9 +1,7 @@ { config, pkgs, lib, catppuccin, ... }: { networking.hostName = "peach"; - catppuccin = { - accent = "peach"; - }; + catppuccin.accent = "peach"; home-manager.users.sckova = { imports = [ catppuccin.homeModules.catppuccin ];