diff --git a/build-mac-remote.sh b/build-mac-remote.sh deleted file mode 100755 index 13c6a15..0000000 --- a/build-mac-remote.sh +++ /dev/null @@ -1,4 +0,0 @@ -sudo nixos-rebuild switch --flake . \ - --impure --override-input mac-brcm-fw path:/home/jade/mac-brcm-fw \ - --build-host 192.168.178.119 --no-build-nix - diff --git a/build-mac.sh b/build-mac.sh deleted file mode 100755 index 31bbe5a..0000000 --- a/build-mac.sh +++ /dev/null @@ -1,3 +0,0 @@ -sudo nixos-rebuild switch --flake . \ - --impure --override-input mac-brcm-fw path:/home/jade/mac-brcm-fw \ - diff --git a/build.sh b/build.sh deleted file mode 100755 index 941d5cf..0000000 --- a/build.sh +++ /dev/null @@ -1 +0,0 @@ -sudo nixos-rebuild switch --flake . --impure diff --git a/common.nix b/common.nix index 423e577..c2aebb0 100644 --- a/common.nix +++ b/common.nix @@ -27,12 +27,13 @@ with builtins; environment = { systemPackages = with pkgs; [ - + nushellFull networkmanager htmlq wget git neofetch pciutils zip unzip gnutar iw btop nodejs jdk8 jdk11 jdk libsecret gh nix-prefetch-scripts fzf glab ripgrep sl lolcat appimage-run git-crypt file whois p7zip file nmap cmatrix tree - socat smartmontools + socat smartmontools mprocs + dig aria2 usbutils ]; }; @@ -101,7 +102,7 @@ with builtins; users.users.jade = { isNormalUser = true; - extraGroups = [ "wheel" "input" "uinput" "libvirtd" "adbusers" "dialout" "plugdev" ]; + extraGroups = [ "wheel" "input" "uinput" "libvirtd" "adbusers" "dialout" "plugdev" "wireshark" ]; packages = [ pkgs.marksman ]; diff --git a/flake.lock b/flake.lock index c5ea79a..b62c4ec 100644 --- a/flake.lock +++ b/flake.lock @@ -245,11 +245,11 @@ ] }, "locked": { - "lastModified": 1695550077, - "narHash": "sha256-xoxR/iY69/3lTnnZDP6gf3J46DUKPcf+Y1jH03tfZXE=", + "lastModified": 1697838989, + "narHash": "sha256-hwVlO+st8vWJO6iy3/JbMHrUyY4Ak7xUSmffoWqBPUg=", "owner": "nix-community", "repo": "home-manager", - "rev": "a88df2fb101778bfd98a17556b3a2618c6c66091", + "rev": "ae631b0b20f06f7d239d160723d228891ddb2fe0", "type": "github" }, "original": { @@ -418,11 +418,11 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1695559356, - "narHash": "sha256-kXZ1pUoImD9OEbPCwpTz4tHsNTr4CIyIfXb3ocuR8sI=", + "lastModified": 1697777081, + "narHash": "sha256-n2vQARhKevRGyeo+LAa8g+CdUQsdH/caNk8jnylcPhY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "261abe8a44a7e8392598d038d2e01f7b33cf26d0", + "rev": "679cadfdfed2b90311a247b2d6ef6dfd3d6cab73", "type": "github" }, "original": { @@ -569,11 +569,11 @@ }, "nixpkgs_9": { "locked": { - "lastModified": 1695360818, - "narHash": "sha256-JlkN3R/SSoMTa+CasbxS1gq+GpGxXQlNZRUh9+LIy/0=", + "lastModified": 1697723726, + "narHash": "sha256-SaTWPkI8a5xSHX/rrKzUe+/uVNy6zCGMXgoeMb7T9rg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e35dcc04a3853da485a396bdd332217d0ac9054f", + "rev": "7c9cc5a6e5d38010801741ac830a3f8fd667a7a0", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index cb5c0bb..a1f7382 100644 --- a/flake.nix +++ b/flake.nix @@ -55,7 +55,7 @@ home-manager.useUserPackages = true; home-manager.users.jade = { nixosConfig, pkgs, ... }: { home.sessionVariables.TZ = nixosConfig.time.timeZone; - home.stateVersion = "${nixosConfig.system.stateVersion}"; + home.stateVersion = "22.11"; }; } ]; diff --git a/haskell/xmonad/xmonad.hs b/haskell/xmonad/xmonad.hs index d06fad1..2ec0677 100644 --- a/haskell/xmonad/xmonad.hs +++ b/haskell/xmonad/xmonad.hs @@ -13,6 +13,7 @@ import System.Exit import XMonad.Hooks.StatusBar import XMonad.Hooks.StatusBar.PP +import XMonad.Hooks.EwmhDesktops import qualified XMonad.StackSet as W import qualified Data.Map as M @@ -20,6 +21,8 @@ import qualified Data.Map as M import XMonad.Layout.Spacing import XMonad.Layout.Tabbed +import XMonad.Actions.KeyRemap + import XMonad.Prompt import XMonad.Prompt.Layout import Graphics.X11.ExtraTypes.XF86 @@ -29,7 +32,7 @@ import Control.Monad (when) -- The preferred terminal program, which is used in a binding below and by -- certain contrib modules. -- -myTerminal = "kitty" +myTerminal = "kitty" -- Whether focus follows the mouse pointer. myFocusFollowsMouse :: Bool @@ -41,14 +44,14 @@ myClickJustFocuses = False -- Width of the window border in pixels. -- -myBorderWidth = 2 +myBorderWidth = 2 -- modMask lets you specify which modkey you want to use. The default -- is mod1Mask ("left alt"). You may also consider using mod3Mask -- ("right alt"), which does not conflict with emacs keybindings. The -- "windows key" is usually mod4Mask. -- -myModMask = mod4Mask +myModMask = mod4Mask -- The default number of workspaces (virtual screens) and their names. -- By default we use numeric strings, but any string may be used as a @@ -59,129 +62,129 @@ myModMask = mod4Mask -- -- > workspaces = ["web", "irc", "code" ] ++ map show [4..9] -- -myWorkspaces = ["comms","browser","3","4","5","6","7","8","9"] +myWorkspaces = ["comms","browser","3","4","5","6","7","8","9"] -- Border colors for unfocused and focused windows, respectively. -- myNormalBorderColor = "#3c3836" myFocusedBorderColor = "#504945" +myRemaps = KeymapTable [ ((0, xK_a), (0, xK_b)) ] + ------------------------------------------------------------------------ -- Key bindings. Add, modify or remove key bindings here. -- myKeys conf@(XConfig {XMonad.modMask = modm}) = M.fromList $ + [ ((modm, xK_Return), spawn $ XMonad.terminal conf) + , ((modm .|. shiftMask, xK_q), kill) + -- -- Rotate through the available layout algorithms + , ((modm, xK_space ), sendMessage NextLayout) - [ ((modm, xK_Return), spawn $ XMonad.terminal conf) - , ((modm .|. shiftMask, xK_q), kill) - -- Rotate through the available layout algorithms - , ((modm, xK_space ), sendMessage NextLayout) + -- rofiing + , ((modm, xK_d), spawn "rofi -show drun") + , ((modm .|. shiftMask, xK_e), spawn "rofi -show desktopctl -modes desktopctl:desktopctl -show-icons") + , ((modm, xK_m), spawn "menu-qalc -- -theme gruvbox-dark") + , ((modm, xK_i), spawn "rofimoji --selector-args '-theme gruvbox-dark' -f alchemical_symbols anatolian_hieroglyphs emojis braille_patterns box_drawing chess_symbols emoticons geometric_shapes gothic greek_extended math mathematical_alphanumeric_symbols mathematical_operators miscellaneous_symbols miscellaneous_mathematical_symbols-a miscellaneous_mathematical_symbols-b miscellaneous_symbols_and_arrows miscellaneous_symbols_and_pictographs miscellaneous_technical modi modifier_tone_letters musical_symbols nerd_font number_forms shorthand_format_controls specials variation_selectors vertical_forms -a copy") - -- rofiing - , ((modm, xK_d), spawn "rofi -show drun") - , ((modm .|. shiftMask, xK_e), spawn "rofi -show desktopctl -modes desktopctl:desktopctl -show-icons") - , ((modm, xK_m), spawn "menu-qalc -- -theme gruvbox-dark") - , ((modm, xK_i), spawn "rofimoji --selector-args '-theme gruvbox-dark' -f alchemical_symbols anatolian_hieroglyphs emojis braille_patterns box_drawing chess_symbols emoticons geometric_shapes gothic greek_extended math mathematical_alphanumeric_symbols mathematical_operators miscellaneous_symbols miscellaneous_mathematical_symbols-a miscellaneous_mathematical_symbols-b miscellaneous_symbols_and_arrows miscellaneous_symbols_and_pictographs miscellaneous_technical modi modifier_tone_letters musical_symbols nerd_font number_forms shorthand_format_controls specials variation_selectors vertical_forms -a copy") + , ((modm, xK_o), spawn "rofi -show searchwolf -modes searchwolf:searchwolf -theme gruvbox-dark") - , ((modm, xK_o), spawn "rofi -show searchwolf -modes searchwolf:searchwolf -theme gruvbox-dark") + -- screenshotting + -- TODO: Fix/rewrite window-screenshot.sh + , ((modm, xK_w), spawn "window-screenshot.nu") + , ((modm, xK_s), spawn "flameshot gui -c -p $HOME/Pictures/screenshots") + , ((modm, xK_a), spawn "flameshot screen -c -p $HOME/Pictures/screenshots") + , ((modm, xK_t), spawn "ocr-screenshot.sh") - -- screenshotting - -- TODO: Fix/rewrite window-screenshot.sh - , ((modm, xK_w), spawn "window-screenshot.sh") - , ((modm, xK_s), spawn "flameshot gui -c -p $HOME/Pictures/screenshots") - , ((modm, xK_a), spawn "flameshot screen -c -p $HOME/Pictures/screenshots") - , ((modm, xK_t), spawn "ocr-screenshot.sh") + , ((modm .|. shiftMask, xK_t), spawn "DEVICE=\"MELF0410:00 1FD2:7007\"; if [ $(xinput list-props \"$DEVICE\" | awk '/^\\tDevice Enabled \\([0-9]+\\):\\t[01]/ {print $NF}') = \"1\" ]; then xinput disable \"$DEVICE\"; else xinput enable \"$DEVICE\"; fi") - , ((modm .|. shiftMask, xK_t), spawn "DEVICE=\"MELF0410:00 1FD2:7007\"; if [ $(xinput list-props \"$DEVICE\" | awk '/^\\tDevice Enabled \\([0-9]+\\):\\t[01]/ {print $NF}') = \"1\" ]; then xinput disable \"$DEVICE\"; else xinput enable \"$DEVICE\"; fi") - - -- Reset the layouts on the current workspace to default - -- , ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) - -- , ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) - -- Push window back into tiling - , ((modm .|. shiftMask, xK_space ), withFocused $ windows . W.sink) + -- Reset the layouts on the current workspace to default + -- , ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) + -- , ((modm .|. shiftMask, xK_space ), setLayout $ XMonad.layoutHook conf) + -- Push window back into tiling + , ((modm .|. shiftMask, xK_space ), withFocused $ windows . W.sink) - -- Resize viewed windows to the correct size - , ((modm, xK_n ), refresh) + -- Resize viewed windows to the correct size + , ((modm, xK_n ), refresh) - -- Move focus to the next window - , ((modm, xK_Tab ), layoutPrompt def) + -- Move focus to the next window + , ((modm, xK_Tab ), layoutPrompt def) - -- Move focus - , ((modm, xK_j ), windows W.focusDown) - , ((modm, xK_k ), windows W.focusUp ) + -- Move focus + , ((modm, xK_j ), windows W.focusDown) + , ((modm, xK_k ), windows W.focusUp ) - -- Swap the focused window with the next window - , ((modm .|. shiftMask, xK_j ), windows W.swapDown ) - , ((modm .|. shiftMask, xK_k ), windows W.swapUp ) + -- Swap the focused window with the next window + , ((modm .|. shiftMask, xK_j ), windows W.swapDown ) + , ((modm .|. shiftMask, xK_k ), windows W.swapUp ) - -- Shrink the master area - , ((modm, xK_h ), sendMessage Shrink) - , ((modm, xK_l ), sendMessage Expand) + -- Shrink the master area + , ((modm, xK_h ), sendMessage Shrink) + , ((modm, xK_l ), sendMessage Expand) - -- Increment the number of windows in the master area - , ((modm , xK_comma ), sendMessage (IncMasterN 1)) - , ((modm , xK_period), sendMessage (IncMasterN (-1))) + -- Increment the number of windows in the master area + , ((modm , xK_comma ), sendMessage (IncMasterN 1)) + , ((modm , xK_period), sendMessage (IncMasterN (-1))) - -- Brightness n stuff - -- , ((0, xF86XK_AudioRaiseVolume), spawn "amixer -D pulse sset Master 10%+") - -- , ((0, xF86XK_AudioLowerVolume), spawn "amixer -D pulse sset Master 10%-") - -- , ((0, xF86XK_AudioMute), spawn "amixer -D pulse sset Master toggle") - -- , ((0, xF86XK_MonBrightnessUp), spawn "brightnessctl set +10%") - -- , ((0, xF86XK_MonBrightnessDown), spawn "brightnessctl set 10%-") - -- , ((0, xF86XK_KbdBrightnessUp), spawn "brightnessctl -d \"kbd_backlight\" set +10%") - -- , ((0, xF86XK_KbdBrightnessDown), spawn "brightnessctl -d \"kbd_backlight\" set 10%-") + -- Brightness n stuff + -- , ((0, xF86XK_AudioRaiseVolume), spawn "amixer -D pulse sset Master 10%+") + -- , ((0, xF86XK_AudioLowerVolume), spawn "amixer -D pulse sset Master 10%-") + -- , ((0, xF86XK_AudioMute), spawn "amixer -D pulse sset Master toggle") + -- , ((0, xF86XK_MonBrightnessUp), spawn "brightnessctl set +10%") + -- , ((0, xF86XK_MonBrightnessDown), spawn "brightnessctl set 10%-") + -- , ((0, xF86XK_KbdBrightnessUp), spawn "brightnessctl -d \"kbd_backlight\" set +10%") + -- , ((0, xF86XK_KbdBrightnessDown), spawn "brightnessctl -d \"kbd_backlight\" set 10%-") - -- Toggle the status bar gap - -- Use this binding with avoidStruts from Hooks.ManageDocks. - -- See also the statusBar function from Hooks.DynamicLog. - -- - -- , ((modm , xK_b ), sendMessage ToggleStruts) + -- Toggle the status bar gap + -- Use this binding with avoidStruts from Hooks.ManageDocks. + -- See also the statusBar function from Hooks.DynamicLog. + -- + -- , ((modm , xK_b ), sendMessage ToggleStruts) - --, ((modm .|. shiftMask, xK_e ), io (exitWith ExitSuccess)) + --, ((modm .|. shiftMask, xK_e ), io (exitWith ExitSuccess)) - -- Restart xmonad - --, ((modm , xK_q ), spawn "xmonad --recompile; xmonad --restart") + -- Restart xmonad + --, ((modm , xK_q ), spawn "xmonad --recompile; xmonad --restart") - -- Run xmessage with a summary of the default keybindings (useful for beginners) - ] - ++ + -- Run xmessage with a summary of the default keybindings (useful for beginners) + ] + ++ - -- - -- mod-[1..9], Switch to workspace N - -- mod-shift-[1..9], Move client to workspace N - -- - [((m .|. modm, k), windows $ f i) - | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9] - , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]] - -- ++ + -- + -- mod-[1..9], Switch to workspace N + -- mod-shift-[1..9], Move client to workspace N + -- + [((m .|. modm, k), windows $ f i) + | (i, k) <- zip (XMonad.workspaces conf) [xK_1 .. xK_9] + , (f, m) <- [(W.greedyView, 0), (W.shift, shiftMask)]] + -- ++ - -- - -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3 - -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3 - -- - -- [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f)) - -- | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..] - -- , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]] + -- + -- mod-{w,e,r}, Switch to physical/Xinerama screens 1, 2, or 3 + -- mod-shift-{w,e,r}, Move client to screen 1, 2, or 3 + -- + -- [((m .|. modm, key), screenWorkspace sc >>= flip whenJust (windows . f)) + -- | (key, sc) <- zip [xK_w, xK_e, xK_r] [0..] + -- , (f, m) <- [(W.view, 0), (W.shift, shiftMask)]] ------------------------------------------------------------------------ -- Mouse bindings: default actions bound to mouse events -- myMouseBindings (XConfig {XMonad.modMask = modm}) = M.fromList $ + -- mod-button1, Set the window to floating mode and move by dragging + [ ((modm, button1), (\w -> focus w >> mouseMoveWindow w + >> windows W.shiftMaster)) - -- mod-button1, Set the window to floating mode and move by dragging - [ ((modm, button1), (\w -> focus w >> mouseMoveWindow w - >> windows W.shiftMaster)) + -- mod-button2, Raise the window to the top of the stack + , ((modm, button2), (\w -> focus w >> windows W.shiftMaster)) - -- mod-button2, Raise the window to the top of the stack - , ((modm, button2), (\w -> focus w >> windows W.shiftMaster)) + -- mod-button3, Set the window to floating mode and resize by dragging + , ((modm, button3), (\w -> focus w >> mouseResizeWindow w + >> windows W.shiftMaster)) - -- mod-button3, Set the window to floating mode and resize by dragging - , ((modm, button3), (\w -> focus w >> mouseResizeWindow w - >> windows W.shiftMaster)) - - -- you may also bind events to the mouse scroll wheel (button4 and button5) - ] + -- you may also bind events to the mouse scroll wheel (button4 and button5) + ] ------------------------------------------------------------------------ -- Layouts: @@ -195,16 +198,16 @@ myMouseBindings (XConfig {XMonad.modMask = modm}) = M.fromList $ -- which denotes layout choice. tabCfg = def - { activeColor = "#282828" - , inactiveColor = "#1d2021" - , urgentColor = "#9d0006" - , activeBorderColor = "#504945" - , inactiveBorderColor = "#3c3836" - , urgentBorderColor = "#cc241d" - , activeTextColor = "#ebdbb2" - , inactiveTextColor = "#bdae93" - , urgentTextColor = "#ebdbb2" - } + { activeColor = "#282828" + , inactiveColor = "#1d2021" + , urgentColor = "#9d0006" + , activeBorderColor = "#504945" + , inactiveBorderColor = "#3c3836" + , urgentBorderColor = "#cc241d" + , activeTextColor = "#ebdbb2" + , inactiveTextColor = "#bdae93" + , urgentTextColor = "#ebdbb2" + } myLayout = tiled ||| tabbed shrinkText tabCfg ||| Mirror tiled where -- default tiling algorithm partitions the screen into two panes @@ -235,10 +238,10 @@ myLayout = tiled ||| tabbed shrinkText tabCfg ||| Mirror tiled -- 'className' and 'resource' are used below. -- myManageHook = composeAll - [ className =? "MPlayer" --> doFloat - , className =? "Gimp" --> doFloat - , resource =? "desktop_window" --> doIgnore - , resource =? "kdesktop" --> doIgnore ] + [ className =? "MPlayer" --> doFloat + , className =? "Gimp" --> doFloat + , resource =? "desktop_window" --> doIgnore + , resource =? "kdesktop" --> doIgnore ] ------------------------------------------------------------------------ -- Event handling @@ -273,11 +276,12 @@ myLogHook = return () -- -- By default, do nothing. myStartupHook = do - spawn "pkill oneko; oneko -tofocus -tora -position +-1+5 -fg palevioletred3 -bg pink -name 'Rose the desktop kitty'" - --spawn "pkill polybar; polybar" - spawn "pkill volumeicon; volumeicon" - spawn "pkill nm-applet; nm-applet" - spawn "mullvad-vpn --background" + spawn "pkill oneko; oneko -tofocus -tora -position +-1+5 -fg palevioletred3 -bg pink -name 'Rose the desktop kitty'" + --spawn "pkill polybar; polybar" + spawn "pkill volumeicon; volumeicon" + spawn "pkill nm-applet; nm-applet" + spawn "mullvad-vpn --background" + setDefaultKeyRemap myRemaps [myRemaps] @@ -287,7 +291,7 @@ myStartupHook = do -- Run xmonad with the settings you specify. No need to modify this. -- mySB = statusBarProp "polybar" (pure xmobarPP) -main = xmonad $ withEasySB mySB defToggleStrutsKey defaults +main = xmonad $ withEasySB mySB defToggleStrutsKey (ewmh defaults) -- A structure containing your configuration settings, overriding -- fields in the default config. Any you don't override, will @@ -316,4 +320,3 @@ defaults = def , logHook = myLogHook , startupHook = myStartupHook } - diff --git a/hosts/catbook-j/configuration.nix b/hosts/catbook-j/configuration.nix index 2db92c3..12aaed4 100644 --- a/hosts/catbook-j/configuration.nix +++ b/hosts/catbook-j/configuration.nix @@ -53,6 +53,11 @@ in { device = "DELL081C:00 044E:121F Mouse"; sensitivity = 255; }; + hardware.usbWwan.enable = true; + systemd.services."ModemManager".enable = true; + systemd.services."ModemManager".wants = [ "NetworkManager.service" ]; + systemd.services."ModemManager".wantedBy = [ "multi-user.target" ]; + programs.wireshark.enable = true; boot.resumeDevice = "/dev/disk/by-uuid/4f9e8afa-f8d7-40bf-b3ea-17e8e8fbb694"; boot.kernelParams = [ "resume_offset=7380652" ]; @@ -64,7 +69,7 @@ in { services.xserver.libinput.touchpad.tapping = false; - environment.systemPackages = [ pkgs.vivaldi pkgs.vivaldi-ffmpeg-codecs pkgs.plantuml ]; + environment.systemPackages = [ pkgs.vivaldi pkgs.vivaldi-ffmpeg-codecs pkgs.plantuml pkgs.mqttui pkgs.mobile-broadband-provider-info pkgs.modem-manager-gui pkgs.wireshark]; # Bootloader. boot.loader.systemd-boot.enable = true; @@ -82,31 +87,31 @@ in { }; }; - nixpkgs = { - overlays = [ - (self: super: { - linux_zen_xeniafied = pkgs.linuxPackagesFor (pkgs.linuxKernel.kernels.linux_zen.override { - structuredExtraConfig = with lib.kernel; { - "FB" = yes; - "FRAMEBUFFER_CONSOLE" = yes; - "VGA_CONSOLE" = yes; - "VIDEO_SELECT" = yes; - LOGO = lib.mkForce yes; - LOGO_LINUX_CLUT224 = yes; - }; - ignoreConfigErrors = true; - }); - }) - ]; - }; + # nixpkgs = { + # overlays = [ + # (self: super: { + # linux_zen_xeniafied = pkgs.linuxPackagesFor (pkgs.linuxKernel.kernels.linux_zen.override { + # structuredExtraConfig = with lib.kernel; { + # "FB" = yes; + # "FRAMEBUFFER_CONSOLE" = yes; + # "VGA_CONSOLE" = yes; + # "VIDEO_SELECT" = yes; + # LOGO = lib.mkForce yes; + # LOGO_LINUX_CLUT224 = yes; + # }; + # ignoreConfigErrors = true; + # }); + # }) + # ]; + # }; boot.kernelPackages = pkgs.linuxPackages_zen; - boot.kernelPatches = [ - { - name = "fomx"; - patch = ../../other/0001-fomx.patch; - } - ]; + # boot.kernelPatches = [ + # { + # name = "fomx"; + # patch = ../../other/0001-fomx.patch; + # } + # ]; services.xserver.displayManager.autoLogin = { enable = true; diff --git a/hosts/monosodium-glutamate-g/configuration.nix b/hosts/monosodium-glutamate-g/configuration.nix index dee73a9..0c0f11b 100644 --- a/hosts/monosodium-glutamate-g/configuration.nix +++ b/hosts/monosodium-glutamate-g/configuration.nix @@ -57,7 +57,7 @@ # latest linux kernel #boot.kernelPackages = pkgs.linuxPackages_latest; #boot.kernelPackages = pkgs.linux_zen_xeniafied; - boot.kernelPackages = pkgs.linuxPackages_zen; + kernelPackages = pkgs.linuxPackages_zen; # boot.kernelPatches = [ # { # name = "fomx"; diff --git a/hosts/schrottserver/configuration.nix b/hosts/schrottserver/configuration.nix index a426de4..df7eb1e 100644 --- a/hosts/schrottserver/configuration.nix +++ b/hosts/schrottserver/configuration.nix @@ -30,7 +30,7 @@ }; services = { - openssh.permitRootLogin = "no"; + openssh.permitRootLogin = "without-password"; fail2ban = { enable = true; bantime-increment.enable = true; diff --git a/hosts/schrottserver/nextcloud.nix b/hosts/schrottserver/nextcloud.nix index 9f4be80..dd4e04c 100644 --- a/hosts/schrottserver/nextcloud.nix +++ b/hosts/schrottserver/nextcloud.nix @@ -7,7 +7,7 @@ dbuser = "nextcloud"; dbhost = "/run/postgresql"; # nextcloud will add /.s.PGSQL.5432 by itself dbname = "nextcloud"; - adminpassFile = "${../secret-data/nextcloud-admin-pass}"; + adminpassFile = "${../../secret-data/nextcloud-admin-pass}"; adminuser = "root"; }; package = pkgs.nextcloud25; diff --git a/hosts/schrottserver/penpot.nix b/hosts/schrottserver/penpot.nix index 865f6ec..2e7f227 100644 --- a/hosts/schrottserver/penpot.nix +++ b/hosts/schrottserver/penpot.nix @@ -33,7 +33,7 @@ "PENPOT_SMTP_HOST" = "smtp.migadu.com"; "PENPOT_SMTP_PORT" = "587"; "PENPOT_SMTP_USERNAME" = "noreply-pp@schrottkatze.de"; - "PENPOT_SMTP_PASSWORD" = "${builtins.readFile ../secret-data/penpot-smtp-pass}"; + "PENPOT_SMTP_PASSWORD" = "${builtins.readFile ../../secret-data/penpot-smtp-pass}"; "PENPOT_SMTP_TLS" = "true"; "PENPOT_SMTP_SSL" = "false"; }; diff --git a/hosts/schrottserver/vaultwarden.nix b/hosts/schrottserver/vaultwarden.nix index a581d0f..a9b4edf 100644 --- a/hosts/schrottserver/vaultwarden.nix +++ b/hosts/schrottserver/vaultwarden.nix @@ -13,7 +13,7 @@ SIGNUPS_VERIFY = true; ROCKET_LOG = "debug"; ENABLE_WAL = false; - ADMIN_TOKEN = builtins.readFile ../secret-data/vaultwarden-admin-token; + ADMIN_TOKEN = builtins.readFile ../../secret-data/vaultwarden-admin-token; DOMAIN = "https://vw.schrottkatze.de"; SMTP_TIMEOUT = 15; ROCKET_PORT = 8812; diff --git a/justfile b/justfile new file mode 100644 index 0000000..18dab21 --- /dev/null +++ b/justfile @@ -0,0 +1,5 @@ +test: + sudo nixos-rebuild test --flake . --impure + +build: + sudo nixos-rebuild switch --flake . --impure diff --git a/modules/desktop/audio.nix b/modules/desktop/audio.nix index f015427..e61b48e 100644 --- a/modules/desktop/audio.nix +++ b/modules/desktop/audio.nix @@ -13,6 +13,7 @@ jack.enable = true; }; }; + hardware.pulseaudio.enable = pkgs.lib.mkForce false; sound.mediaKeys.enable = true; home-manager.users.jade = { pkgs, ... }: { home.packages = with pkgs; [ diff --git a/modules/desktop/default.nix b/modules/desktop/default.nix index ca4bd97..563288d 100644 --- a/modules/desktop/default.nix +++ b/modules/desktop/default.nix @@ -2,6 +2,7 @@ let cfg = config.jade.desktop; + # window-screenshot = pkgs.writeTextFile "window-screenshot.nu" (builtins.readFile ../../other/scripts/desktop/window-screenshot.nu); window-screenshot = pkgs.writeShellScriptBin "window-screenshot.sh" (builtins.readFile ../../other/scripts/desktop/window-screenshot.sh); # desktop-ctl = pkgs.writeShellScriptBin "desktop-ctl.sh" (builtins.readFile ../scripts/desktop/desktop-ctl.sh); desktop-ctl = import ../../other/scripts/desktop/desktopctl.nix { inherit pkgs; }; @@ -102,10 +103,13 @@ in with lib; { desktopManager = { xterm.enable = false; + # gnome = { + # enable = true; + # }; }; displayManager = { - #defaultSession = "none+i3"; + defaultSession = "none+xmonad"; gdm.enable = true; }; @@ -153,17 +157,12 @@ in with lib; { notifications.x11.enable = true; notifications.test = true; }; - services.colord.enable = true; home-manager.users.jade = { pkgs, ... }: { programs.bat = { # TODO: more config enable = true; }; - programs.exa = { - # TODO: more config - enable = true; - }; programs.nushell = { enable = true; package = config.users.defaultUserShell; @@ -172,9 +171,6 @@ in with lib; { source ${pkgs.nu_scripts}/share/nu_scripts/modules/nix/nix.nu; ''; }; - programs.ripgrep = { - enable = true; - }; services.dunst = { enable = true; settings = { @@ -195,11 +191,17 @@ in with lib; { theme = ../../other/rofi-themes/applauncher.rasi; }; home.packages = with pkgs; [ + spotifyd spotify-tui + #nushell nu_scripts direnv + just bacon + magic-wormhole-rs + yt-dlp + argyllcms displaycal @@ -209,11 +211,13 @@ in with lib; { i3lock rofimoji feh xorg.xinput arandr flameshot tesseract5 imagemagick xclip xmacro libwacom wacomtablet xorg.xev + syncplay + # categories # filemanager xfce.thunar xfce.tumbler xfce.thunar-archive-plugin gnome.file-roller # media/file viewers - vlc evince nomacs + vlc mpv evince nomacs # from environment.systemPackages cleanup font-manager xdotool xorg.xwininfo gparted librewolf firefox uhk-agent diff --git a/modules/desktop/networking.nix b/modules/desktop/networking.nix index 2c761db..7a62d05 100644 --- a/modules/desktop/networking.nix +++ b/modules/desktop/networking.nix @@ -1,34 +1,60 @@ { config, lib, pkgs, ... }: -{ +let + addNuShebang = path: builtins.concatStringsSep "\n\n" [ + "#!${pkgs.nushellFull}/bin/nu" + (builtins.readFile path) + ]; +in { config = { networking = { - networkmanager.wifi.backend = "wpa_supplicant"; - extraHosts = '' - 127.0.0.1 www.youtube.com - 127.0.0.1 www.reddit.com - 127.0.0.1 www.tiktok.com - 127.0.0.1 www.twitter.com - 127.0.0.1 www.instagram.com - 127.0.0.1 www.facebook.com - 127.0.0.1 www.snapchat.com + networkmanager = { + wifi.backend = "wpa_supplicant"; + dispatcherScripts = [ + { + type = "basic"; + source = pkgs.writeText "dispatcher" (addNuShebang ../../other/scripts/dispatcher.nu); + } + ]; + }; + hosts = { + "127.0.0.1" = [ + "www.tiktok.com" + "www.twitter.com" + "www.instagram.com" + "www.facebook.com" + "www.snapchat.com" - 127.0.0.1 youtube.com - 127.0.0.1 reddit.com - 127.0.0.1 tiktok.com - 127.0.0.1 twitter.com - 127.0.0.1 instagram.com - 127.0.0.1 facebook.com - 127.0.0.1 snapchat.com + "tiktok.com" + "twitter.com" + "instagram.com" + "facebook.com" + "snapchat.com" - 127.0.0.1 google-analytics.com - 127.0.0.1 stats.g.doubleclick.net - 127.0.0.1 googleadservices.com - 127.0.0.1 googletagmanager.com - 127.0.0.1 googletagservices.com - 127.0.0.1 googlesyndication.com - ''; + "google-analytics.com" + "stats.g.doubleclick.net" + "googleadservices.com" + "googletagmanager.com" + "googletagservices.com" + "googlesyndication.com" + ]; + "10.31.208.9" = [ + "mqtt.z9" + ]; + }; }; + environment.etc = (with builtins; ( + listToAttrs ( + map (v: { + name = "networkhooks/${v}"; + value = { + text = addNuShebang ../../other/scripts/networkhooks/${v}; + mode = "0755"; + }; + }) + (attrNames (readDir ../../other/scripts/networkhooks)) + ) + )); systemd.services."NetworkManager-wait-online".enable = false; services.mullvad-vpn.enable = true; home-manager.users.jade = { pkgs, ... }: { diff --git a/modules/helix.nix b/modules/helix.nix index bbd8cb6..5c61508 100644 --- a/modules/helix.nix +++ b/modules/helix.nix @@ -31,19 +31,14 @@ in with lib; { }; }; languages = { - language = [ - { - name = "rust"; - } - { - name = "php"; - file-types = [ "php" ]; - language-server = { - command = "psalm"; - args = ["--language-server"]; - }; - } - ]; + "php" = { + name = "php"; + file-types = [ "php" ]; + language-server = { + command = "psalm"; + args = ["--language-server"]; + }; + }; }; }; }; diff --git a/modules/utils.nix b/modules/utils.nix new file mode 100644 index 0000000..566dbe4 --- /dev/null +++ b/modules/utils.nix @@ -0,0 +1,49 @@ +{ pkgs, lib }: rec { + # taken from https://github.com/NixOS/nixpkgs/blob/3650808d85dccbfa3be3d785dfd3ce33a757bd2c/pkgs/build-support/trivial-builders/default.nix#L335 + writeNuShellApplication = + { name + , text + , runtimeInputs ? [ ] + , meta ? { } + , checkPhase ? null + }: + writeTextFile { + inherit name meta; + executable = true; + destination = "/bin/${name}"; + allowSubstitutes = true; + preferLocalBuild = false; + text = '' + #!${pkgs.nushell} + '' + lib.optionalString (runtimeInputs != [ ]) '' + + $env.PATH = ($env.PATH | split row (char esep) | prepend '${lib.makeBinPath runtimeInputs}'); + '' + '' + + ${text} + ''; + + checkPhase = + # GHC (=> shellcheck) isn't supported on some platforms (such as risc-v) + # but we still want to use writeShellApplication on those platforms + if checkPhase == null then '' + runHook preCheck + + nu -c "nu-check -d $target" + + runHook postCheck + '' + else checkPhase; + }; + packageNushellApplication = + { name + , path + , runtimeInputs ? [ ] + , meta ? { } + , checkPhase ? null + }: + writeNuShellApplication { + inherit name runtimeInputs meta checkPhase; + text = builtins.readFile path; + }; +} diff --git a/modules/zellij.nix b/modules/zellij.nix index 71edc1a..7472324 100644 --- a/modules/zellij.nix +++ b/modules/zellij.nix @@ -6,13 +6,22 @@ in with lib; { }; config = mkIf cfg.enable { home-manager.users.jade = { pkgs, ... }: { + home.file = { + zellij-forgot = { + target = ".config/zellij/plugins/zellij-forgot.wasm"; + source = builtins.fetchurl "https://github.com/karimould/zellij-forgot/releases/download/0.2.0/zellij_forgot.wasm"; + }; + monocle = { + target = ".config/zellij/plugins/monocle.wasm"; + source = builtins.fetchurl "https://github.com/imsnif/monocle/releases/download/0.37.2/monocle.wasm"; + }; + }; programs.zellij = { enable = true; - enableZshIntegration = true; settings = { theme = "gruvbox-dark"; themes.gruvbox-dark = { - fg = "#D5C4A1"; + fg = "#d5c4a1"; bg = "#282828"; black = "#3C3836"; red = "#CC241D"; @@ -21,9 +30,16 @@ in with lib; { blue = "#3C8588"; magenta = "#B16286"; cyan = "#689D6A"; - white = "#FBF1C7"; + white = "#665c54"; orange = "#D65D0E"; }; + # keybinds = { + # session = { + # "bind \"o\"" = { + # LaunchOrFocusPlugin = ["file:/home/jade/.config/zellij/plugins/monocle.wasm" { floating = true; }]; + # }; + # }; + # }; pane_frames = false; }; }; diff --git a/other/config.nu b/other/config.nu index c0a1e82..cd8e7a9 100644 --- a/other/config.nu +++ b/other/config.nu @@ -247,9 +247,21 @@ $env.config = { hooks: { pre_prompt: [{ || - let direnv = (direnv export json | from json) - let direnv = if ($direnv | length) == 1 { $direnv } else { {} } - $direnv | load-env + let direnv = (direnv export json | from json | default {}) + if ($direnv | is-empty) { + return + } + $direnv + | items {|key, value| + { + key: $key + value: (if $key in $env.ENV_CONVERSIONS { + do ($env.ENV_CONVERSIONS | get $key | get from_string) $value + } else { + $value + }) + } + } | transpose -ird | load-env }] # run before the prompt is shown pre_execution: [{ null }] # run before the repl input is run env_change: { @@ -793,3 +805,5 @@ start_zellij alias gnix = cd ~/nix-configs; alias grepo = cd ~/Documents/repos; alias wh = wormhole-rs; +alias nix-shell = nix-shell --run 'nu -li'; +alias nsp = nix-shell --run 'nu -li' -p; diff --git a/other/scripts/desktop/window-screenshot.nu b/other/scripts/desktop/window-screenshot.nu new file mode 100644 index 0000000..89785b2 --- /dev/null +++ b/other/scripts/desktop/window-screenshot.nu @@ -0,0 +1,19 @@ +#!/usr/bin/env nu + +def main [ ] { + let reg = ( + xwininfo -id (xdotool getactivewindow) + | lines + | parse '{key}: {value}' + | str trim + | get value + | echo { + x: $in.1 + y: $in.2 + w: $in.5 + h: $in.6 + } + ); + + flameshot gui --region $"($reg.w)x($reg.h)+($reg.x)+($reg.y)" -c -p ~/Pictures/screenshots +} \ No newline at end of file diff --git a/other/scripts/dispatcher.nu b/other/scripts/dispatcher.nu new file mode 100755 index 0000000..f4e9f71 --- /dev/null +++ b/other/scripts/dispatcher.nu @@ -0,0 +1,19 @@ +def main [ + interface: string + type: string +] { + $env.PATH = ($env.PATH | split row (char esep) | append '/run/current-system/sw/bin'); + + let currentnet = ( + nmcli -m tabular connection show --active + | detect columns + | first + | get name + ); + + systemd-cat echo $"($currentnet) \(($interface)): ($type)"; + + if $interface == 'wlp2s0' { + ^$"/etc/networkhooks/($currentnet).nu" $interface $type + } +} diff --git a/other/scripts/networkhooks/WIFI@DB.nu b/other/scripts/networkhooks/WIFI@DB.nu new file mode 100755 index 0000000..dd0390d --- /dev/null +++ b/other/scripts/networkhooks/WIFI@DB.nu @@ -0,0 +1,40 @@ +def main [ + interface: string + type: string +] { + if not ($type == 'up') { + exit + }; + + mullvad disconnect; + let page = http get 'http://172.0.0.1/'; + + let hotspot_ip = $page | htmlq 'input[name=uamip]' -a 'value'; + let hotspot_port = $page | htmlq 'input[name=uamport]' -a 'value'; + + let pl_data = $page + | htmlq input -a name -r input[name=button] + | lines + | wrap name + | merge ( + $page + | htmlq input -a value + | lines + | wrap value + ) + | drop 1; + + let payload = $pl_data + | each {|kv| [ + ($kv.name | url encode --all) + ($kv.value | url encode --all) ] + | str join '=' + } | str join '&'; + + let res = curl --insecure --resolve $"www.hotsplots.de:($hotspot_port):($hotspot_ip)" -H 'Content-Type: application/x-www-form-urlencoded' "https://www.hotsplots.de/auth/login.php" --data-raw $"($payload)" ; + + let url = $res | htmlq 'meta[http-equiv=refresh]' -a 'content' | parse '0;url={url}'; + + http get $url.url.0; + mullvad connect; +} diff --git a/other/scripts/networkhooks/WIFIonICE.nu b/other/scripts/networkhooks/WIFIonICE.nu new file mode 100644 index 0000000..2de9902 --- /dev/null +++ b/other/scripts/networkhooks/WIFIonICE.nu @@ -0,0 +1,22 @@ +#! /usr/bin/env nix-shell +#! nix-shell -i bash -p curl htmlq + +# echo "Fetching cookie and CSRF token..." +# form=$(curl --silent --location --junk-session-cookies --cookie-jar /tmp/wifionice "https://login.wifionice.de/en/" --resolve login.wifionice.de:443:10.101.64.10 -i | htmlq "input") + +# keys=$(htmlq "input" --attribute "name" <<< "$form") +# values=$(htmlq "input" --attribute "value" <<< "$form") +# payload=$(paste --delimiters="=" <(echo "$keys") <(echo "$values") | tr "\n" "&") + +# echo "Payload: \"$payload\"" +# echo "POSTing payload..." + +# curl --cookie /tmp/wifionice "https://login.wifionice.de/en/" --resolve login.wifionice.de:443:10.101.64.10 -d "$payload" + +def main [ + interface: string + type: string +] { + let form = curl --silent --location --junk-session-cookies --cookie-jar /tmp/wifionice 'https://login.wifionice.de/en/' --resolve 'login.wifionice.de:443:10.101.64.10' -i | htmlq 'input'; + # TODO +} diff --git a/other/scripts/networkhooks/ccchh.nu b/other/scripts/networkhooks/ccchh.nu new file mode 100644 index 0000000..bce6e8e --- /dev/null +++ b/other/scripts/networkhooks/ccchh.nu @@ -0,0 +1,41 @@ +const wave_timeout = 15min; + +def main [ + interface: string + type: string +] { + if not ('/var/lib/ccchh-winken/last' | path exists) { + mkdir '/var/lib/ccchh-winken'; + 0 | into datetime | save '/var/lib/ccchh-winken/last' -f; + } + + let $last_waved = open '/var/lib/ccchh-winken/last' --raw | into datetime; + + if ((date now) - $last_waved) > $wave_timeout { + if $type == "up" { + mullvad disconnect; + curl mqtt://mqtt.z9/winkekatze/katz9/eye/set -d (rand-color); + curl mqtt://mqtt.z9/winkekatze/Viktoria/eye/set -d (rand-color); + curl mqtt://mqtt.z9/winkekatze/allcats -d 'wink'; + mullvad connect; + + date now | save '/var/lib/ccchh-winken/last' -f; + } + } +} + +def rand-color [] { + const colors = [ + "blue" + "cyan" + "green" + "pink" + "red" + "white" + "yellow" + ]; + + $colors | get (random integer 0..(($colors | length) - 1)) +} + + diff --git a/test.sh b/test.sh deleted file mode 100755 index f6cda85..0000000 --- a/test.sh +++ /dev/null @@ -1 +0,0 @@ -sudo nixos-rebuild test --flake . --impure