From ced09b9dcddf3016d23f4305e83a3f980717c710 Mon Sep 17 00:00:00 2001 From: EdenQwQ Date: Tue, 29 Apr 2025 14:16:34 +0800 Subject: [PATCH] misc --- home/programs/desktop/default.nix | 1 + home/programs/desktop/scroll/default.nix | 418 +++++++++++++++++++++++ home/tweaks/colorscheme.nix | 4 +- home/tweaks/wallpaper.nix | 4 + pkgs/R.nix | 2 + pkgs/wallpapers.nix | 5 + templates/default.nix | 5 + templates/python-basic/flake.lock | 96 ++++++ templates/python-basic/flake.nix | 46 +++ 9 files changed, 579 insertions(+), 2 deletions(-) create mode 100644 home/programs/desktop/scroll/default.nix create mode 100644 templates/python-basic/flake.lock create mode 100644 templates/python-basic/flake.nix diff --git a/home/programs/desktop/default.nix b/home/programs/desktop/default.nix index ed7ddeb..8d686e2 100644 --- a/home/programs/desktop/default.nix +++ b/home/programs/desktop/default.nix @@ -6,6 +6,7 @@ ./mako.nix ./niri ./swhkd.nix + ./scroll ]; home.packages = with pkgs; [ swww diff --git a/home/programs/desktop/scroll/default.nix b/home/programs/desktop/scroll/default.nix new file mode 100644 index 0000000..d80e4b1 --- /dev/null +++ b/home/programs/desktop/scroll/default.nix @@ -0,0 +1,418 @@ +{ config, ... }: +let + outputConf = + builtins.attrNames config.monitors + |> map ( + name: + with config.monitors.${name}; + "output ${name} resolution ${toString mode.width}x${toString mode.height} position ${toString position.x},${toString position.y} scale ${toString scale} transform ${360 - rotation |> toString}" + ) + |> builtins.concatStringsSep "\n"; +in +{ + xdg.configFile."scroll/config".text = with config.lib.stylix.colors; '' + # Default config for scroll + # + # Copy this to ~/.config/scroll/config and edit it to your liking. + # + # Read `man 5 scroll` for a complete reference. + + ### Variables + # + # Logo key. Use Mod1 for Alt. + set $mod Mod4 + # Home row direction keys, like vim + set $left h + set $down j + set $up k + set $right l + # Your preferred terminal emulator + set $term kitty + # Your preferred application launcher + set $menu sh -c $(tofi-run) + + ### Output configuration + # + # Default wallpaper (more resolutions are available in @datadir@/backgrounds/scroll/) + # output * bg @datadir@/backgrounds/scroll/Sway_Wallpaper_Blue_1920x1080.png fill + # + # Example configuration: + # + # output HDMI-A-1 resolution 1920x1080 position 1920,0 + # + # You can get the names of your outputs by running: scrollmsg -t get_outputs + ${outputConf} + # output HDMI-A-1 resolution 2560x1600 position 0,60 scale 1.6 transform 270 + # output eDP-1 resolution 2240x1400 position 1000,0 scale 1.6 + + ### Idle configuration + # + # Example configuration: + # + # exec swayidle -w \ + # timeout 300 'swaylock -f -c 000000' \ + # timeout 600 'scrollmsg "output * power off"' resume 'scrollmsg "output * power on"' \ + # before-sleep 'swaylock -f -c 000000' + # + # This will lock your screen after 300 seconds of inactivity, then turn off + # your displays after another 300 seconds, and turn your screens back on when + # resumed. It will also lock your screen before your computer goes to sleep. + + ### Input configuration + # + # Example configuration: + # + # input "2:14:SynPS/2_Synaptics_TouchPad" { + # dwt enabled + # tap enabled + # natural_scroll enabled + # middle_emulation enabled + # } + # + # You can get the names of your inputs by running: scrollmsg -t get_inputs + # Read `man 5 scroll-input` for more information about this section. + input "1267:12815:VEN_04F3:00_04F3:320F_Touchpad" { + tap enabled + drag_lock disabled + } + + ### Windows defaults + default_border pixel 4 + gaps inner 5 + gaps outer 5 + client.focused ${base0E} ${base01} ${base05} ${base0A} ${base0E} + client.focused_inactive ${base03} ${base01} ${base05} ${base0A} ${base03} + client.unfocused ${base03} ${base01} ${base05} ${base0A} ${base03} + + # Idle inhibit for fullscreen windows + for_window [all] inhibit_idle fullscreen + + # Layout settings + layout_default_width 0.666666667 + layout_default_height 1.0 + layout_widths [0.33333333 0.5 0.666666667 1.0] + layout_heights [0.33333333 0.5 0.666666667 1.0] + + fullscreen_movefocus true + + ### Key bindings + # + # Basics: + # + # Start a terminal + bindsym $mod+Return exec $term + + # Kill focused window + bindsym $mod+q kill + + # Start your launcher + bindsym $mod+p exec $menu + + # Drag floating windows by holding down $mod and left mouse button. + # Resize them with right mouse button + $mod. + # Despite the name, also works for non-floating windows. + # Change normal to inverse to use left mouse button for resizing and right + # mouse button for dragging. + floating_modifier $mod normal + + # Reload the configuration file + bindsym $mod+Shift+c reload + + # Exit scroll (logs you out of your Wayland session) + bindsym $mod+Shift+x exec scrollnag -t warning -m 'You pressed the exit shortcut. Do you really want to exit scroll? This will end your Wayland session.' -B 'Yes, exit scroll' 'scrollmsg exit' + + # Layout mode + bindsym $mod+alt+h set_mode h + bindsym $mod+alt+v set_mode v + # + # Moving around: + # + # Move your focus around + bindsym $mod+$left focus left + bindsym $mod+$down focus down + bindsym $mod+$up focus up + bindsym $mod+$right focus right + bindsym $mod+home focus beginning + bindsym $mod+end focus end + # Move the focused window with the same, but add Ctrl + bindsym $mod+Shift+$left move left + bindsym $mod+Shift+$down move down + bindsym $mod+Shift+$up move up + bindsym $mod+Shift+$right move right + bindsym $mod+Shift+home move beginning + bindsym $mod+Shift+end move end + # # nomode + # bindsym $mod+Alt+$left move left nomode + # bindsym $mod+Alt+$down move down nomode + # bindsym $mod+Alt+$up move up nomode + # bindsym $mod+Alt+$right move right nomode + # bindsym $mod+Alt+home move beginning nomode + # bindsym $mod+Alt+end move end nomode + + # Focus other monitors + bindsym $mod+Ctrl+$left focus output left + bindsym $mod+Ctrl+$down focus output down + bindsym $mod+Ctrl+$up focus output up + bindsym $mod+Ctrl+$right focus output right + # + # Workspaces: + # + # Switch to workspace + bindsym $mod+1 workspace number 1 + bindsym $mod+2 workspace number 2 + bindsym $mod+3 workspace number 3 + bindsym $mod+4 workspace number 4 + bindsym $mod+5 workspace number 5 + bindsym $mod+6 workspace number 6 + bindsym $mod+7 workspace number 7 + bindsym $mod+8 workspace number 8 + bindsym $mod+9 workspace number 9 + bindsym $mod+0 workspace number 10 + # Move focused container to workspace + bindsym $mod+Shift+1 move container to workspace number 1; workspace number 1 + bindsym $mod+Shift+2 move container to workspace number 2; workspace number 2 + bindsym $mod+Shift+3 move container to workspace number 3; workspace number 3 + bindsym $mod+Shift+4 move container to workspace number 4; workspace number 4 + bindsym $mod+Shift+5 move container to workspace number 5; workspace number 5 + bindsym $mod+Shift+6 move container to workspace number 6; workspace number 6 + bindsym $mod+Shift+7 move container to workspace number 7; workspace number 7 + bindsym $mod+Shift+8 move container to workspace number 8; workspace number 8 + bindsym $mod+Shift+9 move container to workspace number 9; workspace number 9 + bindsym $mod+Shift+0 move container to workspace number 10; workspace number 10 + # Note: workspaces can have any name you want, not just numbers. + # We just use 1-10 as the default. + + bindsym $mod+Ctrl+1 move workspace to output left + bindsym $mod+Ctrl+2 move workspace to output right + + # Scaling + # Workspace + bindsym $mod+Shift+comma scale_workspace incr -0.05 + bindsym --whole-window $mod+Shift+button4 scale_workspace incr -0.05 + bindsym $mod+Shift+period scale_workspace incr 0.05 + bindsym --whole-window $mod+Shift+button5 scale_workspace incr 0.05 + bindsym $mod+Shift+Ctrl+period scale_workspace reset + + # Overview + bindsym --no-repeat $mod+w scale_workspace overview + bindsym --whole-window button8 scale_workspace overview + + # Jump + # jump_labels_color #9e1530FF + # jump_labels_background #15309eFF + # jump_labels_scale 0.9 + # jump_labels_keys asdf + bindsym --no-repeat $mod+slash jump + + # Content + bindsym $mod+comma scale_content incr -0.05 + bindsym --whole-window $mod+button4 scale_content incr -0.05 + bindsym $mod+period scale_content incr 0.05 + bindsym --whole-window $mod+button5 scale_content incr 0.05 + bindsym $mod+Ctrl+period scale_content reset + + # + # Layout stuff: + # + # Make the current focus fullscreen + bindsym $mod+f fullscreen + bindsym $mod+Ctrl+f fullscreen global + + # Toggle the current focus between tiling and floating mode + bindsym $mod+y focus mode_toggle + # Float a window + bindsym $mod+Shift+f floating toggle + + # Toggle sticky + bindsym $mod+a sticky toggle + + # Marks + # bindsym $mod+m exec scroll-mark-toggle.sh + # bindsym $mod+Shift+m exec scroll-mark-remove.sh + # bindsym $mod+apostrophe exec scroll-mark-switch.sh + + # + # Scratchpad: + # + # Scroll has a "scratchpad", which is a bag of holding for windows. + # You can send windows there and get them back later. + + # Move the currently focused window to the scratchpad + bindsym $mod+Shift+z move scratchpad + + # Show the next scratchpad window or hide the focused scratchpad window. + # If there are multiple scratchpad windows, this command cycles through them. + bindsym $mod+z scratchpad show + + # + # Mode modifiers + # + # mode "modifiers" { + # bindsym $right set_mode after; mode default + # bindsym $left set_mode before; mode default + # bindsym home set_mode beginning; mode default + # bindsym end set_mode end; mode default + # bindsym $up set_mode focus; mode default + # bindsym $down set_mode nofocus; mode default + # bindsym h set_mode center_horiz; mode default + # bindsym Shift+h set_mode nocenter_horiz; mode default + # bindsym v set_mode center_vert; mode default + # bindsym Shift+v set_mode nocenter_vert; mode default + # bindsym r set_mode reorder_auto; mode default + # bindsym Shift+r set_mode noreorder_auto; mode default + # + # # Return to default mode + # bindsym Escape mode "default" + # } + # bindsym $mod+backslash mode "modifiers" + + # + # Resizing containers: + # + bindsym $mod+minus cycle_size h prev + bindsym $mod+equal cycle_size h next + bindsym $mod+Shift+minus cycle_size v prev + bindsym $mod+Shift+equal cycle_size v next + + mode "setsizeh" { + bindsym 1 set_size h 0.125 + bindsym 2 set_size h 0.1666666667 + bindsym 3 set_size h 0.25 + bindsym 4 set_size h 0.333333333 + bindsym 5 set_size h 0.375 + bindsym 6 set_size h 0.5 + bindsym 7 set_size h 0.625 + bindsym 8 set_size h 0.6666666667 + bindsym 9 set_size h 0.75 + bindsym 0 set_size h 0.833333333 + bindsym minus set_size h 0.875 + bindsym equal set_size h 1.0 + + # Return to default mode + bindsym Escape mode "default" + } + bindsym $mod+b mode "setsizeh" + + mode "setsizev" { + bindsym 1 set_size v 0.125 + bindsym 2 set_size v 0.1666666667 + bindsym 3 set_size v 0.25 + bindsym 4 set_size v 0.333333333 + bindsym 5 set_size v 0.375 + bindsym 6 set_size v 0.5 + bindsym 7 set_size v 0.625 + bindsym 8 set_size v 0.6666666667 + bindsym 9 set_size v 0.75 + bindsym 0 set_size v 0.833333333 + bindsym minus set_size v 0.875 + bindsym equal set_size v 1.0 + + # Return to default mode + bindsym Escape mode "default" + } + bindsym $mod+Shift+b mode "setsizev" + + mode "resize" { + # left will shrink the containers width + # right will grow the containers width + # up will shrink the containers height + # down will grow the containers height + bindsym $left resize shrink width 100px + bindsym $down resize grow height 100px + bindsym $up resize shrink height 100px + bindsym $right resize grow width 100px + + # Return to default mode + bindsym Escape mode "default" + } + bindsym $mod+Shift+r mode "resize" + + mode "align" { + bindsym c align center; mode default + bindsym m align middle; mode default + bindsym r align reset; mode default + bindsym $left align left; mode default + bindsym $right align right; mode default + bindsym $up align up; mode default + bindsym $down align down; mode default + bindsym Escape mode "default" + } + bindsym $mod+c mode "align" + + # mode "fit_size" { + # bindsym w fit_size h visible proportional; mode default + # bindsym Shift+w fit_size v visible proportional; mode default + # bindsym Ctrl+w fit_size h visible equal; mode default + # bindsym Ctrl+Shift+w fit_size v visible equal; mode default + # + # bindsym $right fit_size h toend proportional; mode default + # bindsym Shift+$right fit_size v toend proportional; mode default + # bindsym Ctrl+$right fit_size h toend equal; mode default + # bindsym Ctrl+Shift+$right fit_size v toend equal; mode default + # + # bindsym $left fit_size h tobeg proportional; mode default + # bindsym Shift+$left fit_size v tobeg proportional; mode default + # bindsym Ctrl+$left fit_size h tobeg equal; mode default + # bindsym Ctrl+Shift+$left fit_size v tobeg equal; mode default + # + # bindsym $up fit_size h active proportional; mode default + # bindsym Shift+$up fit_size v active proportional; mode default + # #bindsym Ctrl+$up fit_size h active equal; mode default + # #bindsym Ctrl+Shift+$up fit_size v active equal; mode default + # + # bindsym $down fit_size h all proportional; mode default + # bindsym Shift+$down fit_size v all proportional; mode default + # bindsym Ctrl+$down fit_size h all equal; mode default + # bindsym Ctrl+Shift+$down fit_size v all equal; mode default + # } + # bindsym $mod+w mode "fit_size" + + # + # Utilities: + # + # Special keys to adjust volume via PulseAudio + bindsym --locked XF86AudioMute exec pactl set-sink-mute \@DEFAULT_SINK@ toggle + bindsym --locked XF86AudioLowerVolume exec pactl set-sink-volume \@DEFAULT_SINK@ -5% + bindsym --locked XF86AudioRaiseVolume exec pactl set-sink-volume \@DEFAULT_SINK@ +5% + bindsym --locked XF86AudioMicMute exec pactl set-source-mute \@DEFAULT_SOURCE@ toggle + # Special keys to adjust brightness via brightnessctl + bindsym --locked XF86MonBrightnessDown exec brightnessctl set 5%- + bindsym --locked XF86MonBrightnessUp exec brightnessctl set 5%+ + # Special key to take a screenshot with grim + bindsym Print exec grim + + + focus_wrapping no + + bindgesture swipe:4:right workspace next + bindgesture swipe:4:left workspace prev + + bindgesture swipe:4:up scale_workspace overview + bindgesture swipe:4:down jump + + bindgesture swipe:3:right focus right + bindgesture swipe:3:left focus left + bindgesture swipe:3:up focus up + bindgesture swipe:3:down focus down + + # + # Status Bar: + # + # Read `man 5 scroll-bar` for more information about this section. + # bar { + # position top + # + # # When the status_command prints a new line to stdout, scrollbar updates. + # # The default just shows the current date and time. + # status_command while date +'%Y-%m-%d %X'; do sleep 1; done + # + # colors { + # statusline #ffffff + # background #323232 + # inactive_workspace #32323200 #32323200 #5c5c5c + # } + # } + # + # include @sysconfdir@/scroll/config.d/* + ''; +} diff --git a/home/tweaks/colorscheme.nix b/home/tweaks/colorscheme.nix index 96ec99a..fcd78cb 100644 --- a/home/tweaks/colorscheme.nix +++ b/home/tweaks/colorscheme.nix @@ -7,10 +7,10 @@ "everforest" "petrichor-downpour" { - name = "frieren-butterflies-dark"; + name = "celestia-lunar-dark"; fromImage = { enable = true; - image = "frieren-butterflies.jpg"; + image = "celestia-lunar.jpg"; method = "matugen"; passthru.scheme = "scheme-expressive"; }; diff --git a/home/tweaks/wallpaper.nix b/home/tweaks/wallpaper.nix index 03d6fdd..f267f0b 100644 --- a/home/tweaks/wallpaper.nix +++ b/home/tweaks/wallpaper.nix @@ -65,5 +65,9 @@ name = "zzzzoka-gbc.jpg"; convertMethod = "gonord"; } + { + name = "celestia-lunar.jpg"; + convertMethod = "lutgen"; + } ]; } diff --git a/pkgs/R.nix b/pkgs/R.nix index 4cf8dd6..c4eb722 100644 --- a/pkgs/R.nix +++ b/pkgs/R.nix @@ -17,6 +17,8 @@ let languageserver styler openxlsx + ez + multicmp ]; in { diff --git a/pkgs/wallpapers.nix b/pkgs/wallpapers.nix index d0bdbf3..f883577 100644 --- a/pkgs/wallpapers.nix +++ b/pkgs/wallpapers.nix @@ -56,6 +56,11 @@ let url = "https://i.imgur.com/qE6Pr45.jpg"; sha256 = "1li5ypdvlvdpihiplf5mjj0lvf9gbcwyjslpxgla6wz0fzrwnvgi"; } + { + name = "celestia-lunar.jpg"; + url = "https://i.imgur.com/QIhYwtH.jpg"; + sha256 = "04dsm4dpv2mddzw7vw77bb0s2mkd4n54hnfa277181smnns7cdzz"; + } ]; wallpaperSrcs = map fetchurl wallpapers; diff --git a/templates/default.nix b/templates/default.nix index bb01c0a..a4f0745 100644 --- a/templates/default.nix +++ b/templates/default.nix @@ -1,4 +1,9 @@ { + python-basic = { + path = ./python-basic; + description = "Python with basic modules for organizing data"; + }; + python-analyze = { path = ./python-analyze; description = "Python with modules for analyzing data"; diff --git a/templates/python-basic/flake.lock b/templates/python-basic/flake.lock new file mode 100644 index 0000000..4e8a4e4 --- /dev/null +++ b/templates/python-basic/flake.lock @@ -0,0 +1,96 @@ +{ + "nodes": { + "flake-parts": { + "inputs": { + "nixpkgs-lib": "nixpkgs-lib" + }, + "locked": { + "lastModified": 1741352980, + "narHash": "sha256-+u2UunDA4Cl5Fci3m7S643HzKmIDAe+fiXrLqYsR2fs=", + "owner": "hercules-ci", + "repo": "flake-parts", + "rev": "f4330d22f1c5d2ba72d3d22df5597d123fdb60a9", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "flake-parts", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1739451785, + "narHash": "sha256-3ebRdThRic9bHMuNi2IAA/ek9b32bsy8F5R4SvGTIog=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "1128e89fd5e11bb25aedbfc287733c6502202ea9", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-lib": { + "locked": { + "lastModified": 1740877520, + "narHash": "sha256-oiwv/ZK/2FhGxrCkQkB83i7GnWXPPLzoqFHpDD3uYpk=", + "owner": "nix-community", + "repo": "nixpkgs.lib", + "rev": "147dee35aab2193b174e4c0868bd80ead5ce755c", + "type": "github" + }, + "original": { + "owner": "nix-community", + "repo": "nixpkgs.lib", + "type": "github" + } + }, + "nixpkgs_2": { + "locked": { + "lastModified": 1735554305, + "narHash": "sha256-zExSA1i/b+1NMRhGGLtNfFGXgLtgo+dcuzHzaWA6w3Q=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "0e82ab234249d8eee3e8c91437802b32c74bb3fd", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-parts": "flake-parts", + "nixpkgs": "nixpkgs", + "treefmt-nix": "treefmt-nix" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, + "locked": { + "lastModified": 1742370146, + "narHash": "sha256-XRE8hL4vKIQyVMDXykFh4ceo3KSpuJF3ts8GKwh5bIU=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "adc195eef5da3606891cedf80c0d9ce2d3190808", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", + "type": "github" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/templates/python-basic/flake.nix b/templates/python-basic/flake.nix new file mode 100644 index 0000000..307eb1a --- /dev/null +++ b/templates/python-basic/flake.nix @@ -0,0 +1,46 @@ +{ + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + flake-parts.url = "github:hercules-ci/flake-parts"; + treefmt-nix.url = "github:numtide/treefmt-nix"; + }; + + outputs = + { ... }@inputs: + inputs.flake-parts.lib.mkFlake { inherit inputs; } { + systems = [ "x86_64-linux" ]; + imports = [ + inputs.treefmt-nix.flakeModule + ]; + perSystem = + { pkgs, ... }: + { + devShells = { + default = + let + python = pkgs.python312; + in + pkgs.mkShellNoCC { + buildInputs = [ + (python.withPackages ( + ps: with ps; [ + numpy + pandas + openpyxl + scipy + ] + )) + ]; + shellHook = '' + fish + ''; + }; + }; + treefmt = { + projectRootFile = "flake.nix"; + programs.nixfmt.enable = true; + programs.ruff-format.enable = true; + }; + }; + }; +}