diff --git a/modules/home/firefox/tridactyl/default.nix b/modules/home/firefox/tridactyl/default.nix index cd377e5..6fcf8ce 100644 --- a/modules/home/firefox/tridactyl/default.nix +++ b/modules/home/firefox/tridactyl/default.nix @@ -4,11 +4,19 @@ let 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/terminal/alacritty/default.nix b/modules/home/terminal/alacritty/default.nix index 6b090a7..29e00eb 100644 --- a/modules/home/terminal/alacritty/default.nix +++ b/modules/home/terminal/alacritty/default.nix @@ -1,6 +1,6 @@ { config, lib, ... }: let - cfg = config.my.home.terminal; + cfg = config.my.home.terminal.alacritty; inherit (config.my.home.terminal) colors; in { @@ -8,9 +8,15 @@ in default = mkOption { type = with types; nullOr (enum [ "alacritty" ]); }; + + alacritty = { + enable = mkEnableOption "alacritty" // { + default = config.my.home.terminal.default == "alacritty"; + }; + }; }; - config = lib.mkIf (cfg.default == "alacritty") { + config = lib.mkIf cfg.enable { programs.alacritty = { enable = true; diff --git a/modules/home/terminal/termite/default.nix b/modules/home/terminal/termite/default.nix index da3ee86..1784ff2 100644 --- a/modules/home/terminal/termite/default.nix +++ b/modules/home/terminal/termite/default.nix @@ -1,6 +1,6 @@ { config, lib, pkgs, ... }: let - cfg = config.my.home.terminal; + cfg = config.my.home.terminal.termite; inherit (config.my.home.terminal) colors; in { @@ -8,9 +8,15 @@ in default = mkOption { type = with types; nullOr (enum [ "termite" ]); }; + + termite = { + enable = mkEnableOption "termite" // { + default = config.my.home.terminal.default == "termite"; + }; + }; }; - config = lib.mkIf (cfg.default == "termite") { + config = lib.mkIf cfg.enable { programs.termite = { enable = true; 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 564aead..9826e68 100644 --- a/modules/home/wm/i3/default.nix +++ b/modules/home/wm/i3/default.nix @@ -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/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;