From 890b05d35259860f65908593fcf2b7be79612010 Mon Sep 17 00:00:00 2001 From: marc Date: Sat, 19 Nov 2022 11:58:21 +0100 Subject: [PATCH] Unified home and system modules! --- flake.nix | 52 ++++------ home/hosts/kopavogur.nix | 11 --- home/hosts/reykjavik.nix | 19 ---- home/modules/app/default.nix | 9 -- home/modules/default.nix | 11 --- home/modules/desktop/default.nix | 8 -- home/modules/dev/default.nix | 7 -- home/modules/dev/git.nix | 24 ----- home/modules/editors/default.nix | 7 -- home/modules/editors/emacs.nix | 14 --- home/modules/shell/default.nix | 30 ------ home/profiles/common.nix | 17 ---- home/profiles/default.nix | 9 -- home/profiles/desktop.nix | 49 ---------- home/profiles/gaming.nix | 24 ----- hosts/kopavogur/default.nix | 46 +++++++++ .../hosts => hosts}/kopavogur/hardware.nix | 0 {system/hosts => hosts}/kopavogur/readme.org | 0 hosts/reykjavik/default.nix | 50 ++++++++++ .../hosts => hosts}/reykjavik/hardware.nix | 0 {system/hosts => hosts}/reykjavik/nvidia.nix | 0 {system/hosts => hosts}/reykjavik/readme.org | 0 modules/app/alacritty.nix | 11 +-- {home/modules => modules}/app/discord.nix | 2 +- {home/modules => modules}/app/spotify.nix | 8 +- {system/profiles => modules}/common.nix | 21 +++- modules/desktop/desktop.nix | 68 +++++++++++++ {home/modules => modules}/desktop/i3.nix | 95 +++++++++++++------ {home/modules => modules}/desktop/polybar.nix | 18 ++-- modules/dev/git.nix | 27 ++++++ {system/modules => modules}/editors/emacs.nix | 17 +--- modules/gaming/lutris.nix | 15 +++ .../gaming.nix => modules/gaming/steam.nix | 8 +- modules/options.nix | 37 +++----- modules/shell/utils.nix | 22 +++++ {home/modules => modules}/shell/zsh.nix | 14 ++- .../modules => modules/system}/bluetooth.nix | 7 +- modules/system/tailscale.nix | 15 +++ system/hosts/kopavogur/default.nix | 28 ------ system/hosts/reykjavik/default.nix | 37 -------- system/modules/default.nix | 9 -- system/modules/editors/default.nix | 7 -- system/modules/tailscale.nix | 16 ---- system/profiles/default.nix | 9 -- system/profiles/desktop.nix | 77 --------------- 45 files changed, 389 insertions(+), 566 deletions(-) delete mode 100644 home/hosts/kopavogur.nix delete mode 100644 home/hosts/reykjavik.nix delete mode 100644 home/modules/app/default.nix delete mode 100644 home/modules/default.nix delete mode 100644 home/modules/desktop/default.nix delete mode 100644 home/modules/dev/default.nix delete mode 100644 home/modules/dev/git.nix delete mode 100644 home/modules/editors/default.nix delete mode 100644 home/modules/editors/emacs.nix delete mode 100644 home/modules/shell/default.nix delete mode 100644 home/profiles/common.nix delete mode 100644 home/profiles/default.nix delete mode 100644 home/profiles/desktop.nix delete mode 100644 home/profiles/gaming.nix create mode 100644 hosts/kopavogur/default.nix rename {system/hosts => hosts}/kopavogur/hardware.nix (100%) rename {system/hosts => hosts}/kopavogur/readme.org (100%) create mode 100644 hosts/reykjavik/default.nix rename {system/hosts => hosts}/reykjavik/hardware.nix (100%) rename {system/hosts => hosts}/reykjavik/nvidia.nix (100%) rename {system/hosts => hosts}/reykjavik/readme.org (100%) rename {home/modules => modules}/app/discord.nix (86%) rename {home/modules => modules}/app/spotify.nix (58%) rename {system/profiles => modules}/common.nix (68%) create mode 100644 modules/desktop/desktop.nix rename {home/modules => modules}/desktop/i3.nix (76%) rename {home/modules => modules}/desktop/polybar.nix (64%) create mode 100644 modules/dev/git.nix rename {system/modules => modules}/editors/emacs.nix (85%) create mode 100644 modules/gaming/lutris.nix rename system/profiles/gaming.nix => modules/gaming/steam.nix (70%) create mode 100644 modules/shell/utils.nix rename {home/modules => modules}/shell/zsh.nix (85%) rename {system/modules => modules/system}/bluetooth.nix (67%) create mode 100644 modules/system/tailscale.nix delete mode 100644 system/hosts/kopavogur/default.nix delete mode 100644 system/hosts/reykjavik/default.nix delete mode 100644 system/modules/default.nix delete mode 100644 system/modules/editors/default.nix delete mode 100644 system/modules/tailscale.nix delete mode 100644 system/profiles/default.nix delete mode 100644 system/profiles/desktop.nix diff --git a/flake.nix b/flake.nix index cb62139..d31ff60 100644 --- a/flake.nix +++ b/flake.nix @@ -32,9 +32,7 @@ specialArgs = { inherit lib inputs system; }; modules = [ - ./system/modules - ./system/profiles - ./system/hosts/reykjavik + ./hosts/reykjavik { imports = @@ -43,44 +41,28 @@ ++ (lib.my.mapModulesRec' (toString ./modules) import); } + ]; + }; + + # - Kopavogur ---------------------------- + kopavogur = lib.nixosSystem { + inherit system; + inherit pkgs; + specialArgs = { inherit lib inputs system; }; + modules = [ + + ./hosts/kopavogur + { - home-manager.users.marc = { - imports = [ - ./home/modules - ./home/profiles - ./home/hosts/reykjavik.nix - ]; - }; + imports = + [ inputs.home-manager.nixosModules.home-manager ] + # All my personal modules + ++ (lib.my.mapModulesRec' (toString ./modules) import); } ]; }; - # - Kopavogur ---------------------------- - # kopavogur = lib.nixosSystem { - # inherit system; - # inherit pkgs; - # modules = [ - - # ./system/modules - # ./system/profiles - # ./system/hosts/kopavogur - - # home-manager.nixosModules.home-manager { - # home-manager.useGlobalPkgs = true; - # home-manager.useUserPackages = true; - # home-manager.users.marc = { - # imports = [ - # ./home/modules - # ./home/profiles - # ./home/hosts/kopavogur.nix - # ]; - # }; - # } - - # ]; - # }; - }; }; } diff --git a/home/hosts/kopavogur.nix b/home/hosts/kopavogur.nix deleted file mode 100644 index f92b9b8..0000000 --- a/home/hosts/kopavogur.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ ... }: - -{ - home.stateVersion = "22.05"; - - samfelag = { - profiles = { - desktop.enable = true; - }; - }; -} diff --git a/home/hosts/reykjavik.nix b/home/hosts/reykjavik.nix deleted file mode 100644 index 5e1cc7b..0000000 --- a/home/hosts/reykjavik.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ ... }: - -{ - home.stateVersion = "22.05"; - - samfelag = { - modules = { - app = { - discord.enable = true; - spotify.enable = true; - }; - editors.emacs.enable = true; - }; - profiles = { - desktop.enable = true; - gaming.enable = true; - }; - }; -} diff --git a/home/modules/app/default.nix b/home/modules/app/default.nix deleted file mode 100644 index 034fc4a..0000000 --- a/home/modules/app/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ ... }: - -{ - imports = [ - # ./alacritty.nix - ./discord.nix - ./spotify.nix - ]; -} diff --git a/home/modules/default.nix b/home/modules/default.nix deleted file mode 100644 index 3837f2c..0000000 --- a/home/modules/default.nix +++ /dev/null @@ -1,11 +0,0 @@ -{ ... }: - -{ - imports = [ - ./app - ./desktop - ./dev - ./editors - ./shell - ]; -} diff --git a/home/modules/desktop/default.nix b/home/modules/desktop/default.nix deleted file mode 100644 index f1fba6b..0000000 --- a/home/modules/desktop/default.nix +++ /dev/null @@ -1,8 +0,0 @@ -{ ... }: - -{ - imports = [ - ./i3.nix - ./polybar.nix - ]; -} diff --git a/home/modules/dev/default.nix b/home/modules/dev/default.nix deleted file mode 100644 index 8b6bf57..0000000 --- a/home/modules/dev/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ ... }: - -{ - imports = [ - ./git.nix - ]; -} diff --git a/home/modules/dev/git.nix b/home/modules/dev/git.nix deleted file mode 100644 index 67e7581..0000000 --- a/home/modules/dev/git.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ config, lib, pkgs, ... }: - -let - cfg = config.samfelag.modules.dev.git; -in { - - options.samfelag.modules.dev.git = { - enable = lib.mkEnableOption "git config"; - }; - - config = lib.mkIf cfg.enable { - programs.git = { - enable = true; - - userName = "marc"; - userEmail = "marc@sastre.cat"; - - extraConfig = { - init.defaultBranch = "main"; - }; - }; - }; - -} diff --git a/home/modules/editors/default.nix b/home/modules/editors/default.nix deleted file mode 100644 index e87e46d..0000000 --- a/home/modules/editors/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ ... }: - -{ - imports = [ - ./emacs.nix - ]; -} diff --git a/home/modules/editors/emacs.nix b/home/modules/editors/emacs.nix deleted file mode 100644 index e410df2..0000000 --- a/home/modules/editors/emacs.nix +++ /dev/null @@ -1,14 +0,0 @@ -{ config, inputs, lib, options, pkgs, ... }: - -with lib; -let - cfg = config.samfelag.modules.editors.emacs; -in { - options.samfelag.modules.editors.emacs = { - enable = mkEnableOption "emacs"; - }; - - config = mkIf cfg.enable { - # xdg.configFile."doom".src = ../../../config/doom; - }; -} diff --git a/home/modules/shell/default.nix b/home/modules/shell/default.nix deleted file mode 100644 index 430c29b..0000000 --- a/home/modules/shell/default.nix +++ /dev/null @@ -1,30 +0,0 @@ -{ config, lib, pkgs, ... }: - -with lib; -let - cfg = config.samfelag.modules.shell; -in -{ - imports = [ - ./zsh.nix - ]; - - options.samfelag.modules.shell = { - enable = mkEnableOption "Basic shell config"; - }; - - config = mkIf cfg.enable { - - home.packages = with pkgs; [ - bat - exa - fd - fzf - jq - ripgrep - tldr - ]; - - xdg.configFile."shell".source = ../../../config/.config/shell; - }; -} diff --git a/home/profiles/common.nix b/home/profiles/common.nix deleted file mode 100644 index 2d41ecb..0000000 --- a/home/profiles/common.nix +++ /dev/null @@ -1,17 +0,0 @@ -{ config, lib, pkgs, ... }: - -with lib; -{ - samfelag.modules = { - - shell = { - enable = true; - zsh = { - enable = true; - }; - }; - - dev.git.enable = true; - }; - -} diff --git a/home/profiles/default.nix b/home/profiles/default.nix deleted file mode 100644 index 29942d5..0000000 --- a/home/profiles/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ ... }: - -{ - imports = [ - ./common.nix - ./desktop.nix - ./gaming.nix - ]; -} diff --git a/home/profiles/desktop.nix b/home/profiles/desktop.nix deleted file mode 100644 index 330650d..0000000 --- a/home/profiles/desktop.nix +++ /dev/null @@ -1,49 +0,0 @@ -{ config, lib, pkgs, ... }: - -with lib; -let - cfg = config.samfelag.profiles.desktop; - laptopPkgs = with pkgs; [ - ]; -in -{ - options.samfelag.profiles.desktop = { - enable = mkEnableOption "desktop profile"; - laptop = mkOption { - description = "Add packages required when machine is a laptop"; - type = types.bool; - default = false; - }; - }; - - config = mkIf cfg.enable { - - # - Dependencies ----------------------------- - - samfelag.modules = { - desktop = { - i3 = { - enable = true; - launcher.command = "${pkgs.rofi}/bin/rofi rofi -show run"; - terminal.command = "${pkgs.alacritty}/bin/alacritty"; - browser.command = "${pkgs.firefox}/bin/firefox"; - locker.command = "${pkgs.i3lock-blur}/bin/i3lock-color -c 808F85 && sleep 1"; - }; - - polybar.enable = true; - }; - }; - - services.picom.enable = true; - - home.packages = with pkgs; [ - rofi - firefox - - brightnessctl - playerctl - feh - ] ++ optionals cfg.laptop laptopPkgs; - - }; -} diff --git a/home/profiles/gaming.nix b/home/profiles/gaming.nix deleted file mode 100644 index bf85332..0000000 --- a/home/profiles/gaming.nix +++ /dev/null @@ -1,24 +0,0 @@ -{ config, lib, pkgs, ... }: - -with lib; -let - cfg = config.samfelag.profiles.gaming; -in -{ - options.samfelag.profiles.gaming = { - enable = mkEnableOption "gaming profile"; - }; - - config = mkIf cfg.enable { - - # - Dependencies ----------------------------- - - samfelag.modules = { - }; - - home.packages = with pkgs; [ - lutris - ]; - - }; -} diff --git a/hosts/kopavogur/default.nix b/hosts/kopavogur/default.nix new file mode 100644 index 0000000..6a356d1 --- /dev/null +++ b/hosts/kopavogur/default.nix @@ -0,0 +1,46 @@ +{ config, pkgs, lib, ... }: + +{ + imports = [ + ./hardware.nix + ]; + + # - Basic -------------------------------------- + + user.name = "marc"; + user.shell = pkgs.zsh; + networking.hostName = "kopavogur"; + + # - Bootloader --------------------------------- + + boot.loader.grub.enable = true; + boot.loader.grub.device = "/dev/sda"; + boot.loader.grub.useOSProber = true; + + # - Modules ------------------------------------ + + samfelag.modules = { + # - Common ----------------------------------- + # See modules/common.nix for common packages installed + + # - System ----------------------------------- + + # - Desktop ---------------------------------- + desktop = { + enable = true; + laptop = true; + + }; + + # - Editors and development ------------------ + editors.emacs.enable = true; + + dev.git.userName = "marc"; + dev.git.userEmail = "marc@sastre.cat"; + + # - Other apps ------------------------------- + app.spotify.enable = true; + + }; + +} diff --git a/system/hosts/kopavogur/hardware.nix b/hosts/kopavogur/hardware.nix similarity index 100% rename from system/hosts/kopavogur/hardware.nix rename to hosts/kopavogur/hardware.nix diff --git a/system/hosts/kopavogur/readme.org b/hosts/kopavogur/readme.org similarity index 100% rename from system/hosts/kopavogur/readme.org rename to hosts/kopavogur/readme.org diff --git a/hosts/reykjavik/default.nix b/hosts/reykjavik/default.nix new file mode 100644 index 0000000..3eb0af8 --- /dev/null +++ b/hosts/reykjavik/default.nix @@ -0,0 +1,50 @@ +{ config, pkgs, lib, ... }: + +{ + imports = [ + ./hardware.nix + ./nvidia.nix + ]; + + # - Basic -------------------------------------- + + user.name = "marc"; + user.shell = pkgs.zsh; + networking.hostName = "reykjavik"; + + # - Bootloader --------------------------------- + + boot.loader.systemd-boot.enable = true; + + # - Modules ------------------------------------ + + samfelag.modules = { + # - Common ----------------------------------- + # See modules/common.nix for common packages installed + + # - System ----------------------------------- + system.bluetooth.enable = true; + + # - Desktop ---------------------------------- + desktop = { + enable = true; + laptop = true; + + }; + + # - Editors and development ------------------ + editors.emacs.enable = true; + + dev.git.userName = "marc"; + dev.git.userEmail = "marc@sastre.cat"; + + # - Other apps ------------------------------- + app.spotify.enable = true; + + # - Gaming ----------------------------------- + gaming.lutris.enable = true; + gaming.steam.enable = true; + app.discord.enable = true; + }; + +} diff --git a/system/hosts/reykjavik/hardware.nix b/hosts/reykjavik/hardware.nix similarity index 100% rename from system/hosts/reykjavik/hardware.nix rename to hosts/reykjavik/hardware.nix diff --git a/system/hosts/reykjavik/nvidia.nix b/hosts/reykjavik/nvidia.nix similarity index 100% rename from system/hosts/reykjavik/nvidia.nix rename to hosts/reykjavik/nvidia.nix diff --git a/system/hosts/reykjavik/readme.org b/hosts/reykjavik/readme.org similarity index 100% rename from system/hosts/reykjavik/readme.org rename to hosts/reykjavik/readme.org diff --git a/modules/app/alacritty.nix b/modules/app/alacritty.nix index 24a64ea..2a29476 100644 --- a/modules/app/alacritty.nix +++ b/modules/app/alacritty.nix @@ -1,21 +1,18 @@ { config, lib, pkgs, ... }: -with lib; let cfg = config.samfelag.modules.app.alacritty; in { options.samfelag.modules.app.alacritty = { - enable = mkEnableOption "alacritty"; + enable = lib.mkEnableOption "alacritty"; }; - - config = mkIf cfg.enable { + config = lib.mkIf cfg.enable { fonts.fontconfig.enable = true; - home.packages = with pkgs; [ + hm.home.packages = with pkgs; [ alacritty (nerdfonts.override { fonts = [ "Iosevka" ]; }) ]; - - home.configFile."alacritty".source = ../../config/.config/alacritty; + hm.xdg.configFile."alacritty".source = ../../config/.config/alacritty; }; } diff --git a/home/modules/app/discord.nix b/modules/app/discord.nix similarity index 86% rename from home/modules/app/discord.nix rename to modules/app/discord.nix index bfa293b..8167cf7 100644 --- a/home/modules/app/discord.nix +++ b/modules/app/discord.nix @@ -10,7 +10,7 @@ in }; config = mkIf cfg.enable { - home.packages = with pkgs; [ + hm.home.packages = with pkgs; [ discord ]; }; diff --git a/home/modules/app/spotify.nix b/modules/app/spotify.nix similarity index 58% rename from home/modules/app/spotify.nix rename to modules/app/spotify.nix index 513ca16..e590720 100644 --- a/home/modules/app/spotify.nix +++ b/modules/app/spotify.nix @@ -1,16 +1,14 @@ { config, lib, pkgs, ... }: -with lib; let cfg = config.samfelag.modules.app.spotify; in { options.samfelag.modules.app.spotify = { - enable = mkEnableOption "spotify"; + enable = lib.mkEnableOption "spotify"; }; - - config = mkIf cfg.enable { - home.packages = with pkgs; [ + config = lib.mkIf cfg.enable { + hm.home.packages = with pkgs; [ spotify ]; }; diff --git a/system/profiles/common.nix b/modules/common.nix similarity index 68% rename from system/profiles/common.nix rename to modules/common.nix index 605e6f6..b93302b 100644 --- a/system/profiles/common.nix +++ b/modules/common.nix @@ -1,8 +1,15 @@ +# Common module +# ------------- +# All configuration common to ANY host is located here. +# General configuration and "bare minimum" tools + { config, pkgs, lib, ... }: { # - Nix ---------------------------------------- + system.stateVersion = "22.05"; + nix = { package = pkgs.nixFlakes; @@ -37,15 +44,19 @@ pciutils psmisc vim - zsh ]; - # - Other -------------------------------------- + # - Modules ------------------------------------ networking.networkmanager.enable = true; - networking.firewall.checkReversePath = "loose"; # See https://github.com/tailscale/tailscale/issues/4432 - samfelag.modules.tailscale.enable = true; - system.stateVersion = "22.05"; + samfelag.modules = { + shell.utils.enable = true; + shell.zsh.enable = true; + dev.git.enable = true; + + # May go away from common if not all hosts use it + system.tailscale.enable = true; + }; } diff --git a/modules/desktop/desktop.nix b/modules/desktop/desktop.nix new file mode 100644 index 0000000..0b0f301 --- /dev/null +++ b/modules/desktop/desktop.nix @@ -0,0 +1,68 @@ +{ config, lib, pkgs, ... }: + +with lib; +let + cfg = config.samfelag.modules.desktop; + laptopPkgs = with pkgs; [ + ]; +in +{ + options.samfelag.modules.desktop = { + + enable = mkEnableOption "desktop environment"; + + laptop = mkOption { + description = "Enable features for a laptop (trackpad, battery, etc...)"; + type = types.bool; + default = false; + }; + }; + + config = mkIf cfg.enable { + + # - Packages --------------------------------- + + environment.systemPackages = with pkgs; [ + pamixer + i3lock-blur + brightnessctl + playerctl + feh + rofi + firefox + ] ++ optionals cfg.laptop laptopPkgs; + + # - Audio ------------------------------------ + + sound.enable = true; + + hardware = { + pulseaudio = { + enable = true; + support32Bit = true; + package = pkgs.pulseaudioFull; + }; + }; + + # - Compositor ------------------------------- + + services.picom.enable = true; + + # - Modules ---------------------------------- + + samfelag.modules = { + app.alacritty.enable = true; + desktop.polybar.enable = true; + desktop.i3 = { + enable = true; + laptop = cfg.laptop; + launcher.command = "${pkgs.rofi}/bin/rofi rofi -show run"; + terminal.command = "${pkgs.alacritty}/bin/alacritty"; + browser.command = "${pkgs.firefox}/bin/firefox"; + locker.command = "${pkgs.i3lock-blur}/bin/i3lock-color -c 808F85 && sleep 1"; + }; + }; + + + }; +} diff --git a/home/modules/desktop/i3.nix b/modules/desktop/i3.nix similarity index 76% rename from home/modules/desktop/i3.nix rename to modules/desktop/i3.nix index 6814009..a7ea5a4 100644 --- a/home/modules/desktop/i3.nix +++ b/modules/desktop/i3.nix @@ -1,6 +1,6 @@ { config, lib, pkgs, ... }: -let +let cfg = config.samfelag.modules.desktop.i3; mod = "Mod4"; @@ -18,12 +18,24 @@ let }); system_mode = "System (l) lock, (e) logout, (s) suspend, (h) hibernate, (r) reboot, (Shift+s) shutdown"; + bg_colour = "#808F85"; + paths = { + wallpapers = ../../data/wallpapers; + }; + in { options.samfelag.modules.desktop.i3 = { enable = lib.mkEnableOption "i3 window manager"; + + laptop = lib.mkOption { + description = "Enable features for a laptop (trackpad, battery, etc...)"; + type = lib.types.bool; + default = false; + }; + launcher = lib.mkOption { type = cmdModule; }; @@ -42,15 +54,45 @@ in { # - Dependencies ----------------------------- - home.packages = with pkgs; [ + environment.systemPackages = with pkgs; [ (nerdfonts.override { fonts = [ "Iosevka" ]; }) ]; - xdg.dataFile."wallpapers".source = ../../../data/wallpapers; + hm.xdg.dataFile."wallpapers".source = paths.wallpapers; + + services.xserver = { + enable = true; + + libinput = lib.mkIf cfg.laptop { + enable = true; + touchpad.tapping = true; + }; + + desktopManager = { + xterm.enable = false; + }; + + displayManager = { + defaultSession = "none+i3"; + lightdm = { + enable = true; + greeters.mini = { + enable = true; + user = "marc"; + extraConfig = '' + [greeter] + show-sys-info = true + ''; + }; + }; + }; + + windowManager.i3.enable = true; + }; # - Configuration ---------------------------- - xsession.windowManager.i3 = { + hm.xsession.windowManager.i3 = { enable = true; config = { @@ -64,7 +106,7 @@ in { focus.followMouse = false; - bars = [ ]; + bars = [ ]; window = { border = 1; @@ -76,11 +118,10 @@ in { # outer = 5; # }; - startup = [ + startup = [ { command = "i3-msg workspace 1"; } { command = "systemctl --user restart polybar"; always = true; notification = false; } - { command = "feh --bg-center -B \"${bg_colour}\" -z --no-fehbg ${config.xdg.dataFile.wallpapers.source}/flors"; always = true; notification = false; } - + { command = "feh --bg-center -B \"${bg_colour}\" -z --no-fehbg ${paths.wallpapers}/flors"; always = true; notification = false; } ]; modes = { @@ -89,17 +130,17 @@ in { "j" = "resize grow height 10 px or 10 ppt"; "k" = "resize shrink height 10 px or 10 ppt"; "l" = "resize grow width 10 px or 10 ppt"; - + "Left" = "resize shrink width 10 px or 10 ppt"; "Down" = "resize grow height 10 px or 10 ppt"; "Up" = "resize shrink height 10 px or 10 ppt"; "Right" = "resize grow width 10 px or 10 ppt"; - + "Return" = "mode \"default\""; "Escape" = "mode \"default\""; }; - "${system_mode}" = { + "${system_mode}" = { "l" = "exec --no-startup-id ${cfg.locker.command}, mode \"default\""; "e" = "exec --no-startup-id i3-msg exit, mode \"default\""; "s" = "exec --no-startup-id ${cfg.locker.command} && systemctl suspend, mode \"default\""; @@ -138,18 +179,18 @@ in { # split orientation "${mod}+z" = "split h;exec notify-send 'tile horizontally'"; "${mod}+v" = "split v;exec notify-send 'tile vertically'"; - + # enter fullscreen mode for the focused container "${mod}+f" = "fullscreen toggle"; - + # change container layout (stacked, tabbed, toggle split) "${mod}+s" = "layout stacking"; "${mod}+w" = "layout tabbed"; "${mod}+e" = "layout toggle split"; - + # toggle tiling / floating "${mod}+Shift+space" = "floating toggle"; - + # focus the parent container "${mod}+a" = "focus parent"; @@ -163,18 +204,18 @@ in { # - Media ------------------------------ - # Pulse Audio controls - "XF86AudioRaiseVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5%"; - "XF86AudioLowerVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5%"; - "Shift+XF86AudioRaiseVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +1%"; - "Shift+XF86AudioLowerVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -1%"; - "XF86AudioMute" = "exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle"; - - # Media player controls - "XF86AudioPlay" = "exec playerctl play-pause"; - "XF86AudioPause" = "exec playerctl play-pause"; - "XF86AudioNext" = "exec playerctl next"; - "XF86AudioPrev" = "exec playerctl previous"; + # Pulse Audio controls + "XF86AudioRaiseVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +5%"; + "XF86AudioLowerVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -5%"; + "Shift+XF86AudioRaiseVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ +1%"; + "Shift+XF86AudioLowerVolume" = "exec --no-startup-id pactl set-sink-volume @DEFAULT_SINK@ -1%"; + "XF86AudioMute" = "exec --no-startup-id pactl set-sink-mute @DEFAULT_SINK@ toggle"; + + # Media player controls + "XF86AudioPlay" = "exec playerctl play-pause"; + "XF86AudioPause" = "exec playerctl play-pause"; + "XF86AudioNext" = "exec playerctl next"; + "XF86AudioPrev" = "exec playerctl previous"; "XF86AudioStop" = "exec playerctl stop"; # - Workspaces ------------------------- diff --git a/home/modules/desktop/polybar.nix b/modules/desktop/polybar.nix similarity index 64% rename from home/modules/desktop/polybar.nix rename to modules/desktop/polybar.nix index 252d9e7..6067414 100644 --- a/home/modules/desktop/polybar.nix +++ b/modules/desktop/polybar.nix @@ -10,6 +10,12 @@ let polybar top & polybar bottom & ''; + # Paths + paths = { + config = ../../config/.config/polybar/config.ini; + bars = ../../config/.config/polybar/bars; + scripts = ../../config/.config/polybar/scripts; + }; in { options.samfelag.modules.desktop.polybar = { @@ -20,19 +26,19 @@ in { # - Configuration ---------------------------- - home.packages = [ + environment.systemPackages = [ polybar_pkg ]; - xdg.configFile."polybar/config.ini".source = ../../../config/.config/polybar/config.ini; - xdg.configFile."polybar/bars".source = ../../../config/.config/polybar/bars; - xdg.configFile."polybar/scripts".source = ../../../config/.config/polybar/scripts; + hm.xdg.configFile."polybar/config.ini".source = paths.config; + hm.xdg.configFile."polybar/bars".source = paths.bars; + hm.xdg.configFile."polybar/scripts".source = paths.scripts; - systemd.user.services.polybar = { + hm.systemd.user.services.polybar = { Unit = { Description = "Polybar status bar"; PartOf = [ "tray.target" ]; - X-Restart-Triggers = [ "${config.xdg.configFile."polybar/config.ini".source}" ]; + X-Restart-Triggers = [ "${paths.config}" ]; }; Service = { diff --git a/modules/dev/git.nix b/modules/dev/git.nix new file mode 100644 index 0000000..bcbb740 --- /dev/null +++ b/modules/dev/git.nix @@ -0,0 +1,27 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.samfelag.modules.dev.git; +in +{ + options.samfelag.modules.dev.git = with lib.types; { + enable = lib.mkEnableOption "git"; + userName = lib.my.mkOpt str config.user.name; + userEmail = lib.my.mkOpt (nullOr str) null; + }; + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + git + ]; + hm.programs.git = { + enable = true; + + userName = cfg.userName; + userEmail = cfg.userEmail; + + extraConfig = { + init.defaultBranch = "main"; + }; + }; + }; +} diff --git a/system/modules/editors/emacs.nix b/modules/editors/emacs.nix similarity index 85% rename from system/modules/editors/emacs.nix rename to modules/editors/emacs.nix index d6439e7..3ea6b9c 100644 --- a/system/modules/editors/emacs.nix +++ b/modules/editors/emacs.nix @@ -92,20 +92,9 @@ in { fonts.fonts = [ pkgs.emacs-all-the-icons-fonts ]; - # env.PATH = [ "$XDG_CONFIG_HOME/emacs/bin" ]; + env.PATH = [ "$XDG_CONFIG_HOME/emacs/bin" ]; - environment.sessionVariables = rec { - XDG_CACHE_HOME = "$HOME/.cache"; - XDG_CONFIG_HOME = "$HOME/.config"; - XDG_BIN_HOME = "$HOME/.local/bin"; - XDG_DATA_HOME = "$HOME/.local/share"; - - PATH = [ - "$HOME/.config/emacs/bin" - ]; - }; - - home-manager.users.marc.xdg.configFile."doom".source = ../../../config/doom; + home-manager.users.marc.xdg.configFile."doom".source = ../../config/doom; system.userActivationScripts = { installDoomEmacs = '' @@ -113,7 +102,7 @@ in { echo $XDG_CONFIG_HOME echo $EMACS_FOLDER if [ ! -d "$EMACS_FOLDER" ]; then - ${pkgs.git}/bin/git clone --depth=1 --single-branch "https://github.com/doomemacs/doomemacs" "$EMACS_FOLDER" + ${pkgs.git}/bin/git clone --depth=1 --single-branch "https://github.com/doomemacs/doomemacs" "$EMACS_FOLDER" fi ''; }; diff --git a/modules/gaming/lutris.nix b/modules/gaming/lutris.nix new file mode 100644 index 0000000..71b797b --- /dev/null +++ b/modules/gaming/lutris.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.samfelag.modules.gaming.lutris; +in +{ + options.samfelag.modules.gaming.lutris = { + enable = lib.mkEnableOption "lutris"; + }; + config = lib.mkIf cfg.enable { + hm.home.packages = with pkgs; [ + lutris + ]; + }; +} diff --git a/system/profiles/gaming.nix b/modules/gaming/steam.nix similarity index 70% rename from system/profiles/gaming.nix rename to modules/gaming/steam.nix index 7f925e4..9ba25e9 100644 --- a/system/profiles/gaming.nix +++ b/modules/gaming/steam.nix @@ -1,14 +1,12 @@ { config, pkgs, lib, ... }: let - cfg = config.samfelag.profiles.gaming; + cfg = config.samfelag.modules.gaming.steam; in { - options.samfelag.profiles.gaming = { - - enable = lib.mkEnableOption "gaming profile"; + options.samfelag.modules.gaming.steam = { + enable = lib.mkEnableOption "steam"; }; - config = lib.mkIf cfg.enable { programs.steam = { enable = true; diff --git a/modules/options.nix b/modules/options.nix index 40f222b..f68374a 100644 --- a/modules/options.nix +++ b/modules/options.nix @@ -6,12 +6,7 @@ with lib.my; options = with types; { user = mkOpt attrs {}; - home = { - packages = mkOpt' (listOf package) [] "Packages to be installed at user level"; - file = mkOpt' attrs {} "Files to place directly in $HOME" ; - configFile = mkOpt' attrs {} "Files to place in $XDG_CONFIG_HOME"; - dataFile = mkOpt' attrs {} "Files to place in $XDG_DATA_HOME"; - }; + hm = mkOpt attrs {}; env = mkOption { # env = { PATH = ["$PATH" ./test]; TEST = "test"; } @@ -36,26 +31,6 @@ with lib.my; uid = 1000; }; - home-manager = { - # extraSpecialArgs = { inherit inputs; }; - useGlobalPkgs = true; - useUserPackages = true; - - users.${config.user.name} = { - home = { - file = mkAliasDefinitions options.home.file; - packages = mkAliasDefinitions options.home.packages; - # Necessary for home-manager to work with flakes, otherwise it will - # look for a nixpkgs channel. - stateVersion = config.system.stateVersion; - }; - xdg = { - configFile = mkAliasDefinitions options.home.configFile; - dataFile = mkAliasDefinitions options.home.dataFile; - }; - }; - }; - users.users.${config.user.name} = mkAliasDefinitions options.user; nix.settings = let users = [ "root" config.user.name ]; in { @@ -63,6 +38,16 @@ with lib.my; allowed-users = users; }; + hm.home.stateVersion = config.system.stateVersion; + + home-manager = { + # extraSpecialArgs = { inherit inputs; }; + useGlobalPkgs = true; + useUserPackages = true; + + users.${config.user.name} = mkAliasDefinitions options.hm; + }; + env.PATH = [ "$PATH" ]; environment.extraInit = diff --git a/modules/shell/utils.nix b/modules/shell/utils.nix new file mode 100644 index 0000000..1a4d8f2 --- /dev/null +++ b/modules/shell/utils.nix @@ -0,0 +1,22 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.samfelag.modules.shell.utils; +in +{ + options.samfelag.modules.shell.utils = { + enable = lib.mkEnableOption "Basic shell utils"; + }; + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ + bat + exa + fd + fzf + jq + ripgrep + tldr + ]; + hm.xdg.configFile."shell".source = ../../config/.config/shell; + }; +} diff --git a/home/modules/shell/zsh.nix b/modules/shell/zsh.nix similarity index 85% rename from home/modules/shell/zsh.nix rename to modules/shell/zsh.nix index 3554eb8..2611fb1 100644 --- a/home/modules/shell/zsh.nix +++ b/modules/shell/zsh.nix @@ -1,23 +1,21 @@ { config, lib, pkgs, ... }: -with lib; let cfg = config.samfelag.modules.shell.zsh; in { options.samfelag.modules.shell.zsh = { - enable = mkEnableOption "zsh configuration"; + enable = lib.mkEnableOption "zsh"; }; - config = mkIf cfg.enable { - - home.packages = with pkgs; [ + config = lib.mkIf cfg.enable { + environment.systemPackages = with pkgs; [ zsh zsh-powerlevel10k (nerdfonts.override { fonts = [ "Iosevka" ]; }) ]; - programs.zsh = { + hm.programs.zsh = { enable = true; dotDir = ".config/zsh"; @@ -32,7 +30,7 @@ in emulate bash -c ". $rc" done fi - + # Source zsh specific configuration if [[ -d $HOME/.config/shell/zsh ]]; then for rc in $HOME/.config/shell/zsh/*.zsh; do @@ -64,7 +62,7 @@ in ]; }; - xdg.configFile."zsh/.p10k.zsh".source = ../../../config/.config/zsh/.p10k.zsh; + hm.xdg.configFile."zsh/.p10k.zsh".source = ../../config/.config/zsh/.p10k.zsh; }; } diff --git a/system/modules/bluetooth.nix b/modules/system/bluetooth.nix similarity index 67% rename from system/modules/bluetooth.nix rename to modules/system/bluetooth.nix index 536bf3c..05661b2 100644 --- a/system/modules/bluetooth.nix +++ b/modules/system/bluetooth.nix @@ -1,17 +1,14 @@ { config, lib, pkgs, self, ... }: let - cfg = config.samfelag.modules.bluetooth; + cfg = config.samfelag.modules.system.bluetooth; in { - options.samfelag.modules.bluetooth = { + options.samfelag.modules.system.bluetooth = { enable = lib.mkEnableOption "bluetooth"; }; - config = lib.mkIf cfg.enable { - hardware.bluetooth.enable = true; services.blueman.enable = true; - }; } diff --git a/modules/system/tailscale.nix b/modules/system/tailscale.nix new file mode 100644 index 0000000..762c5fe --- /dev/null +++ b/modules/system/tailscale.nix @@ -0,0 +1,15 @@ +{ config, lib, pkgs, ... }: + +let + cfg = config.samfelag.modules.system.tailscale; +in +{ + options.samfelag.modules.system.tailscale = { + enable = lib.mkEnableOption "tailscale"; + }; + config = lib.mkIf cfg.enable { + # See https://github.com/tailscale/tailscale/issues/4432 + networking.firewall.checkReversePath = "loose"; + services.tailscale.enable = true; + }; +} diff --git a/system/hosts/kopavogur/default.nix b/system/hosts/kopavogur/default.nix deleted file mode 100644 index af17bc4..0000000 --- a/system/hosts/kopavogur/default.nix +++ /dev/null @@ -1,28 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./hardware.nix - ]; - - # - Basic -------------------------------------- - - networking.hostName = "kopavogur"; - - # samfelag.modules.user = { - # name = "marc"; - # }; - - # - Bootloader --------------------------------- - - boot.loader.grub.enable = true; - boot.loader.grub.device = "/dev/sda"; - boot.loader.grub.useOSProber = true; - - # - Services ----------------------------------- - - samfelag.profiles.desktop.enable = true; - - system.stateVersion = "22.05"; - -} diff --git a/system/hosts/reykjavik/default.nix b/system/hosts/reykjavik/default.nix deleted file mode 100644 index 05c124b..0000000 --- a/system/hosts/reykjavik/default.nix +++ /dev/null @@ -1,37 +0,0 @@ -{ config, pkgs, lib, ... }: - -{ - imports = [ - ./hardware.nix - ./nvidia.nix - ]; - - # - Basic -------------------------------------- - - user.name = "marc"; - networking.hostName = "reykjavik"; - - boot.loader.systemd-boot.enable = true; - - # - Modules ------------------------------------ - - samfelag.modules = { - # user.name = "marc"; - bluetooth.enable = true; - editors.emacs.enable = true; - }; - - - # - Profiles ----------------------------------- - - samfelag.profiles = { - desktop = { - enable = true; - laptop = true; - }; - gaming.enable = true; - }; - - system.stateVersion = "22.05"; - -} diff --git a/system/modules/default.nix b/system/modules/default.nix deleted file mode 100644 index 867c4ff..0000000 --- a/system/modules/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ ... }: - -{ - imports = [ - ./editors - ./bluetooth.nix - ./tailscale.nix - ]; -} diff --git a/system/modules/editors/default.nix b/system/modules/editors/default.nix deleted file mode 100644 index e87e46d..0000000 --- a/system/modules/editors/default.nix +++ /dev/null @@ -1,7 +0,0 @@ -{ ... }: - -{ - imports = [ - ./emacs.nix - ]; -} diff --git a/system/modules/tailscale.nix b/system/modules/tailscale.nix deleted file mode 100644 index edac49f..0000000 --- a/system/modules/tailscale.nix +++ /dev/null @@ -1,16 +0,0 @@ -{ config, lib, pkgs, self, ... }: - -let - cfg = config.samfelag.modules.tailscale; -in -{ - options.samfelag.modules.tailscale = { - enable = lib.mkEnableOption "tailscale"; - }; - - config = lib.mkIf cfg.enable { - services.tailscale = { - enable = true; - }; - }; -} diff --git a/system/profiles/default.nix b/system/profiles/default.nix deleted file mode 100644 index 29942d5..0000000 --- a/system/profiles/default.nix +++ /dev/null @@ -1,9 +0,0 @@ -{ ... }: - -{ - imports = [ - ./common.nix - ./desktop.nix - ./gaming.nix - ]; -} diff --git a/system/profiles/desktop.nix b/system/profiles/desktop.nix deleted file mode 100644 index 4b3367c..0000000 --- a/system/profiles/desktop.nix +++ /dev/null @@ -1,77 +0,0 @@ -{ config, lib, pkgs, ... }: - -with lib; -let - cfg = config.samfelag.profiles.desktop; -in -{ - options.samfelag.profiles.desktop = { - - enable = mkEnableOption "desktop profile"; - - laptop = mkOption { - description = "Enable features for a laptop (trackpad, battery, etc...)"; - type = types.bool; - default = false; - }; - }; - - config = mkIf cfg.enable { - - # - Packages --------------------------------- - - environment.systemPackages = with pkgs; [ - pamixer - i3lock-blur - ]; - - samfelag.modules.app.alacritty.enable = true; - - # - Audio ------------------------------------ - - sound.enable = true; - - hardware = { - pulseaudio = { - enable = true; - support32Bit = true; - package = pkgs.pulseaudioFull; - }; - }; - - # - Window + Display Manager ----------------- - - environment.pathsToLink = [ "/libexec" ]; - - services.xserver = { - enable = true; - - libinput = mkIf cfg.laptop { - enable = true; - touchpad.tapping = true; - }; - - desktopManager = { - xterm.enable = false; - }; - - displayManager = { - defaultSession = "none+i3"; - lightdm = { - enable = true; - greeters.mini = { - enable = true; - user = "marc"; - extraConfig = '' - [greeter] - show-sys-info = true - ''; - }; - }; - }; - - windowManager.i3.enable = true; - }; - - }; -}