From e51867e838e53ae7e987473654d9a6343d4d4c9e Mon Sep 17 00:00:00 2001 From: Noah Masur <7386960+nmasur@users.noreply.github.com> Date: Sun, 23 Jan 2022 16:37:47 +0000 Subject: [PATCH] try qtile --- nixos/configuration.nix | 26 +++--- nixos/home.nix | 1 + nixos/qtile.py | 195 +++++++++++++++++++++++++++++++++++++++ nvim.configlink/init.lua | 16 ++-- 4 files changed, 218 insertions(+), 20 deletions(-) create mode 100644 nixos/qtile.py diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a28303f..5ebf374 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -19,8 +19,10 @@ # networking.hostName = "nixos"; # Define your hostname. # networking.wireless.enable = true; # Enables wireless support via wpa_supplicant. - # Set your time zone. - time.timeZone = "America/New_York"; + # Set your time zone, also used by redshift + services.localtime.enable = true; + services.geoclue2.enable = true; + location = { provider = "geoclue2"; }; # The global useDHCP flag is deprecated, therefore explicitly set to false here. # Per-interface useDHCP will be mandatory in the future, so this generated config @@ -30,12 +32,10 @@ networking.interfaces.wlp3s0.useDHCP = true; # Enable the X11 windowing system. - # services.xserver.enable = true; services.xserver = { enable = true; - # Use the Awesome WM - windowManager = { awesome = { enable = true; }; }; + windowManager = { qtile = { enable = true; }; }; # Enable touchpad support libinput.enable = true; @@ -83,7 +83,7 @@ }; # Required for setting GTK theme (for preferred-color-scheme in browser) - services.dbus.packages = with pkgs; [ dconf gnome3.dconf ]; + services.dbus.packages = with pkgs; [ gnome3.dconf ]; # Mouse config services.ratbagd.enable = true; @@ -176,17 +176,19 @@ amdvlk wine openssl # Required for League of Legends + dconf ]; environment.variables = { NIX_SKIP_KEYBASE_CHECKS = "1"; }; - location = { - latitude = 40.0; - longitude = 74.0; - }; - # Reduce blue light at night - services.redshift.enable = true; + services.redshift = { + enable = true; + brightness = { + day = "1.0"; + night = "0.5"; + }; + }; # Login to Keybase in the background services.keybase.enable = true; diff --git a/nixos/home.nix b/nixos/home.nix index fcac978..c15e54f 100644 --- a/nixos/home.nix +++ b/nixos/home.nix @@ -269,6 +269,7 @@ in { "nvim/init.lua".source = ../nvim.configlink/init.lua; "fish/functions".source = ../fish.configlink/functions; "awesome/rc.lua".source = ./awesomerc.lua; + "qtile/config.py".source = ./qtile.py; "direnvrc".text = "source $HOME/.nix-profile/share/nix-direnv/direnvrc"; }; diff --git a/nixos/qtile.py b/nixos/qtile.py new file mode 100644 index 0000000..7b9584b --- /dev/null +++ b/nixos/qtile.py @@ -0,0 +1,195 @@ +# Copyright (c) 2010 Aldo Cortesi +# Copyright (c) 2010, 2014 dequis +# Copyright (c) 2012 Randall Ma +# Copyright (c) 2012-2014 Tycho Andersen +# Copyright (c) 2012 Craig Barnes +# Copyright (c) 2013 horsik +# Copyright (c) 2013 Tao Sauvage +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. + +from typing import List # noqa: F401 + +from libqtile import bar, layout, widget +from libqtile.config import Click, Drag, Group, Key, Match, Screen +from libqtile.lazy import lazy +from libqtile.utils import guess_terminal + +mod = "mod4" +terminal = guess_terminal() + +keys = [ + # A list of available commands that can be bound to keys can be found + # at https://docs.qtile.org/en/latest/manual/config/lazy.html + + # Switch between windows + Key([mod], "h", lazy.layout.left(), desc="Move focus to left"), + Key([mod], "l", lazy.layout.right(), desc="Move focus to right"), + Key([mod], "j", lazy.layout.down(), desc="Move focus down"), + Key([mod], "k", lazy.layout.up(), desc="Move focus up"), + Key([mod], "space", lazy.layout.next(), + desc="Move window focus to other window"), + + # Move windows between left/right columns or move up/down in current stack. + # Moving out of range in Columns layout will create new column. + Key([mod, "shift"], "h", lazy.layout.shuffle_left(), + desc="Move window to the left"), + Key([mod, "shift"], "l", lazy.layout.shuffle_right(), + desc="Move window to the right"), + Key([mod, "shift"], "j", lazy.layout.shuffle_down(), + desc="Move window down"), + Key([mod, "shift"], "k", lazy.layout.shuffle_up(), desc="Move window up"), + + # Grow windows. If current window is on the edge of screen and direction + # will be to screen edge - window would shrink. + Key([mod, "control"], "h", lazy.layout.grow_left(), + desc="Grow window to the left"), + Key([mod, "control"], "l", lazy.layout.grow_right(), + desc="Grow window to the right"), + Key([mod, "control"], "j", lazy.layout.grow_down(), + desc="Grow window down"), + Key([mod, "control"], "k", lazy.layout.grow_up(), desc="Grow window up"), + Key([mod], "n", lazy.layout.normalize(), desc="Reset all window sizes"), + + # Toggle between split and unsplit sides of stack. + # Split = all windows displayed + # Unsplit = 1 window displayed, like Max layout, but still with + # multiple stack panes + Key([mod, "shift"], "Return", lazy.layout.toggle_split(), + desc="Toggle between split and unsplit sides of stack"), + Key([mod], "Return", lazy.spawn(terminal), desc="Launch terminal"), + + # Toggle between different layouts as defined below + Key([mod], "Tab", lazy.next_layout(), desc="Toggle between layouts"), + Key([mod], "w", lazy.window.kill(), desc="Kill focused window"), + + Key([mod, "control"], "r", lazy.reload_config(), desc="Reload the config"), + Key([mod, "control"], "q", lazy.shutdown(), desc="Shutdown Qtile"), + Key([mod], "r", lazy.spawncmd(), + desc="Spawn a command using a prompt widget"), +] + +groups = [Group(i) for i in "123456789"] + +for i in groups: + keys.extend([ + # mod1 + letter of group = switch to group + Key([mod], i.name, lazy.group[i.name].toscreen(), + desc="Switch to group {}".format(i.name)), + + # mod1 + shift + letter of group = switch to & move focused window to group + Key([mod, "shift"], i.name, lazy.window.togroup(i.name, switch_group=True), + desc="Switch to & move focused window to group {}".format(i.name)), + # Or, use below if you prefer not to switch to that group. + # # mod1 + shift + letter of group = move focused window to group + # Key([mod, "shift"], i.name, lazy.window.togroup(i.name), + # desc="move focused window to group {}".format(i.name)), + ]) + +layouts = [ + layout.Columns(border_focus_stack=['#d75f5f', '#8f3d3d'], border_width=4), + layout.Max(), + # Try more layouts by unleashing below layouts. + # layout.Stack(num_stacks=2), + # layout.Bsp(), + # layout.Matrix(), + # layout.MonadTall(), + # layout.MonadWide(), + # layout.RatioTile(), + # layout.Tile(), + # layout.TreeTab(), + # layout.VerticalTile(), + # layout.Zoomy(), +] + +widget_defaults = dict( + font='sans', + fontsize=12, + padding=3, +) +extension_defaults = widget_defaults.copy() + +screens = [ + Screen( + top=bar.Bar( + [ + widget.CurrentLayout(), + widget.GroupBox(), + widget.Prompt(), + widget.WindowName(), + widget.Chord( + chords_colors={ + 'launch': ("#ff0000", "#ffffff"), + }, + name_transform=lambda name: name.upper(), + ), + widget.TextBox("Press <M-r> to spawn", foreground="#d75f5f"), + widget.Volume(), + widget.Systray(), + widget.Clock(format='%Y-%m-%d %a %I:%M %p'), + widget.QuickExit(), + ], + 24, + # border_width=[2, 0, 2, 0], # Draw top and bottom borders + # border_color=["ff00ff", "000000", "ff00ff", "000000"] # Borders are magenta + ), + ), +] + +# Drag floating layouts. +mouse = [ + Drag([mod], "Button1", lazy.window.set_position_floating(), + start=lazy.window.get_position()), + Drag([mod], "Button3", lazy.window.set_size_floating(), + start=lazy.window.get_size()), + Click([mod], "Button2", lazy.window.bring_to_front()) +] + +dgroups_key_binder = None +dgroups_app_rules = [] # type: List +follow_mouse_focus = True +bring_front_click = False +cursor_warp = False +floating_layout = layout.Floating(float_rules=[ + # Run the utility of `xprop` to see the wm class and name of an X client. + *layout.Floating.default_float_rules, + Match(wm_class='confirmreset'), # gitk + Match(wm_class='makebranch'), # gitk + Match(wm_class='maketag'), # gitk + Match(wm_class='ssh-askpass'), # ssh-askpass + Match(title='branchdialog'), # gitk + Match(title='pinentry'), # GPG key password entry +]) +auto_fullscreen = True +focus_on_window_activation = "smart" +reconfigure_screens = True + +# If things like steam games want to auto-minimize themselves when losing +# focus, should we respect this or not? +auto_minimize = True + +# XXX: Gasp! We're lying here. In fact, nobody really uses or cares about this +# string besides java UI toolkits; you can see several discussions on the +# mailing lists, GitHub issues, and other WM documentation that suggest setting +# this string if your java app doesn't work correctly. We may as well just lie +# and say that we're a working one by default. +# +# We choose LG3D to maximize irony: it is a 3D non-reparenting WM written in +# java that happens to be on java's whitelist. +wmname = "LG3D" diff --git a/nvim.configlink/init.lua b/nvim.configlink/init.lua index 2414398..a3a4a6a 100644 --- a/nvim.configlink/init.lua +++ b/nvim.configlink/init.lua @@ -138,10 +138,10 @@ require("packer").startup(function(use) require("lspconfig").rust_analyzer.setup({ capabilities = capabilities }) require("lspconfig").tflint.setup({ capabilities = capabilities }) require("lspconfig").terraformls.setup({ capabilities = capabilities }) - require("lspconfig").pyright.setup({ - cmd = { "poetry", "run", "pyright-langserver", "--stdio" }, - capabilities = capabilities, - }) + -- require("lspconfig").pyright.setup({ + -- cmd = { "poetry", "run", "pyright-langserver", "--stdio" }, + -- capabilities = capabilities, + -- }) end, }) @@ -160,10 +160,10 @@ require("packer").startup(function(use) require("null-ls").setup({ sources = { require("null-ls").builtins.formatting.stylua, - require("null-ls").builtins.formatting.black.with({ - command = "poetry", - args = { "run", "black", "--quiet", "--fast", "-" }, - }), + -- require("null-ls").builtins.formatting.black.with({ + -- command = "poetry", + -- args = { "run", "black", "--quiet", "--fast", "-" }, + -- }), require("null-ls").builtins.formatting.fish_indent, require("null-ls").builtins.formatting.nixfmt, require("null-ls").builtins.formatting.rustfmt,