diff --git a/hosts/nixos/aramis/home.nix b/hosts/nixos/aramis/home.nix index e8c99e4..7bf6fe2 100644 --- a/hosts/nixos/aramis/home.nix +++ b/hosts/nixos/aramis/home.nix @@ -25,7 +25,7 @@ # Network-Manager applet nm-applet.enable = true; # Terminal - terminal.program = "alacritty"; + terminal.default = "alacritty"; # Transmission remote trgui.enable = true; # Zathura document viewer diff --git a/modules/home/firefox/default.nix b/modules/home/firefox/default.nix index 19a008c..1ffb8d9 100644 --- a/modules/home/firefox/default.nix +++ b/modules/home/firefox/default.nix @@ -48,15 +48,29 @@ in "browser.bookmarks.showMobileBookmarks" = true; # Mobile bookmarks "browser.download.useDownloadDir" = false; # Ask for download location "browser.in-content.dark-mode" = true; # Dark mode + "browser.ml.chat.enabled" = false; # No AI + "browser.ml.chat.menu" = false; # No AI + "browser.ml.chat.page" = false; # No AI + "browser.ml.chat.page.footerBadge" = false; # No AI + "browser.ml.chat.page.menuBadge" = false; # No AI + "browser.ml.chat.shortcuts" = false; # No AI + "browser.ml.chat.sidebar" = false; # No AI + "browser.ml.enable" = false; # No AI + "browser.ml.linkPreview.enabled" = false; # No AI + "browser.ml.pageAssist.enabled" = false; # No AI "browser.newtabpage.activity-stream.feeds.section.topstories" = false; # Disable top stories "browser.newtabpage.activity-stream.feeds.sections" = false; "browser.newtabpage.activity-stream.feeds.system.topstories" = false; # Disable top stories "browser.newtabpage.activity-stream.section.highlights.includePocket" = false; # Disable pocket + "browser.tabs.groups.smart.enabled" = false; # No AI + "browser.tabs.groups.smart.userEnabled" = false; # No AI "browser.urlbar.trimURLs" = false; # Always show the `http://` prefix + "extensions.ml.enabled" = false; # No AI "extensions.pocket.enabled" = false; # Disable pocket "media.eme.enabled" = true; # Enable DRM "media.gmp-widevinecdm.enabled" = true; # Enable DRM "media.gmp-widevinecdm.visible" = true; # Enable DRM + "sidebar.notification.badge.aichat" = false; # No AI "signon.autofillForms" = false; # Disable built-in form-filling "signon.rememberSignons" = false; # Disable built-in password manager "ui.systemUsesDarkTheme" = true; # Dark mode diff --git a/modules/home/firefox/tridactyl/default.nix b/modules/home/firefox/tridactyl/default.nix index 26ddfad..6fcf8ce 100644 --- a/modules/home/firefox/tridactyl/default.nix +++ b/modules/home/firefox/tridactyl/default.nix @@ -2,13 +2,21 @@ let cfg = config.my.home.firefox.tridactyl; - term = config.my.home.terminal.program; + term = config.my.home.terminal.default; - vimCommandLine = { - alacritty = ''-e "vim" "%f" "+normal!%lGzv%c|"''; - # Termite wants the whole command in a single argument... - termite = ''-e "vim %f '+normal!%lGzv%c|'"''; - }; + vimCommandLine = + let + # Termite wants the whole command in a single argument... + brokenExecCommand = { + termite = true; + }; + # Assume most other terminals are sane and not broken... + isBroken = brokenExecCommand.${term} or false; + in + if isBroken then + ''-e "vim %f '+normal!%lGzv%c|'"'' + else + ''-e "vim" "%f" "+normal!%lGzv%c|"''; in { config = lib.mkIf cfg.enable { @@ -17,9 +25,9 @@ in # Use my configured terminal term # Make it easy to pick out with a window class name - "--class tridactyl_editor" + "--title=tridactyl_editor" # Open vim with the cursor in the correct position - vimCommandLine.${term} + vimCommandLine ]; }; }; diff --git a/modules/home/pager/default.nix b/modules/home/pager/default.nix index e84dcb7..353ef46 100644 --- a/modules/home/pager/default.nix +++ b/modules/home/pager/default.nix @@ -9,18 +9,50 @@ in config = lib.mkIf cfg.enable { + programs.less = { + enable = true; + + config = '' + #command + # Quit without clearing the screen on `Q` + Q toggle-option -!^Predraw-on-quit\nq + + #line-edit + # readline-style command editing + ^p up + ^n down + ^b left + ^f right + ^a home + ^e end + \eb word-left + \ef word-right + ^w word-backspace + \ed word-delete + # Simulate delete to start/end of line by repeating word-wise actions + ^u word-backspace ${lib.strings.replicate 100 "^w"} + ^k word-delete ${lib.strings.replicate 100 "\\ed"} + ''; + }; + home.sessionVariables = { # My default pager PAGER = "less"; - # Clear the screen on start and exit - LESS = "-R -+X -c"; - # Better XDG compliance - LESSHISTFILE = "${config.xdg.stateHome}/less/history"; + # Set `LESS` in the environment so it overrides git's pager (and others) + LESS = + let + options = { + # Always use the alternate screen (so that it is cleared on exit) + "+no-init" = true; + # Write text top-down, rather than from the bottom + clear-screen = true; + # Interpret (some) escape sequences + RAW-CONTROL-CHARS = true; + # Use colored text in search and UI + use-color = true; + }; + in + lib.concatStringsSep " " (lib.cli.toCommandLineGNU { } options); }; - - xdg.configFile."lesskey".text = '' - # Quit without clearing the screen on `Q` - Q toggle-option -!^Predraw-on-quit\nq - ''; }; } diff --git a/modules/home/terminal/alacritty/default.nix b/modules/home/terminal/alacritty/default.nix index daf3e80..29e00eb 100644 --- a/modules/home/terminal/alacritty/default.nix +++ b/modules/home/terminal/alacritty/default.nix @@ -1,9 +1,22 @@ { config, lib, ... }: let - cfg = config.my.home.terminal; + cfg = config.my.home.terminal.alacritty; + inherit (config.my.home.terminal) colors; in { - config = lib.mkIf (cfg.program == "alacritty") { + options.my.home.terminal = with lib; { + default = mkOption { + type = with types; nullOr (enum [ "alacritty" ]); + }; + + alacritty = { + enable = mkEnableOption "alacritty" // { + default = config.my.home.terminal.default == "alacritty"; + }; + }; + }; + + config = lib.mkIf cfg.enable { programs.alacritty = { enable = true; @@ -14,36 +27,36 @@ in colors = { primary = { - background = cfg.colors.background; - foreground = cfg.colors.foreground; + background = colors.background; + foreground = colors.foreground; - bright_foreground = cfg.colors.foregroundBold; + bright_foreground = colors.foregroundBold; }; cursor = { - cursor = cfg.colors.cursor; + cursor = colors.cursor; }; normal = { - black = cfg.colors.black; - red = cfg.colors.red; - green = cfg.colors.green; - yellow = cfg.colors.yellow; - blue = cfg.colors.blue; - magenta = cfg.colors.magenta; - cyan = cfg.colors.cyan; - white = cfg.colors.white; + black = colors.black; + red = colors.red; + green = colors.green; + yellow = colors.yellow; + blue = colors.blue; + magenta = colors.magenta; + cyan = colors.cyan; + white = colors.white; }; bright = { - black = cfg.colors.blackBold; - red = cfg.colors.redBold; - green = cfg.colors.greenBold; - yellow = cfg.colors.yellowBold; - blue = cfg.colors.blueBold; - magenta = cfg.colors.magentaBold; - cyan = cfg.colors.cyanBold; - white = cfg.colors.whiteBold; + black = colors.blackBold; + red = colors.redBold; + green = colors.greenBold; + yellow = colors.yellowBold; + blue = colors.blueBold; + magenta = colors.magentaBold; + cyan = colors.cyanBold; + white = colors.whiteBold; }; }; }; diff --git a/modules/home/terminal/default.nix b/modules/home/terminal/default.nix index 20f36b5..188156c 100644 --- a/modules/home/terminal/default.nix +++ b/modules/home/terminal/default.nix @@ -16,11 +16,11 @@ in options.my.home = with lib; { terminal = { - program = mkOption { - type = with types; nullOr (enum [ "alacritty" "termite" ]); + default = mkOption { + type = with types; nullOr (enum [ ]); default = null; example = "termite"; - description = "Which terminal to use for home session"; + description = "Which default terminal to use for home session"; }; colors = { @@ -56,7 +56,7 @@ in }; }; - config.home.sessionVariables = lib.mkIf (cfg.program != null) { - TERMINAL = cfg.program; + config.home.sessionVariables = lib.mkIf (cfg.default != null) { + TERMINAL = cfg.default; }; } diff --git a/modules/home/terminal/termite/default.nix b/modules/home/terminal/termite/default.nix index e8f67a7..1784ff2 100644 --- a/modules/home/terminal/termite/default.nix +++ b/modules/home/terminal/termite/default.nix @@ -1,9 +1,22 @@ { config, lib, pkgs, ... }: let - cfg = config.my.home.terminal; + cfg = config.my.home.terminal.termite; + inherit (config.my.home.terminal) colors; in { - config = lib.mkIf (cfg.program == "termite") { + options.my.home.terminal = with lib; { + default = mkOption { + type = with types; nullOr (enum [ "termite" ]); + }; + + termite = { + enable = mkEnableOption "termite" // { + default = config.my.home.terminal.default == "termite"; + }; + }; + }; + + config = lib.mkIf cfg.enable { programs.termite = { enable = true; @@ -24,11 +37,11 @@ in # Colors - backgroundColor = cfg.colors.background; - cursorColor = cfg.colors.cursor; - foregroundColor = cfg.colors.foreground; - foregroundBoldColor = cfg.colors.foregroundBold; - colorsExtra = with cfg.colors; '' + backgroundColor = colors.background; + cursorColor = colors.cursor; + foregroundColor = colors.foreground; + foregroundBoldColor = colors.foregroundBold; + colorsExtra = with colors; '' # Normal colors color0 = ${black} color1 = ${red} diff --git a/modules/home/tmux/default.nix b/modules/home/tmux/default.nix index e3e3daf..f9a94f1 100644 --- a/modules/home/tmux/default.nix +++ b/modules/home/tmux/default.nix @@ -31,9 +31,9 @@ in }; }); - default = { ${config.my.home.terminal.program} = { }; }; + default = { ${config.my.home.terminal.default} = { }; }; defaultText = literalExpression '' - { ''${config.my.home.terminal.program} = { }; }; + { ''${config.my.home.terminal.default} = { }; }; ''; example = { xterm-256color = { }; }; description = '' diff --git a/modules/home/vim/plugin/settings/tree-sitter.lua b/modules/home/vim/plugin/settings/tree-sitter.lua index 2958c2a..0009d48 100644 --- a/modules/home/vim/plugin/settings/tree-sitter.lua +++ b/modules/home/vim/plugin/settings/tree-sitter.lua @@ -76,7 +76,7 @@ local function treesitter_try_attach(buf, language) -- Syntax highlighting vim.treesitter.start(buf, language) -- Indentation - vim.bo.indentexpr = "v:lua.require('nvim-treesitter').indentexpr()" + vim.bo[buf].indentexpr = "v:lua.require('nvim-treesitter').indentexpr()" return true end diff --git a/modules/home/wm/default.nix b/modules/home/wm/default.nix index ae1e136..86ae969 100644 --- a/modules/home/wm/default.nix +++ b/modules/home/wm/default.nix @@ -1,4 +1,4 @@ -{ config, lib, pkgs, ... }: +{ config, lib, ... }: let mkRelatedOption = description: relatedWMs: let @@ -20,14 +20,14 @@ in options.my.home.wm = with lib; { windowManager = mkOption { - type = with types; nullOr (enum [ "i3" ]); + type = with types; nullOr (enum [ ]); default = null; example = "i3"; description = "Which window manager to use for home session"; }; cursor = { - enable = mkRelatedOption "dunst configuration" [ "i3" ]; + enable = mkRelatedOption "cursor configuration" [ "i3" ]; }; dunst = { @@ -68,29 +68,14 @@ in }; screen-lock = { - enable = mkRelatedOption "automatic X screen locker" [ "i3" ]; + enable = mkRelatedOption "automatic screen locker" [ "i3" ]; command = mkOption { type = types.str; - default = "${lib.getExe pkgs.i3lock} -n -c 000000"; example = "\${lib.getExe pkgs.i3lock} -n -i lock.png"; description = "Locker command to run"; }; - cornerLock = { - enable = my.mkDisableOption '' - Move mouse to upper-left corner to lock instantly, lower-right corner to - disable auto-lock. - ''; - - delay = mkOption { - type = types.int; - default = 5; - example = 15; - description = "How many seconds before locking this way"; - }; - }; - notify = { enable = my.mkDisableOption "Notify when about to lock the screen"; @@ -100,17 +85,15 @@ in example = 15; description = '' How many seconds in advance should there be a notification. - This value must be at lesser than or equal to `cornerLock.delay` - when both options are enabled. ''; }; }; timeout = mkOption { - type = types.ints.between 1 60; + type = types.int; default = 15; example = 1; - description = "Inactive time interval to lock the screen automatically"; + description = "Inactive time interval (in minutes) to lock the screen automatically"; }; }; }; diff --git a/modules/home/wm/i3/default.nix b/modules/home/wm/i3/default.nix index 5f22bbe..9826e68 100644 --- a/modules/home/wm/i3/default.nix +++ b/modules/home/wm/i3/default.nix @@ -3,8 +3,8 @@ let isEnabled = config.my.home.wm.windowManager == "i3"; terminal = - if config.my.home.terminal.program != null - then config.my.home.terminal.program + if config.my.home.terminal.default != null + then config.my.home.terminal.default else "i3-sensible-terminal"; alt = "Mod1"; # `Alt` key @@ -47,15 +47,25 @@ let if ${systemctlUser} is-active xautolock-session.service; then ${systemctlUser} stop --user xautolock-session.service xset s off + xset s 0 0 + xset -dpms ${notify} "Disabled Xautolock" else ${systemctlUser} start xautolock-session.service xset s on + xset s 0 0 + xset +dpms ${notify} "Enabled Xautolock" fi ''; in { + options.my.home.wm = with lib; { + windowManager = mkOption { + type = with types; nullOr (enum [ "i3" ]); + }; + }; + config = lib.mkIf isEnabled { home.packages = with pkgs; [ ambroisie.dragger # drag-and-drop from the CLI @@ -65,6 +75,9 @@ in xdotool # Used by 'rofi-rbw', in a mapping ]; + # Set `i3lock` as the (default) lock command + my.home.wm.screen-lock.command = lib.mkDefault "${lib.getExe pkgs.i3lock} -n -c 000000"; + xsession.windowManager.i3 = { enable = true; @@ -123,7 +136,7 @@ in inherit modifier; criteria = [ - { class = "^tridactyl_editor$"; } + { title = "^tridactyl_editor$"; } { class = "^Blueman-.*$"; } { title = "^htop$"; } { class = "^Thunderbird$"; instance = "Mailnews"; window_role = "filterlist"; } @@ -387,5 +400,10 @@ in }; }; }; + + # Use a grey background + xsession.profileExtra = '' + ${lib.getExe pkgs.xsetroot} -solid '#333333' + ''; }; } diff --git a/modules/home/wm/rofi/default.nix b/modules/home/wm/rofi/default.nix index 9707ed7..d0e0215 100644 --- a/modules/home/wm/rofi/default.nix +++ b/modules/home/wm/rofi/default.nix @@ -7,7 +7,7 @@ in programs.rofi = { enable = true; - terminal = config.my.home.terminal.program; # null by default + terminal = config.my.home.terminal.default; # null by default package = pkgs.rofi.override { plugins = with pkgs; [ diff --git a/modules/home/wm/screen-lock/default.nix b/modules/home/wm/screen-lock/default.nix index 5e6874e..208e529 100644 --- a/modules/home/wm/screen-lock/default.nix +++ b/modules/home/wm/screen-lock/default.nix @@ -2,32 +2,22 @@ let cfg = config.my.home.wm.screen-lock; - notificationCmd = - let - duration = toString (cfg.notify.delay * 1000); - notifyCmd = "${lib.getExe pkgs.libnotify} -u critical -t ${duration}"; - in - # Needs to be surrounded by quotes for systemd to launch it correctly - ''"${notifyCmd} -- 'Locking in ${toString cfg.notify.delay} seconds'"''; + lockNotifier = pkgs.writeShellApplication { + name = "lock-notifier"; + runtimeInputs = [ + pkgs.libnotify + ]; + text = '' + duration=${toString cfg.notify.delay} + notify-send \ + -u critical \ + -t "$((duration * 1000))" -- \ + "Locking in $duration seconds" + ''; + }; in { config = lib.mkIf cfg.enable { - assertions = [ - { - assertion = - let - inherit (cfg) cornerLock notify; - bothEnabled = cornerLock.enable && notify.enable; - cornerLockHigherThanNotify = cornerLock.delay >= notify.delay; - in - bothEnabled -> cornerLockHigherThanNotify; - message = '' - `config.my.home.wm.notify.delay` cannot have a value higher than - `config.my.home.wm.cornerLock.delay`. - ''; - } - ]; - services.screen-locker = { enable = true; @@ -36,19 +26,11 @@ in lockCmd = cfg.command; xautolock = { - extraOptions = lib.optionals cfg.cornerLock.enable [ - # Mouse corners: instant lock on upper-left, never lock on lower-right - "-cornerdelay" - "${toString cfg.cornerLock.delay}" - "-cornerredelay" - "${toString cfg.cornerLock.delay}" - "-corners" - "+00-" - ] ++ lib.optionals cfg.notify.enable [ + extraOptions = lib.optionals cfg.notify.enable [ "-notify" "${toString cfg.notify.delay}" "-notifier" - notificationCmd + (lib.getExe lockNotifier) ]; }; }; diff --git a/modules/nixos/profiles/x/default.nix b/modules/nixos/profiles/x/default.nix index 874f36f..2f6b8d5 100644 --- a/modules/nixos/profiles/x/default.nix +++ b/modules/nixos/profiles/x/default.nix @@ -1,4 +1,4 @@ -{ config, lib, pkgs, ... }: +{ config, lib, ... }: let cfg = config.my.profiles.x; in @@ -10,12 +10,6 @@ in config = lib.mkIf cfg.enable { # Enable the X11 windowing system. services.xserver.enable = true; - # Nice wallpaper - services.xserver.displayManager.lightdm.background = - let - wallpapers = "${pkgs.kdePackages.plasma-workspace-wallpapers}/share/wallpapers"; - in - "${wallpapers}/summer_1am/contents/images/2560x1600.jpg"; # X configuration my.home.x.enable = true; diff --git a/modules/nixos/services/wireguard/keys/secrets.nix b/modules/nixos/services/wireguard/keys/secrets.nix index 3985477..3572217 100644 --- a/modules/nixos/services/wireguard/keys/secrets.nix +++ b/modules/nixos/services/wireguard/keys/secrets.nix @@ -1,6 +1,6 @@ # Extra wireguard keys that are not hosts NixOS hosts let - keys = import ../../../../keys; + keys = import ../../../../../keys; all = [ keys.users.ambroisie